暴露一个REST API以在Word文档上添加水印

如何通过ASP.NET Core REST API向Word文档添加水印

本教程指导您 如何在 ASP.NET Core 中公开一个用于向 Word 文档添加水印的 REST API。它包括逐步说明、设置细节和主要平台的部署指南。

通过 REST API 向 Word 文档添加水印的步骤

  1. 设置一个用于添加水印的 ASP.NET Core Web API 项目。
  2. 通过 NuGet 包管理器安装 Aspose.Words for .NET
  3. 创建一个控制器,设置一个端点以接收 Word 文件和水印文本或图像参数。
  4. 编写代码向 Word 文档添加文本或图像水印。
  5. 使用 Postman 或 cURL 等工具在本地测试 API。
  6. 在 Windows、Linux 或 macOS 环境中部署 API。
  7. 为生产部署配置 Nginx 或 IIS。

这些步骤提供了创建和公开 水印 API 的详细方法。

代码示例:用于添加水印的 REST API

下面是一个可运行的代码片段,用于公开一个添加文本水印到 Word 文档的 REST API:

using System.IO;
using System.Threading.Tasks;
using Aspose.Words;
using Aspose.Words.Drawing;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WatermarkAPI.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class WatermarkController : ControllerBase
    {
        [HttpPost("add-watermark")]
        public async Task<IActionResult> AddWatermark(IFormFile file, [FromQuery] string watermarkText)
        {
            if (file == null || file.Length == 0 || string.IsNullOrWhiteSpace(watermarkText))
                return BadRequest("请上传有效的 Word 文档并提供水印文本。");

            try
            {
                var tempFilePath = Path.GetTempFileName();
                using (var stream = new FileStream(tempFilePath, FileMode.Create))
                {
                    await file.CopyToAsync(stream);
                }

                Document doc = new Document(tempFilePath);
                AddTextWatermark(doc, watermarkText);

                var outputStream = new MemoryStream();
                doc.Save(outputStream, SaveFormat.Docx);

                outputStream.Position = 0;
                return File(outputStream, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "watermarked.docx");
            }
            catch (System.Exception ex)
            {
                return StatusCode(500, $"内部服务器错误: {ex.Message}");
            }
        }

        private void AddTextWatermark(Document doc, string text)
        {
            foreach (Section section in doc.Sections)
            {
                var watermark = new Shape(doc, ShapeType.TextPlainText)
                {
                    TextPath = { Text = text, FontFamily = "Arial" },
                    Width = 300,
                    Height = 70,
                    Rotation = -40,
                    FillColor = System.Drawing.Color.LightGray,
                    StrokeColor = System.Drawing.Color.LightGray,
                    WrapType = WrapType.None,
                    BehindText = true,
                    RelativeHorizontalPosition = RelativeHorizontalPosition.Page,
                    RelativeVerticalPosition = RelativeVerticalPosition.Page,
                    Left = 100,
                    Top = 200
                };

                section.HeadersFooters[HeaderFooterType.HeaderPrimary]?.AppendChild(watermark);
            }
        }
    }
}

在主要平台上的部署

Windows

  1. 安装 IIS 并配置站点以指向发布的应用程序文件夹。
  2. 发布应用程序:
    dotnet publish -c Release -o publish

Linux

  1. 安装 ASP.NET Core 运行时:
    sudo apt-get install -y aspnetcore-runtime-7.0
  2. 发布应用程序:
    dotnet publish -c Release -o publish
  3. 配置 Nginx 将流量代理到 Kestrel 服务器。

macOS

  1. 官方网站 安装 .NET 运行时。
  2. 发布并运行:
    dotnet publish -c Release -o publish
    cd publish
    dotnet WatermarkAPI.dll

常见问题及解决方案

  1. 无效输入错误:确保上传的文件是有效的 Word 文档,且水印文本不能为空。
  2. 访问被拒绝错误:在 Linux/macOS 上,为应用程序文件夹授予适当的权限。
    chmod -R 755 /path/to/app
  3. 性能问题:对于大文件,通过直接从磁盘处理文件而不是流来优化内存使用。

本指南向您展示了如何使用 Aspose.Words for .NET 创建一个用于向 Word 文档添加水印的 REST API,并在所有主要平台上进行部署。

 中文