Exponer una API REST para Marcar con Agua Documentos de Word
Cómo agregar marcas de agua a documentos de Word a través de la API REST de ASP.NET Core
Este tutorial te guía sobre cómo exponer una API REST para agregar marcas de agua a documentos de Word en ASP.NET Core. Incluye instrucciones paso a paso, detalles de configuración y pautas de implementación para las principales plataformas.
Pasos para Agregar Marcas de Agua a Documentos de Word a través de la API REST
- Configura un proyecto de API Web ASP.NET Core para agregar marcas de agua.
- Instala Aspose.Words para .NET a través del Administrador de Paquetes NuGet.
- Crea un controlador con un endpoint para aceptar archivos de Word y parámetros de texto o imagen de marca de agua.
- Escribe código para agregar marcas de agua de texto o imagen a documentos de Word.
- Prueba la API localmente utilizando herramientas como Postman o cURL.
- Despliega la API en entornos de Windows, Linux o macOS.
- Configura Nginx o IIS para la implementación en producción.
Estos pasos proporcionan un enfoque detallado para crear y exponer la API de marcas de agua.
Ejemplo de Código: API REST para Agregar Marcas de Agua
A continuación se muestra un fragmento de código ejecutable para exponer una API REST que agrega marcas de agua de texto a documentos de Word:
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("Por favor, sube un documento de Word válido y proporciona un texto de marca de agua.");
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, $"Error interno del servidor: {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);
}
}
}
}
Implementación en Principales Plataformas
Windows
- Instala IIS y configura el sitio para apuntar a la carpeta de la aplicación publicada.
- Publica la aplicación:
dotnet publish -c Release -o publish
Linux
- Instala el runtime de ASP.NET Core:
sudo apt-get install -y aspnetcore-runtime-7.0
- Publica la aplicación:
dotnet publish -c Release -o publish
- Configura Nginx para proxy de tráfico al servidor Kestrel.
macOS
- Instala el runtime de .NET desde el sitio oficial.
- Publica y ejecuta:
dotnet publish -c Release -o publish cd publish dotnet WatermarkAPI.dll
Problemas Comunes y Soluciones
- Errores de Entrada Inválida: Asegúrate de que el archivo subido sea un documento de Word válido y que el texto de la marca de agua no esté vacío.
- Errores de Acceso Denegado: En Linux/macOS, otorga permisos adecuados a la carpeta de la aplicación.
chmod -R 755 /path/to/app
- Problemas de Rendimiento: Para archivos grandes, optimiza el uso de memoria procesando archivos directamente desde el disco en lugar de flujos.
Esta guía te ha mostrado cómo crear una API REST para agregar marcas de agua a documentos de Word utilizando Aspose.Words para .NET y desplegarla en todas las principales plataformas.