Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von Gotenberg zu IronPDF in C#

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. Infrastrukturaufwand: Erfordert Docker, Container-Orchestrierung (Kubernetes/Docker Compose), Service Discovery und Load Balancing. Jeder Einsatz wird komplexer.

  2. Netzwerklatenz: Jeder PDF-Vorgang erfordert einen HTTP-Aufruf an einen separaten Dienst – was pro Anfrage 10–100 ms und mehr zusätzlich verursacht. Diese Latenz summiert sich bei hohem Datenaufkommen schnell.

  3. Probleme beim Kaltstart: Der Containerstart 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. Operative Komplexität: Sie müssen Containerzustand, Skalierung, Protokollierung und Überwachung als separate Aufgaben von Ihrer Hauptanwendung verwalten.

  5. Multipart-Formulardaten: Für jede Anfrage müssen multipart/form-data-Nutzdaten erstellt werden – ausführlich, fehleranfällig und mühsam zu pflegen.

  6. Fehlerquellen: Netzwerk-Timeouts, Service-Nichtverfügbarkeit und Container-Abstürze fallen in Ihre Verantwortung.

  7. Versionsverwaltung: Gotenberg-Images werden unabhängig 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

Der grundlegende Wandel bei dieser Gotenberger Migration besteht in der Umstellung von HTTP-API-Aufrufen mit Multipart-Formulardaten auf native C#-Methodenaufrufe:

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: Ihren IronPDF-Lizenzschlüssel erhalten Sie auf ironpdf.com.
  3. Infrastrukturentfernung planen: Gotenberg-Container für die Stilllegung nach der Migration dokumentieren.

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";
$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";
$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;
$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");
    }
}
$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");
    }
}
$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");
    }
}
$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");
    }
}
$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");
    }
}
$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");
    }
}
$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
$vbLabelText   $csharpLabel

Umrechnungsformel: millimeters = inches × 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));
$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}");
}
$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 immer noch HttpClient und MultipartFormDataContent .

Lösung: Komplett durch ChromePdfRenderer ersetzen:

// 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);
$vbLabelText   $csharpLabel

Problem 2: Falsche Randeinheiten

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

Lösung: Zoll in Millimeter umrechnen:

// 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;
$vbLabelText   $csharpLabel

Aufgabe 3: Container-URL-Referenzen

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

Lösung: Entfernen Sie alle Container-URL-Referenzen –IronPDFläuft im selben Prozess:

// 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();
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • Inventarisierung aller Gotenberg-HTTP-Aufrufe im Quellcode
  • Aktuelle Gotenberg-Konfiguration dokumentieren (Timeouts, Ränder, Papierformate)
  • Alle Docker/Kubernetes Gotenberg-Konfigurationen identifizieren
  • IronPDF-Lizenzschlüssel erhalten
  • Planen Sie die Stilllegung der Infrastruktur

Code-Migration

  • Installieren Sie das IronPdf NuGet-Paket: dotnet add package IronPdf
  • Gotenberg-Clientpakete entfernen
  • Ersetzen Sie alle HTTP-Aufrufe an Gotenbergdurch IronPDF-Methodenaufrufe
  • Umrechnung der Maßeinheiten von Zoll in Millimeter
  • Aktualisierung der Fehlerbehandlung (HTTP-Fehler → .NET-Ausnahmen)
  • Lizenzschlüsselinitialisierung beim Start hinzufügen

Infrastruktur-Migration

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

Testen

  • Test der Konvertierung von HTML in PDF
  • Test der URL-zu-PDF-Konvertierung
  • Überprüfen Sie die Genauigkeit von Rand und Größe.
  • Leistungstest unter Last
  • Test der Aufwärmzeit beim ersten Rendering

Nach der Migration

  • Gotenberg-Container-Bereitstellungen entfernen
  • Archiv Gotenberg-Konfigurationsdateien
  • Dokumentation aktualisieren
  • Überwachung der Anwendungsspeichernutzung
  • Prüfen, ob keine verwaisten Netzwerkverbindungen vorhanden sind

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