Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von Gotenberg zu IronPDF in C#

Migrieren Sie von Gotenbergzu IronPDF: Vollständiger C#-Migrationsleitfaden

Die Migration von GotenbergzuIronPDFverwandelt Ihren .NET-PDF-Workflow von einer Docker-basierten Microservice-Architektur mit HTTP-API-Aufrufen in eine prozessinterne native C#-Bibliothek. Dieses Handbuch bietet einen umfassenden, schrittweisen Migrationspfad, der den Infrastruktur-Overhead, die Netzwerklatenz und die Komplexität der Container-Verwaltung für professionelle .NET-Entwickler eliminiert.

Warum von GotenbergzuIronPDFmigrieren

Das GotenbergArchitektur Problem

Gotenberg ist eine Docker-basierte Microservice-Architektur für die PDF-Erzeugung. Obwohl es leistungsstark und flexibel ist, führt es zu einer erheblichen Komplexität für C#-Anwendungen:

  1. Infrastruktur-Aufwand: Erfordert Docker, Container-Orchestrierung (Kubernetes/Docker Compose), Service Discovery und Lastausgleich. Jeder Einsatz wird komplexer.

  2. Netzwerklatenz: Jede PDF-Operation erfordert einen HTTP-Aufruf an einen separaten Dienst, was zu einer Verzögerung von 10-100 ms+ pro Anfrage führt. Diese Latenzzeit erhöht sich schnell in Szenarien mit hohem Datenaufkommen.

  3. Kaltstart-Probleme: Das Starten von Containern kann die ersten Anfragen um 2-5 Sekunden verlängern. Jeder Pod-Neustart, jedes Scale-up-Ereignis und jede Bereitstellung löst Kaltstarts aus.

  4. Betriebliche Komplexität: Sie müssen den Zustand, die Skalierung, die Protokollierung und die Überwachung von Containern getrennt von Ihrer Hauptanwendung verwalten.

  5. Multipart Form Data: Jede Anfrage erfordert die Erstellung von Multipart/Form-Data-Payloads - umständlich, fehleranfällig und mühsam zu pflegen.

  6. Fehlerpunkte: Netzwerk-Timeouts, Nichtverfügbarkeit von Diensten und Container-Abstürze liegen in Ihrer Verantwortung.

  7. Versionsverwaltung: Gotenberg-Images werden getrennt von Ihrer Anwendung aktualisiert; API-Änderungen können Integrationen unerwartet unterbrechen.

GotenbergvsIronPDFVergleich

Aspekt Gotenberg IronPDF
Bereitstellung Docker-Container + Orchestrierung Einzelnes NuGet-Paket
Architektur Microservice (REST API) In Arbeit befindliche Bibliothek
Latenzzeit pro Anfrage 10-100ms+ (Netzwerk-Roundtrip) < 1ms Overhead
Kaltstart 2-5 Sekunden (Container-Init) 1-2 Sekunden (nur erste Wiedergabe)
Infrastruktur Docker, Kubernetes, Lastverteiler Keine erforderlich
Misserfolgsmodi Netzwerk, Container, Dienstausfälle Standard .NET Ausnahmen
API-Stil REST multipart/form-data Native C#-Methodenaufrufe
Skalierung Horizontal (mehr Container) Vertikal (in Bearbeitung)
Fehlersuche Verteiltes Tracing erforderlich Standard-Debugger
Versionskontrolle Container-Bild-Tags NuGet-Paket-Versionen

Für Teams, die die Einführung von .NET 10 und C# 14 bis 2025 und 2026 planen, bietetIronPDFeine zukunftssichere Grundlage ohne Infrastrukturabhängigkeiten, die sich nativ in moderne .NET-Muster integrieren lässt.


Migrationskomplexitätsbewertung

Geschätzter Aufwand nach Merkmalen

Feature Komplexität der Migration Notizen
HTML zu PDF Sehr niedrig Direkte Methodenersetzung
URL zu PDF Sehr niedrig Direkte Methodenersetzung
Benutzerdefiniertes Papierformat Niedrig Eigenschaftsbasierte Konfiguration
Margen Niedrig Einheitenumrechnung (Zoll → mm)
PDF-Zusammenführung Niedrig Statischer Methodenaufruf
Kopf-/Fußzeilen Medium Unterschiedliche Platzhalter-Syntax
Warteschleifen Niedrig String in Millisekunden
PDF/A-Konvertierung Niedrig Methodenaufruf statt Parameter

Paradigmen-Verschiebung

Die grundlegende Veränderung bei dieser Gotenberg-Migration ist der Wechsel von HTTP-API-Aufrufen mit mehrteiligen Formulardaten zu nativen C#-Methodenaufrufen:

Gotenberg:  HTTP POST multipart/form-data an Docker-Container
IronPDF:    Direkte Methodenaufrufe für C#-Objekte

Bevor Sie beginnen

Voraussetzungen

  1. .NET Version:IronPDFunterstützt .NET Framework 4.6.2+ und .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Lizenzschlüssel: Beziehen Sie Ihren IronPDF-Lizenzschlüssel von ironpdf.com
  3. Planen Sie den Abbau der Infrastruktur: Dokumentieren Sie Gotenberg-Container für die Stilllegung nach der Migration

Alle Gotenberg-Verwendung identifizieren

# 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" .
# 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" .
SHELL

NuGet-Paketänderungen

# Remove Gotenbergclient (if using)
dotnet remove package Gotenberg.Sharp.API.Client

# Install IronPDF
dotnet add package IronPdf
# Remove Gotenbergclient (if using)
dotnet remove package Gotenberg.Sharp.API.Client

# Install IronPDF
dotnet add package IronPdf
SHELL

Schnellstart Migration

Schritt 1: Lizenzkonfiguration aktualisieren

Vor (Gotenberg):

Gotenberg erfordert keine Lizenz, setzt aber eine Docker-Infrastruktur mit Container-URLs voraus.

private readonly string _gotenbergUrl = "http://localhost:3000";
private readonly string _gotenbergUrl = "http://localhost:3000";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (IronPDF):

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Schritt 2: Aktualisieren der Namensraum-Importe

// Before (Gotenberg)
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;
// Before (Gotenberg)
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Komplette API-Referenz

GotenbergEndpoint zuIronPDFMapping

Gotenberg-Route IronPDF-Äquivalent Notizen
POST /forms/chromium/convert/html ChromePdfRenderer.RenderHtmlAsPdf() HTML-String in PDF
POST /forms/chromium/convert/url ChromePdfRenderer.RenderUrlAsPdf() URL zu PDF
POST /forms/pdfengines/merge PdfDocument.Merge() Mehrere PDFs zusammenführen
POST /forms/pdfengines/convert pdf.SaveAs() mit Einstellungen PDF/A-Konvertierung
GET /health Nicht anwendbar Kein externer Dienst erforderlich

Zuordnung von Formularparametern zu RenderingOptions

GotenbergParameter IronPDFEigenschaft Hinweise zur Konvertierung
PapierBreite (Zoll) RenderingOptions.PaperSize Enum oder benutzerdefinierte Größe verwenden
PapierHöhe (Zoll) RenderingOptions.PaperSize Enum oder benutzerdefinierte Größe verwenden
MarginTop (Zoll) RenderingOptions.MarginTop Multiplizieren Sie mit 25,4 für mm
MarginBottom (Zoll) RenderingOptions.MarginBottom Multiplizieren Sie mit 25,4 für mm
Hintergrund drucken RenderingOptions.PrintHtmlBackgrounds Boolesche
Landschaft RenderingOptions.PaperOrientation Landschaft enum
waitDelay RenderingOptions.RenderDelay Umrechnen in Millisekunden

Beispiele für die Code-Migration

Beispiel 1: Grundlegendes HTML zu PDF

Vor (Gotenberg):

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 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (IronPDF):

// 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");
    }
}
// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Der Unterschied ist erheblich: Gotenbergerfordert die Konstruktion eines HttpClient, die Erstellung von MultipartFormDataContent, die Durchführung eines asynchronen HTTP POST an einen laufenden Docker-Container und die Verarbeitung der Byte-Array-Antwort.IronPDFreduziert dies auf drei Zeilen mit einem ChromePdfRenderer-Methodenaufruf - kein Netzwerk-Overhead, keine Container-Abhängigkeit, keine asynchrone Komplexität. Weitere Rendering-Optionen finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: Konvertierung von URL in PDF

Vor (Gotenberg):

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 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (IronPDF):

// 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");
    }
}
// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Der Gotenberg-Ansatz erfordert einen anderen Endpunkt (/forms/chromium/convert/url), die Erstellung mehrteiliger Inhalte mit der URL als Formularfeld und die Verarbeitung asynchroner HTTP-Antworten. Die Methode RenderUrlAsPdf() vonIronPDFnimmt die URL direkt entgegen und gibt ein PdfDocument-Objekt synchron zurück. Erfahren Sie mehr über die URL in PDF Konvertierung.

Beispiel 3: Benutzerdefinierte Papiergröße und Ränder

Vor (Gotenberg):

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 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (IronPDF):

// 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");
    }
}
// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Gotenberg benötigt String-basierte Parameter ("8.5", "11", "0.5"), die zu mehrteiligen Formulardaten hinzugefügt werden - keine Typsicherheit, kein IntelliSense, leicht zu vertippen.IronPDFbietet stark typisierte Eigenschaften mit PdfPaperSize enums und numerischen Randwerten. Beachten Sie, dassIronPDFdie Ränder in Millimetern (50mm ≈ 2 Zoll) angibt, während GotenbergZoll verwendet.


Kritische Hinweise zur Migration

Einheitsumrechnungen

Die wichtigste Umstellung bei dieser Gotenberg-Migration sind die Randeinheiten:

// 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
// 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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Umrechnungsformel: Millimeter = Zoll × 25,4

Synchron vs. Asynchron

Gotenberg erfordert asynchrone Operationen aufgrund der HTTP-Kommunikation:

// 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));
// 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));
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Fehlerbehandlung

// 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}");
}
// 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}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Entfernung der Infrastruktur

Nach der Migration sollten Sie Gotenbergaus Ihrer Infrastruktur entfernen:

# REMOVE from docker-compose.yml:
# services:
#   gotenberg:
#     image: gotenberg/gotenberg:8
#     ports:
#       - "3000:3000"
#     deploy:
#       resources:
#         limits:
#           memory: 2G
# REMOVE from docker-compose.yml:
# services:
#   gotenberg:
#     image: gotenberg/gotenberg:8
#     ports:
#       - "3000:3000"
#     deploy:
#       resources:
#         limits:
#           memory: 2G
YAML

Erwägungen zur Leistung

Vergleich der Latenzzeiten

Betrieb Gotenberg(Warm) Gotenberg(Kaltstart) IronPDF(Erstes Rendering) IronPDF(Nachfolgend)
Einfaches HTML 150-300ms 2-5 Sekunden 1-2 Sekunden 50-150ms
Komplexes HTML 500-1500ms 3-7 Sekunden 1.5-3 Sekunden 200-800ms
URL-Rendering 1-5 Sekunden 3-10 Sekunden 1-5 Sekunden 500ms-3s

Beseitigung von Infrastrukturkosten

Ressource Gotenberg IronPDF
Erforderliche Container 1-N (Skalierung) 0
Speicherplatz pro Container 512MB-2GB Nicht anwendbar
Netzwerk-Overhead pro Anfrage 10-100ms 0ms
Endpunkte des Gesundheitschecks Erforderlich Nicht erforderlich
Lastausgleicher Oft benötigt Nicht erforderlich

Fehlerbehebung

Ausgabe 1: HttpClient-Muster werden nicht benötigt

Problem: Der Code verwendet noch HttpClient und MultipartFormDataContent.

Lösung: Ersetzen Sie den Text vollständig durch ChromePdfRenderer:

// 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);
// 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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Problem 2: Falsche Randeinheiten

Problem: PDFs haben nach der Migration falsche Ränder.

Lösung: Konvertieren Sie Zoll in Millimeter:

// Gotenbergused inches: "0.5"
//IronPDFuses millimeters: 0.5 × 25.4 = 12.7
renderer.RenderingOptions.MarginTop = 12.7;
// Gotenbergused inches: "0.5"
//IronPDFuses millimeters: 0.5 × 25.4 = 12.7
renderer.RenderingOptions.MarginTop = 12.7;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Aufgabe 3: Container-URL-Referenzen

Problem: Der Code enthält http://gotenberg:3000 oder ähnliche URLs.

Lösung: Entfernen Sie alle Verweise auf Container-URLs -IronPDFwird prozessintern ausgeführt:

// Remove:
// private readonly string _gotenbergUrl = "http://gotenberg:3000";

//IronPDFneeds no URL - it's in-process
var renderer = new ChromePdfRenderer();
// Remove:
// private readonly string _gotenbergUrl = "http://gotenberg:3000";

//IronPDFneeds no URL - it's in-process
var renderer = new ChromePdfRenderer();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • [Inventarisierung aller Gotenberg-HTTP-Aufrufe in der Codebasis
  • [Dokumentieren Sie die aktuelle Gotenberg-Konfiguration (Zeitüberschreitungen, Ränder, Papiergrößen)
  • [Identifizieren Sie alle Docker/Kubernetes Gotenberg-Konfigurationen
  • [IronPDF-Lizenzschlüssel erhalten
  • [Planen Sie die Stilllegung der Infrastruktur

Code-Migration

  • [IronPdf NuGet-Paket installieren: dotnet add package IronPdf
  • [Gotenberg Client-Pakete entfernen
  • [Ersetzen Sie alle HTTP-Aufrufe an Gotenbergdurch IronPDF-Methodenaufrufe
  • [Randeinheiten von Zoll in Millimeter umrechnen
  • [Fehlerbehandlung aktualisieren (HTTP-Fehler → .NET-Ausnahmen)
  • [Initialisierung des Lizenzschlüssels beim Start hinzufügen

Infrastruktur-Migration

  • [Gotenberg aus Docker Compose / Kubernetes entfernen
  • [CI/CD-Pipelines aktualisieren (Gotenberg-Image-Pulls entfernen)
  • [Gotenberg Health Checks entfernen
  • [Gotenberg-URL aus der Konfiguration entfernen

Testing

  • [Test der Konvertierung von HTML in PDF
  • [Testen Sie die Konvertierung von URL in PDF
  • [Überprüfen Sie die Genauigkeit der Margen und Größenangaben
  • [Leistungstest unter Last
  • [Test der Aufwärmzeit des ersten Renderers

Post-Migration

  • [Entfernen Sie Gotenberg-Container-Einsätze
  • [Gotenberg-Konfigurationsdateien archivieren
  • [Dokumentation aktualisieren
  • [Überwachung der Speichernutzung von Anwendungen
  • [Überprüfen Sie, dass keine verwaisten Netzwerkverbindungen bestehen

Abschluss

Die Migration von GotenbergzuIronPDFeliminiert die Komplexität der Docker-Infrastruktur, beseitigt die Netzwerklatenz bei jeder PDF-Operation und ersetzt die umständliche Konstruktion mehrteiliger Formulardaten durch saubere, typsichere C#-Methodenaufrufe. Das Ergebnis ist eine einfachere Bereitstellung, geringere Latenz, weniger Fehlerquellen und eine einfachere Fehlersuche - und das alles unter Beibehaltung der vollständigen HTML/CSS/JavaScript-Rendering-Funktionen durch die eingebettete Chromium-Engine von IronPDF.

Die wichtigsten Änderungen bei dieser Migration sind:

  1. Architektur: REST-API-Aufrufe → Native C#-Methoden
  2. Infrastruktur: Docker-Container → NuGet-Paket
  3. Einheiten: Zoll → Millimeter für Ränder
  4. Fehlerbehandlung: HTTP-Statuscodes → .NET-Ausnahmen
  5. Latenz: Netzwerk-Roundtrip → prozessinterne Ausführung

Entdecken Sie die vollständige IronPDF-Dokumentation, Tutorials und API-Referenz, um Ihre Gotenberg-Migration zu beschleunigen.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen