Cómo migrar de Gotenberg a IronPDF en C#
Migrar de Gotenberga IronPDF: Guía completa de migración de C
La migración de GotenbergaIronPDFtransforma su flujo de trabajo PDF .NET de una arquitectura de microservicios basada en Docker con llamadas a la API HTTP a una biblioteca C# nativa en proceso. Esta guía proporciona una ruta de migración completa y paso a paso que elimina la sobrecarga de la infraestructura, la latencia de la red y la complejidad de la gestión de contenedores para los desarrolladores profesionales de .NET.
Por qué migrar de Gotenberga IronPDF
El problema de la arquitectura Gotenberg
Gotenberg es una arquitectura de microservicios basada en Docker para la generación de PDF. Aunque potente y flexible, introduce una complejidad significativa para las aplicaciones C#:
Sobrecarga de infraestructura: Requiere Docker, orquestación de contenedores (Kubernetes/Docker Compose), descubrimiento de servicios y equilibrio de carga. Cada despliegue es más complejo.
Latencia de red: Cada operación PDF requiere una llamada HTTP a un servicio independiente, lo que añade entre 10 y 100 ms por solicitud. Esta latencia aumenta rápidamente en situaciones de gran volumen.
Problemas de arranque en frío: El arranque del contenedor puede añadir entre 2 y 5 segundos a las primeras peticiones. Cada reinicio de pod, cada evento de escalado y cada despliegue desencadenan arranques en frío.
Complejidad operativa: Debe gestionar la salud, el escalado, el registro y la supervisión de los contenedores como asuntos independientes de su aplicación principal.
Datos de formulario multiparte: cada solicitud requiere la construcción de cargas útiles multiparte/datos de formulario, lo que resulta pesado, propenso a errores y tedioso de mantener.
Puntos de fallo: Los tiempos de espera de la red, la indisponibilidad del servicio y las caídas del contenedor se convierten en tu responsabilidad.
- Gestión de versiones: Las imágenes de Gotenbergse actualizan por separado de su aplicación; Los cambios en la API pueden romper las integraciones de forma inesperada.
Comparación entre Gotenberge IronPDF
| Aspecto | Gotenberg | IronPDF |
|---|---|---|
| Despliegue | Contenedor Docker + orquestación | Paquete NuGet único |
| Arquitectura | Microservicio (API REST) | Biblioteca en proceso |
| Latencia por solicitud | 10-100ms+ (ida y vuelta en red) | < 1ms de sobrecarga |
| Arranque en frío | 2-5 segundos (init del contenedor) | 1-2 segundos (sólo la primera traducción) |
| Infraestructura | Docker, Kubernetes, balanceadores de carga | No es necesario |
| Modos de fallo | Fallos en redes, contenedores y servicios | Excepciones de .NET Standard |
| Estilo API | REST multipart/form-data | Llamadas a métodos nativos de C# |
| Escala | Horizontal (más contenedores) | Vertical (en proceso) |
| Depuración | Necesidad de rastreo distribuido | Depurador estándar |
| Control de versiones | Etiquetas de la imagen del contenedor | Versiones de los paquetes NuGet |
Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una base preparada para el futuro con cero dependencias de infraestructura que se integra de forma nativa con los patrones modernos de .NET.
Evaluación de la complejidad de la migración
Esfuerzo estimado por función
| Característica | Complejidad de la migración | Notas |
|---|---|---|
| HTML a PDF | Muy bajo | Sustitución directa de métodos |
| URL a PDF | Muy bajo | Sustitución directa de métodos |
| Tamaño de papel personalizado | Bajo | Configuración basada en propiedades |
| Márgenes | Bajo | Conversión de unidades (pulgadas → mm) |
| Fusión de PDF | Bajo | Llamada a método estático |
| Encabezados/pies de página | Medio | Diferentes sintaxis de marcadores de posición |
| Retrasos de espera | Bajo | Cadena a milisegundos |
| Conversión PDF/A | Bajo | Llamada a método en lugar de parámetro |
Cambio de paradigma
El cambio fundamental en esta migración de Gotenbergconsiste en pasar de llamadas a la API HTTP con datos de formulario multiparte a llamadas a métodos nativos de C#:
using IronPdf; Gotenberg: HTTP POST multipart/form-data a contenedor Docker IronPDF: Llamadas directas a métodos en objetos de C# using IronPdf;
Antes de empezar
Prerrequisitos
- .NET Version:IronPDFes compatible con .NET Framework 4.6.2+ y .NET Core 3.1+ / .NET 5/6/7/8/9+
- Clave de licencia: Obtenga su clave de licencia deIronPDFen ironpdf.com
- Planificar la retirada de infraestructuras: Documentar los contenedores Gotenbergpara su desmantelamiento tras la migración
Identifique el uso de Gotenberg
using IronPdf;bash
Find direct HTTP calls to Gotenberg
grep -r "gotenberg|/forms/chromium|/forms/libreoffice|/forms/pdfengines" --include="*.cs" .
Find GotenbergSharpApiClient usage
grep -r "GotenbergSharpClient|Gotenberg.Sharp|ChromiumRequest" --include="*.cs" .
Find Docker/Kubernetes Gotenbergconfiguration
grep -r "gotenberg/gotenberg|gotenberg:" --include=".yml" --include=".yaml" . using IronPdf;
Cambios en el paquete NuGet
using IronPdf;bash
Remove Gotenbergclient (if using)
dotnet remove package Gotenberg.Sharp.API.Client
Install IronPDF
dotnet add package IronPdf using IronPdf;
Inicio rápido de la migración
Paso 1: Actualizar la configuración de la licencia
Antes (Gotenberg):
Gotenberg no requiere licencia, pero sí una infraestructura Docker con URL de contenedor.
using IronPdf;csharp private readonly string _gotenbergUrl = "http://localhost:3000"; using IronPdf;
Después (IronPDF):
using IronPdf;csharp // Set once at application startup IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; using IronPdf;
Paso 2: Actualizar las importaciones de espacios de nombres
using IronPdf;csharp // Before (Gotenberg) using System.Net.Http; using System.Threading.Tasks; using System.IO;
// After (IronPDF) using IronPdf; using IronPdf.Rendering; using IronPdf;
Referencia completa de la API
GotenbergEndpoint a IronPDF
| Ruta Gotenberg | Equivalente de IronPDF | Notas |
|---|---|---|
POST /forms/chromium/convert/html | <código>ChromePdfRenderer.RenderHtmlAsPdf()</código | Cadena HTML a PDF |
POST /forms/chromium/convert/url | <código>ChromePdfRenderer.RenderUrlAsPdf()</código | URL a PDF |
POST /forms/pdfengines/merge | PdfDocument.Merge() | Fusionar varios PDF |
POST /forms/pdfengines/convert | pdf.SaveAs() con ajustes | Conversión PDF/A |
COMPRAR /health | N/A | No se necesita ningún servicio externo |
Mapeo de parámetros de formulario a RenderingOptions
| Parámetro Gotenberg | Propiedad de IronPDF | Notas de conversión |
|---|---|---|
paperWidth (pulgadas) | <código>RenderingOptions.PaperSize</código | Utilizar enum o tamaño personalizado |
altura del papel (pulgadas) | <código>RenderingOptions.PaperSize</código | Utilizar enum o tamaño personalizado |
marginTop (pulgadas) | <código>RenderingOptions.MarginTop</código | Multiplique por 25,4 para mm |
margenInferior (pulgadas) | <código>RenderingOptions.MarginBottom</código | Multiplique por 25,4 para mm |
| <código>printBackground</código | <código>RenderingOptions.PrintHtmlBackgrounds</código | Booleano |
paisaje | <código>RenderingOptions.PaperOrientation</código | Paisaje enum |
waitDelay | <código>RenderingOptions.RenderDelay</código | Convertir a milisegundos |
Ejemplos de migración de código
Ejemplo 1: HTML básico a PDF
Antes (Gotenberg):
using IronPdf;csharp using System; using System.Net.Http; using System.Threading.Tasks; using System.IO;
class GotenbergExample { static async Task Main() { var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/html";
using var client = new HttpClient();
using var content = new MultipartFormDataContent();
var html = "<html><body><h1>Hello from Gotenberg</h1></body></html>";
content.Add(new StringContent(html), "files", "index.html");
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("output.pdf", pdfBytes);
Console.WriteLine("PDF generated successfully");
}} using IronPdf;
Después (IronPDF):
using IronPdf;csharp // NuGet: Install-Package IronPdf using System; using IronPdf;
class IronPdfExample { static void Main() { var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello from IronPDF</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF generated successfully");
}} using IronPdf;
La diferencia es sustancial: Gotenbergrequiere construir un HttpClient, construir MultipartFormDataContent, hacer un HTTP POST asíncrono a un contenedor Docker en ejecución y manejar la respuesta de matriz de bytes.IronPDFreduce esto a tres líneas con una llamada al método ChromePdfRenderer, sin sobrecarga de red, sin dependencia del contenedor, sin complejidad asíncrona. Consulte la documentación HTML a PDF para obtener más opciones de conversión.
Ejemplo 2: Conversión de URL a PDF
Antes (Gotenberg):
using IronPdf;csharp using System; using System.Net.Http; using System.Threading.Tasks; using System.IO;
class GotenbergUrlToPdf { static async Task Main() { var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/url";
using var client = new HttpClient();
using var content = new MultipartFormDataContent();
content.Add(new StringContent("https://example.com"), "url");
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
Console.WriteLine("PDF from URL generated successfully");
}} using IronPdf;
Después (IronPDF):
using IronPdf;csharp // NuGet: Install-Package IronPdf using System; using IronPdf;
class IronPdfUrlToPdf { static void Main() { var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL generated successfully");
}} using IronPdf;
El enfoque de Gotenbergrequiere un punto final diferente (/forms/chromium/convert/url), la creación de contenido multiparte con la URL como campo de formulario y la gestión de respuestas HTTP asíncronas. El método RenderUrlAsPdf() deIronPDFacepta la URL directamente y devuelve un objeto PdfDocument de forma sincrónica. Más información sobre Conversión de URL a PDF.
Ejemplo 3: Tamaño de papel y márgenes personalizados
Antes (Gotenberg):
using IronPdf;csharp using System; using System.Net.Http; using System.Threading.Tasks; using System.IO;
class GotenbergCustomSize { static async Task Main() { var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/html";
using var client = new HttpClient();
using var content = new MultipartFormDataContent();
var html = "<html><body><h1>Custom Size PDF</h1></body></html>";
content.Add(new StringContent(html), "files", "index.html");
content.Add(new StringContent("8.5"), "paperWidth");
content.Add(new StringContent("11"), "paperHeight");
content.Add(new StringContent("0.5"), "marginTop");
content.Add(new StringContent("0.5"), "marginBottom");
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("custom-size.pdf", pdfBytes);
Console.WriteLine("Custom size PDF generated successfully");
}} using IronPdf;
Después (IronPDF):
using IronPdf;csharp // NuGet: Install-Package IronPdf using System; using IronPdf; using IronPdf.Rendering;
class IronPdfCustomSize { static void Main() { var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
var html = "<html><body><h1>Custom Size PDF</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom-size.pdf");
Console.WriteLine("Custom size PDF generated successfully");
}} using IronPdf;
Gotenberg requiere parámetros basados en cadenas ("8.5", "11", "0.5") que se añaden a los datos de formularios multiparte: sin seguridad de tipo, sin IntelliSense, fáciles de escribir mal.IronPDFproporciona propiedades fuertemente tipadas con enums PdfPaperSize y valores de margen numéricos. Tenga en cuenta que los márgenes deIronPDFestán en milímetros (50 mm ≈ 2 pulgadas), mientras que Gotenbergutiliza pulgadas.
Notas de migración críticas
Conversiones de unidades
La conversión más importante en esta migración de Gotenbergson las unidades de margen:
using IronPdf;csharp // Gotenberg: margins in inches content.Add(new StringContent("0.5"), "marginTop"); // 0.5 inches content.Add(new StringContent("1"), "marginBottom"); // 1 inch
// IronPDF: margins in millimeters renderer.RenderingOptions.MarginTop = 12.7; // 0.5 inches × 25.4 = 12.7mm renderer.RenderingOptions.MarginBottom = 25.4; // 1 inch × 25.4 = 25.4mm using IronPdf;
Fórmula de conversión: milímetros = pulgadas × 25,4
Síncrono frente a asíncrono
Gotenberg requiere operaciones asíncronas debido a la comunicación HTTP:
using IronPdf;csharp // Gotenberg: Forced async due to network calls var response = await client.PostAsync(gotenbergUrl, content); var pdfBytes = await response.Content.ReadAsByteArrayAsync();
// IronPDF: Synchronous in-process execution var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf");
// IronPDF: Async wrapper if needed var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(html)); using IronPdf;
Manejo de errores
using IronPdf;csharp // Gotenberg: HTTP error handling try { var response = await client.PostAsync(gotenbergUrl, content); response.EnsureSuccessStatusCode(); // What if 500? 503? Timeout? } catch (HttpRequestException ex) { / Network error / } catch (TaskCanceledException ex) { / Timeout / }
// IronPDF: Standard .NET exceptions try { var pdf = renderer.RenderHtmlAsPdf(html); } catch (Exception ex) { Console.WriteLine($"PDF generation failed: {ex.Message}"); } using IronPdf;
Eliminación de infraestructuras
Tras la migración, elimine Gotenbergde su infraestructura:
using IronPdf;yaml
REMOVE from docker-compose.yml:
services:
gotenberg:
image: gotenberg/gotenberg:8
ports:
- "3000:3000"
deploy:
resources:
limits:
memory: 2G
using IronPdf;
Consideraciones sobre el rendimiento
Comparación de latencias
| Operación | Gotenberg(Caliente) | Gotenberg(Arranque en frío) | IronPDF(Primera versión) | IronPDF(continuación) |
|---|---|---|---|---|
| HTML sencillo | 150-300ms | 2-5 segundos | 1-2 segundos | 50-150ms |
| HTML complejo | 500-1500ms | 3-7 segundos | 1.5-3 segundos | 200-800ms |
| Renderización de URL | 1-5 segundos | 3-10 segundos | 1-5 segundos | 500ms-3s |
Eliminación de costes de infraestructura
| Recurso | Gotenberg | IronPDF |
|---|---|---|
| Contenedores necesarios | 1-N (escalado) | 0 |
| Memoria por contenedor | 512 MB-2 GB | N/A |
| Sobrecarga de red por solicitud | 10-100ms | 0ms |
| Puntos finales del chequeo | Requerido | No es necesario |
| Equilibrador de carga | A menudo se necesita | No es necesario |
Solución de problemas
Tema 1: Los patrones HttpClient no son necesarios
Problema: El código sigue utilizando HttpClient y MultipartFormDataContent.
Solución: Sustituir completamente por ChromePdfRenderer:
using IronPdf;csharp // Remove all of this: // using var client = new HttpClient(); // using var content = new MultipartFormDataContent(); // content.Add(new StringContent(html), "files", "index.html"); // var response = await client.PostAsync(url, content);
// Replace with: var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); using IronPdf;
Tema 2: Unidades de margen erróneas
Problema: Los PDF tienen márgenes incorrectos después de la migración.
Solución: Convierte pulgadas a milímetros:
using IronPdf;csharp // Gotenbergused inches: "0.5" //IronPDFuses millimeters: 0.5 × 25.4 = 12.7 renderer.RenderingOptions.MarginTop = 12.7; using IronPdf;
Edición 3: Referencias URL de contenedores
Problema: El código contiene http://gotenberg:3000 o URLs similares.
Solución: Eliminar todas las referencias a URL de contenedores:IronPDFse ejecuta en proceso:
using IronPdf;csharp // Remove: // private readonly string _gotenbergUrl = "http://gotenberg:3000";
//IronPDFneeds no URL - it's in-process var renderer = new ChromePdfRenderer(); using IronPdf;
Lista de comprobación de la migración
Pre-Migración
- [ ] Inventario de todas las llamadas HTTP de Gotenbergen el código base
- [ ] Documentar la configuración actual de Gotenberg(tiempos de espera, márgenes, tamaños de papel)
- [ ] Identificar toda la configuración de Docker/Kubernetes Gotenberg
- [ ] Obtener la clave de licencia de IronPDF
- [ ] Planificar el desmantelamiento de infraestructuras
Migración de código
- [ ] Instalar el paquete NuGet IronPdf:
dotnet add package IronPdf - [ ] Eliminar paquetes de cliente Gotenberg
- [Reemplazar todas las llamadas HTTP a Gotenbergpor llamadas a métodos IronPDF
- [ ] Convertir unidades de margen de pulgadas a milímetros
- [ ] Actualizar la gestión de errores (errores HTTP → excepciones .NET)
- [ ] Añadir inicialización de clave de licencia al inicio
Migración de infraestructuras
- [ ] Eliminar Gotenbergde Docker Compose / Kubernetes
- [ ] Actualizar las canalizaciones de CI/CD (eliminar las extracciones de imágenes de Gotenberg)
- [ ] Eliminar los controles de salud de Gotenberg
- [ ] Eliminar la URL de Gotenbergde la configuración
Pruebas
- [ ] Prueba de conversión de HTML a PDF
- [ ] Prueba de conversión de URL a PDF
- [ ] Comprobar la precisión de los márgenes y el tamaño
- [ ] Prueba de rendimiento bajo carga
- [ ] Probar el tiempo de calentamiento del primer renderizador
Posmigración
- [ ] Eliminar despliegues de contenedores Gotenberg
- [Archivo de archivos de configuración de Gotenberg
- [ ] Actualización de la documentación
- [ ] Supervisar el uso de memoria de la aplicación
- [ ] Verificar que no haya conexiones de red huérfanas
Conclusión
La migración de GotenbergaIronPDFelimina la complejidad de la infraestructura de Docker, elimina la latencia de red de cada operación PDF y sustituye la construcción de datos de formularios multiparte con llamadas a métodos C# limpios y seguros. El resultado es una implementación más sencilla, una latencia más baja, menos puntos de fallo y una depuración más fácil, todo ello manteniendo las capacidades completas de renderizado HTML/CSS/JavaScript a través del motor Chromium integrado de IronPDF.
Los cambios clave en esta migración son:
- Arquitectura: Llamadas a la API REST → Métodos nativos de C#
- Infraestructura: Contenedores Docker → Paquete NuGet
- Unidades: Pulgadas → Milímetros para los márgenes
- Manejo de errores: códigos de estado HTTP → excepciones .NET
- Latencia: Viaje de ida y vuelta en red → Ejecución en proceso
Explore la documentación completa de IronPDF, tutoriales y referencia de API para acelerar su migración a Gotenberg.






