Saltar al pie de página
GUíAS DE MIGRACIóN

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#:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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

AspectoGotenbergIronPDF
DespliegueContenedor Docker + orquestaciónPaquete NuGet único
ArquitecturaMicroservicio (API REST)Biblioteca en proceso
Latencia por solicitud10-100ms+ (ida y vuelta en red)< 1ms de sobrecarga
Arranque en frío2-5 segundos (init del contenedor)1-2 segundos (sólo la primera traducción)
InfraestructuraDocker, Kubernetes, balanceadores de cargaNo es necesario
Modos de falloFallos en redes, contenedores y serviciosExcepciones de .NET Standard
Estilo APIREST multipart/form-dataLlamadas a métodos nativos de C#
EscalaHorizontal (más contenedores)Vertical (en proceso)
DepuraciónNecesidad de rastreo distribuidoDepurador estándar
Control de versionesEtiquetas de la imagen del contenedorVersiones 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ísticaComplejidad de la migraciónNotas
HTML a PDFMuy bajoSustitución directa de métodos
URL a PDFMuy bajoSustitución directa de métodos
Tamaño de papel personalizadoBajoConfiguración basada en propiedades
MárgenesBajoConversión de unidades (pulgadas → mm)
Fusión de PDFBajoLlamada a método estático
Encabezados/pies de páginaMedioDiferentes sintaxis de marcadores de posición
Retrasos de esperaBajoCadena a milisegundos
Conversión PDF/ABajoLlamada 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

  1. .NET Version:IronPDFes compatible con .NET Framework 4.6.2+ y .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Clave de licencia: Obtenga su clave de licencia deIronPDFen ironpdf.com
  3. 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 GotenbergEquivalente de IronPDFNotas
POST /forms/chromium/convert/html<código>ChromePdfRenderer.RenderHtmlAsPdf()</códigoCadena HTML a PDF
POST /forms/chromium/convert/url<código>ChromePdfRenderer.RenderUrlAsPdf()</códigoURL a PDF
POST /forms/pdfengines/mergePdfDocument.Merge()Fusionar varios PDF
POST /forms/pdfengines/convertpdf.SaveAs() con ajustesConversión PDF/A
COMPRAR /healthN/ANo se necesita ningún servicio externo

Mapeo de parámetros de formulario a RenderingOptions

Parámetro GotenbergPropiedad de IronPDFNotas de conversión
paperWidth (pulgadas)<código>RenderingOptions.PaperSize</códigoUtilizar enum o tamaño personalizado
altura del papel (pulgadas)<código>RenderingOptions.PaperSize</códigoUtilizar enum o tamaño personalizado
marginTop (pulgadas)<código>RenderingOptions.MarginTop</códigoMultiplique por 25,4 para mm
margenInferior (pulgadas)<código>RenderingOptions.MarginBottom</códigoMultiplique por 25,4 para mm
<código>printBackground</código<código>RenderingOptions.PrintHtmlBackgrounds</códigoBooleano
paisaje<código>RenderingOptions.PaperOrientation</códigoPaisaje enum
waitDelay<código>RenderingOptions.RenderDelay</códigoConvertir 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ónGotenberg(Caliente)Gotenberg(Arranque en frío)IronPDF(Primera versión)IronPDF(continuación)
HTML sencillo150-300ms2-5 segundos1-2 segundos50-150ms
HTML complejo500-1500ms3-7 segundos1.5-3 segundos200-800ms
Renderización de URL1-5 segundos3-10 segundos1-5 segundos500ms-3s

Eliminación de costes de infraestructura

RecursoGotenbergIronPDF
Contenedores necesarios1-N (escalado)0
Memoria por contenedor512 MB-2 GBN/A
Sobrecarga de red por solicitud10-100ms0ms
Puntos finales del chequeoRequeridoNo es necesario
Equilibrador de cargaA menudo se necesitaNo 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:

  1. Arquitectura: Llamadas a la API REST → Métodos nativos de C#
  2. Infraestructura: Contenedores Docker → Paquete NuGet
  3. Unidades: Pulgadas → Milímetros para los márgenes
  4. Manejo de errores: códigos de estado HTTP → excepciones .NET
  5. 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.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más