Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von GemBox PDF zu IronPDF in C#

Durch die Migration von GemBox PDF zu IronPDF wird Ihr .NET-PDF-Workflow von der koordinatenbasierten, programmatischen Dokumentenerstellung auf modernes HTML/CSS-basiertes Rendering umgestellt. Dieses Handbuch bietet einen umfassenden, schrittweisen Migrationspfad, der Absatzbeschränkungen aufhebt und die Dokumentenerstellung für professionelle .NET-Entwickler vereinfacht.

Warum von GemBox PDF zu IronPDF migrieren

Die GemBox PDF-Herausforderungen

GemBox PDF ist eine leistungsfähige .NET-PDF-Komponente, die jedoch erhebliche Einschränkungen aufweist, die sich auf die praktische Entwicklung auswirken:

  1. Beschränkung auf 20 Absätze in der kostenlosen Version: Die kostenlose Version beschränkt Sie auf 20 Absätze, wobei Tabellenzellen zu dieser Beschränkung hinzugerechnet werden. Eine einfache 10-zeilige, 5-spaltige Tabelle benötigt 50 "Absätze", was die kostenlose Version selbst für einfache Geschäftsdokumente unbrauchbar macht.

  2. Keine HTML-zu-PDF-Konvertierung: GemBox PDF erfordert die programmatische Erstellung des Dokuments. Sie müssen Koordinaten berechnen und jedes Element manuell positionieren - es gibt keine einfache "render this HTML"-Funktion.

  3. Koordinatenbasiertes Layout: Im Gegensatz zu HTML/CSS, wo das Layout natürlich fließt, erfordert GemBox PDF die Berechnung der genauen X/Y-Positionen für jedes Textelement, Bild und jede Form.

  4. Begrenzter Funktionsumfang: Im Vergleich zu umfassenden PDF-Bibliotheken konzentriert sich GemBox PDF auf grundlegende Operationen – Lesen, Schreiben, Zusammenführen, Aufteilen – ohne fortgeschrittene Funktionen wie HTML-Rendering oder Unterstützung für modernes CSS.

  5. Nur programmatisch: Jede Designänderung erfordert Codeänderungen. Möchten Sie die Abstände optimieren? Koordinaten neu berechnen. Sie möchten eine andere Schriftgröße? Passen Sie alle Y-Positionen darunter an.

  6. Zählung von Tabellenzellen: Die Absatzbegrenzung zählt Tabellenzellen, nicht nur sichtbare Absätze. Dadurch ist die kostenlose Version für Dokumente mit Tabellen praktisch unbrauchbar.

  7. Lernkurve für Design: Entwickler müssen in Koordinaten denken, anstatt im Dokumentenfluss, was einfache Aufgaben wie "einen Absatz hinzufügen" überraschend komplex macht.

Vergleich zwischen GemBox PDF und IronPDF

Aspekt GemBox PDF IronPDF
Grenzen der kostenlosen Version 20 Absätze (einschließlich Tabellenzellen) Nur Wasserzeichen, keine inhaltlichen Einschränkungen
HTML-zu-PDF Nicht unterstützt Vollständige Chromium-Engine
Layout-Ansatz Koordinatenbasiert, manuell HTML/CSS-Flow-Layout
Tabellen Zählt zum Absatzlimit Unbegrenzt, Verwendung von HTML-Tabellen
Modernes CSS Nicht zutreffend Flexbox, Grid, CSS3-Animationen
JavaScript-Unterstützung Nicht zutreffend Vollständige Ausführung von JavaScript
Änderungen am Design Koordinaten neu berechnen HTML/CSS bearbeiten
Lernkurve PDF-Koordinatensystem HTML/CSS (mit dem Web vertraut)

Für Teams, die die Einführung von .NET 10 und C# 14 bis 2025 und 2026 planen, bietet IronPDF eine zukunftssichere Grundlage, die vertraute Webtechnologien für die PDF-Erzeugung nutzt.


Migrationskomplexitätsbewertung

Geschätzter Aufwand nach Merkmalen

Feature Komplexität der Migration
PDFs laden/speichern Sehr niedrig
PDFs zusammenführen Sehr niedrig
PDFs teilen Niedrig
Textextraktion Sehr niedrig
Text hinzufügen Medium
Tabellen Niedrig
Bilder Niedrig
Wasserzeichen Niedrig
Passwortschutz Medium
Formularfelder Medium

Paradigmen-Verschiebung

Die größte Änderung bei dieser GemBox-PDF-Migration ist der Wechsel von einem koordinatenbasierten Layout zu einem HTML/CSS-Layout:

GemBox PDF:  "Text an Position (100, 700) zeichnen"
IronPDF:     "Dieses HTML mit CSS-Styling rendern"

Dieser Paradigmenwechsel ist für Entwickler, die mit Webtechnologien vertraut sind, in der Regel einfacher, erfordert aber eine andere Sichtweise auf PDFs.


Bevor Sie beginnen

Voraussetzungen

  1. .NET Version:IronPDF unterstützt .NET Framework 4.6.2+ und .NET Core 2.0+ / .NET 5/6/7/8/9+
  2. Lizenzschlüssel: Ihren IronPDF-Lizenzschlüssel erhalten Sie unter IronPDF.
  3. Datensicherung: Erstellen Sie einen Branch für die Migrationsarbeiten.
  4. HTML/CSS-Kenntnisse: Grundkenntnisse sind hilfreich, aber nicht erforderlich.

Alle GemBox PDF-Verwendung identifizieren

# Find all GemBox PDF references
grep -r "GemBox\.Pdf\|PdfDocument\|PdfPage\|PdfFormattedText\|ComponentInfo\.SetLicense" --include="*.cs" .

# Find package references
grep -r "GemBox\.Pdf" --include="*.csproj" .
# Find all GemBox PDF references
grep -r "GemBox\.Pdf\|PdfDocument\|PdfPage\|PdfFormattedText\|ComponentInfo\.SetLicense" --include="*.cs" .

# Find package references
grep -r "GemBox\.Pdf" --include="*.csproj" .
SHELL

NuGet-Paketänderungen

# Remove GemBox PDF
dotnet remove package GemBox.Pdf

# Install IronPDF
dotnet add package IronPdf
# Remove GemBox PDF
dotnet remove package GemBox.Pdf

# Install IronPDF
dotnet add package IronPdf
SHELL

Schnellstart Migration

Schritt 1: Lizenzkonfiguration aktualisieren

Vor (GemBox PDF):

// Must call before any GemBox PDF operations
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Or for professional:
ComponentInfo.SetLicense("YOUR-PROFESSIONAL-LICENSE");
// Must call before any GemBox PDF operations
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Or for professional:
ComponentInfo.SetLicense("YOUR-PROFESSIONAL-LICENSE");
' Must call before any GemBox PDF operations
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
' Or for professional:
ComponentInfo.SetLicense("YOUR-PROFESSIONAL-LICENSE")
$vbLabelText   $csharpLabel

Nach (IronPDF):

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"

' Or in appsettings.json:
' { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
$vbLabelText   $csharpLabel

Schritt 2: Aktualisieren der Namensraum-Importe

// Before (GemBox PDF)
using GemBox.Pdf;
using GemBox.Pdf.Content;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
// Before (GemBox PDF)
using GemBox.Pdf;
using GemBox.Pdf.Content;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
Imports IronPdf
Imports IronPdf.Editing
$vbLabelText   $csharpLabel

Schritt 3: Grundlegendes Konvertierungsmuster

Vor (GemBox PDF):

using GemBox.Pdf;
using GemBox.Pdf.Content;

ComponentInfo.SetLicense("FREE-LIMITED-KEY");

using (var document = new PdfDocument())
{
    var page = document.Pages.Add();
    var formattedText = new PdfFormattedText()
    {
        Text = "Hello World",
        FontSize = 24
    };

    page.Content.DrawText(formattedText, new PdfPoint(100, 700));
    document.Save("output.pdf");
}
using GemBox.Pdf;
using GemBox.Pdf.Content;

ComponentInfo.SetLicense("FREE-LIMITED-KEY");

using (var document = new PdfDocument())
{
    var page = document.Pages.Add();
    var formattedText = new PdfFormattedText()
    {
        Text = "Hello World",
        FontSize = 24
    };

    page.Content.DrawText(formattedText, new PdfPoint(100, 700));
    document.Save("output.pdf");
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content

ComponentInfo.SetLicense("FREE-LIMITED-KEY")

Using document As New PdfDocument()
    Dim page = document.Pages.Add()
    Dim formattedText As New PdfFormattedText() With {
        .Text = "Hello World",
        .FontSize = 24
    }

    page.Content.DrawText(formattedText, New PdfPoint(100, 700))
    document.Save("output.pdf")
End Using
$vbLabelText   $csharpLabel

Nach (IronPDF):

using IronPdf;

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1 style='font-size:24px;'>Hello World</h1>");
pdf.SaveAs("output.pdf");
using IronPdf;

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1 style='font-size:24px;'>Hello World</h1>");
pdf.SaveAs("output.pdf");
Imports IronPdf

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1 style='font-size:24px;'>Hello World</h1>")
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

Hauptunterschiede:

  • Keine Koordinatenberechnungen erforderlich
  • HTML/CSS anstelle von programmatischem Layout
  • Keine Absatzbegrenzung
  • Einfacherer, besser lesbarer Code

Komplette API-Referenz

Namensraum-Zuordnung

GemBox PDF IronPDF
GemBox.Pdf IronPdf
GemBox.Pdf.Content IronPdf (Inhalt ist HTML)
GemBox.Pdf.Security IronPdf (Sicherheitseinstellungen)
GemBox.Pdf.Forms IronPdf.Forms

Kernklassen-Zuordnung

GemBox PDF IronPDF Beschreibung
PdfDocument PdfDocument Hauptklasse des PDF-Dokuments
PdfPage PdfDocument.Pages[i] Darstellung der Seite
PdfContent N/A (HTML verwenden) Inhalt der Seite
PdfFormattedText N/A (HTML verwenden) Formatierter Text
PdfPoint N/A (CSS-Positionierung verwenden) Positionierung koordinieren
ComponentInfo.SetLicense() IronPdf.License.LicenseKey Lizenzverwaltung

Dokumentenoperationen

GemBox PDF IronPDF
new PdfDocument() new PdfDocument()
PdfDocument.Load(path) PdfDocument.FromFile(path)
PdfDocument.Load(stream) PdfDocument.FromStream(stream)
document.Save(path) pdf.SaveAs(path)
document.Save(stream) pdf.Stream oder pdf.BinaryData

Seitenoperationen

GemBox PDF IronPDF
document.Pages.Add() Erstellen über HTML-Rendering
document.Pages.Count pdf.PageCount
document.Pages[index] pdf.Pages[index]
document.Pages.AddClone(pages) PdfDocument.Merge()

Text- und Inhaltsoperationen

GemBox PDF IronPDF
new PdfFormattedText() HTML-Zeichenkette
formattedText.FontSize = 12 CSS font-size: 12pt
formattedText.Font = ... CSS font-family: ...
page.Content.DrawText(text, point) renderer.RenderHtmlAsPdf(html)
page.Content.GetText() pdf.ExtractTextFromPage(i)

Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML in PDF

Vor (GemBox PDF):

// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;

class Program
{
    static void Main()
    {
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");

        var document = PdfDocument.Load("input.html");
        document.Save("output.pdf");
    }
}
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;

class Program
{
    static void Main()
    {
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");

        var document = PdfDocument.Load("input.html");
        document.Save("output.pdf");
    }
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content

Module Program
    Sub Main()
        ComponentInfo.SetLicense("FREE-LIMITED-KEY")

        Dim document = PdfDocument.Load("input.html")
        document.Save("output.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF's ChromePdfRenderer verwendet eine moderne Chromium-Engine für die präzise Darstellung von HTML/CSS/ JavaScript . Im Gegensatz zur begrenzten HTML-Unterstützung von GemBox PDF kann IronPDF jeden HTML-Inhalt mit vollständiger CSS3- und JavaScript-Unterstützung darstellen. Weitere Rendering-Optionen finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: PDF-Dateien zusammenführen

Vor (GemBox PDF):

// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using System.Linq;

class Program
{
    static void Main()
    {
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");

        using (var document = new PdfDocument())
        {
            var source1 = PdfDocument.Load("document1.pdf");
            var source2 = PdfDocument.Load("document2.pdf");

            document.Pages.AddClone(source1.Pages);
            document.Pages.AddClone(source2.Pages);

            document.Save("merged.pdf");
        }
    }
}
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using System.Linq;

class Program
{
    static void Main()
    {
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");

        using (var document = new PdfDocument())
        {
            var source1 = PdfDocument.Load("document1.pdf");
            var source2 = PdfDocument.Load("document2.pdf");

            document.Pages.AddClone(source1.Pages);
            document.Pages.AddClone(source2.Pages);

            document.Save("merged.pdf");
        }
    }
}
Imports GemBox.Pdf
Imports System.Linq

Module Program
    Sub Main()
        ComponentInfo.SetLicense("FREE-LIMITED-KEY")

        Using document As New PdfDocument()
            Dim source1 = PdfDocument.Load("document1.pdf")
            Dim source2 = PdfDocument.Load("document2.pdf")

            document.Pages.AddClone(source1.Pages)
            document.Pages.AddClone(source2.Pages)

            document.Save("merged.pdf")
        End Using
    End Sub
End Module
$vbLabelText   $csharpLabel

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")

        Dim merged = PdfDocument.Merge(pdf1, pdf2)
        merged.SaveAs("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Die statische Methode Merge von IronPDF vereinfacht den Vorgang – es ist nicht nötig, ein leeres Dokument zu erstellen und Seiten einzeln zu klonen. Erfahren Sie mehr über das Zusammenführen und Aufteilen von PDFs.

Beispiel 3: Text zu PDF hinzufügen

Vor (GemBox PDF):

// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;

class Program
{
    static void Main()
    {
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");

        using (var document = new PdfDocument())
        {
            var page = document.Pages.Add();
            var formattedText = new PdfFormattedText()
            {
                Text = "Hello World",
                FontSize = 24
            };

            page.Content.DrawText(formattedText, new PdfPoint(100, 700));
            document.Save("output.pdf");
        }
    }
}
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;

class Program
{
    static void Main()
    {
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");

        using (var document = new PdfDocument())
        {
            var page = document.Pages.Add();
            var formattedText = new PdfFormattedText()
            {
                Text = "Hello World",
                FontSize = 24
            };

            page.Content.DrawText(formattedText, new PdfPoint(100, 700));
            document.Save("output.pdf");
        }
    }
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content

Module Program

    Sub Main()
        ComponentInfo.SetLicense("FREE-LIMITED-KEY")

        Using document As New PdfDocument()
            Dim page = document.Pages.Add()
            Dim formattedText As New PdfFormattedText() With {
                .Text = "Hello World",
                .FontSize = 24
            }

            page.Content.DrawText(formattedText, New PdfPoint(100, 700))
            document.Save("output.pdf")
        End Using
    End Sub

End Module
$vbLabelText   $csharpLabel

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<p>Original Content</p>");

        var stamper = new TextStamper()
        {
            Text = "Hello World",
            FontSize = 24,
            HorizontalOffset = 100,
            VerticalOffset = 700
        };

        pdf.ApplyStamp(stamper);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<p>Original Content</p>");

        var stamper = new TextStamper()
        {
            Text = "Hello World",
            FontSize = 24,
            HorizontalOffset = 100,
            VerticalOffset = 700
        };

        pdf.ApplyStamp(stamper);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Editing

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<p>Original Content</p>")

        Dim stamper = New TextStamper() With {
            .Text = "Hello World",
            .FontSize = 24,
            .HorizontalOffset = 100,
            .VerticalOffset = 700
        }

        pdf.ApplyStamp(stamper)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Zum Hinzufügen von Text zu bestehenden PDFs bietet IronPDF die Klasse TextStamper an, die eine präzise Positionierungskontrolle ermöglicht. Für neue Dokumente fügen Sie den Text einfach in Ihre HTML-Vorlage ein. Weitere Optionen finden Sie in der Dokumentation zum Stempelverfahren .

Beispiel 4: Erstellen von Tabellen (Die größte Verbesserung!)

Vor (GemBox PDF) - Jede Zelle zählt für die Begrenzung auf 20 Absätze:

using GemBox.Pdf;
using GemBox.Pdf.Content;

ComponentInfo.SetLicense("FREE-LIMITED-KEY");

using (var document = new PdfDocument())
{
    var page = document.Pages.Add();
    double y = 700;
    double[] xPositions = { 50, 200, 300, 400 };

    // Headers (4 paragraphs)
    var headers = new[] { "Product", "Price", "Qty", "Total" };
    for (int i = 0; i < headers.Length; i++)
    {
        var text = new PdfFormattedText { Text = headers[i], FontSize = 12 };
        page.Content.DrawText(text, new PdfPoint(xPositions[i], y));
    }
    y -= 20;

    // Data rows (4 paragraphs per row!)
    // Can only add a few rows before hitting 20-paragraph limit!

    document.Save("products.pdf");
}
using GemBox.Pdf;
using GemBox.Pdf.Content;

ComponentInfo.SetLicense("FREE-LIMITED-KEY");

using (var document = new PdfDocument())
{
    var page = document.Pages.Add();
    double y = 700;
    double[] xPositions = { 50, 200, 300, 400 };

    // Headers (4 paragraphs)
    var headers = new[] { "Product", "Price", "Qty", "Total" };
    for (int i = 0; i < headers.Length; i++)
    {
        var text = new PdfFormattedText { Text = headers[i], FontSize = 12 };
        page.Content.DrawText(text, new PdfPoint(xPositions[i], y));
    }
    y -= 20;

    // Data rows (4 paragraphs per row!)
    // Can only add a few rows before hitting 20-paragraph limit!

    document.Save("products.pdf");
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content

ComponentInfo.SetLicense("FREE-LIMITED-KEY")

Using document As New PdfDocument()
    Dim page = document.Pages.Add()
    Dim y As Double = 700
    Dim xPositions As Double() = {50, 200, 300, 400}

    ' Headers (4 paragraphs)
    Dim headers = {"Product", "Price", "Qty", "Total"}
    For i As Integer = 0 To headers.Length - 1
        Dim text As New PdfFormattedText With {.Text = headers(i), .FontSize = 12}
        page.Content.DrawText(text, New PdfPoint(xPositions(i), y))
    Next
    y -= 20

    ' Data rows (4 paragraphs per row!)
    ' Can only add a few rows before hitting 20-paragraph limit!

    document.Save("products.pdf")
End Using
$vbLabelText   $csharpLabel

Nach (IronPDF) - Keine Einschränkungen, richtige HTML-Tabellen:

using IronPdf;

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

var html = @"
    <html>
    <head>
        <style>
            table { border-collapse: collapse; width: 100%; }
            th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
            th { background-color: #4CAF50; color: white; }
            tr:nth-child(even) { background-color: #f2f2f2; }
        </style>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Price</th>
                    <th>Qty</th>
                    <th>Total</th>
                </tr>
            </thead>
            <tbody>
                <tr><td>Widget A</td><td>$19.99</td><td>5</td><td>$99.95</td></tr>
                <tr><td>Widget B</td><td>$29.99</td><td>3</td><td>$89.97</td></tr>

            </tbody>
        </table>
    </body>
    </html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("products.pdf");
using IronPdf;

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

var html = @"
    <html>
    <head>
        <style>
            table { border-collapse: collapse; width: 100%; }
            th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
            th { background-color: #4CAF50; color: white; }
            tr:nth-child(even) { background-color: #f2f2f2; }
        </style>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Price</th>
                    <th>Qty</th>
                    <th>Total</th>
                </tr>
            </thead>
            <tbody>
                <tr><td>Widget A</td><td>$19.99</td><td>5</td><td>$99.95</td></tr>
                <tr><td>Widget B</td><td>$29.99</td><td>3</td><td>$89.97</td></tr>

            </tbody>
        </table>
    </body>
    </html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("products.pdf");
Imports IronPdf

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

Dim html As String = "
    <html>
    <head>
        <style>
            table { border-collapse: collapse; width: 100%; }
            th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
            th { background-color: #4CAF50; color: white; }
            tr:nth-child(even) { background-color: #f2f2f2; }
        </style>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Price</th>
                    <th>Qty</th>
                    <th>Total</th>
                </tr>
            </thead>
            <tbody>
                <tr><td>Widget A</td><td>$19.99</td><td>5</td><td>$99.95</td></tr>
                <tr><td>Widget B</td><td>$29.99</td><td>3</td><td>$89.97</td></tr>

            </tbody>
        </table>
    </body>
    </html>"

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("products.pdf")
$vbLabelText   $csharpLabel

Dies ist die wichtigste Verbesserung bei der GemBox-PDF-Migration. Tabellen, die in der kostenlosen Version von GemBox PDF nicht möglich waren, funktionieren in IronPDF mit voller CSS-Styling-Unterstützung perfekt.


Kritische Hinweise zur Migration

Koordinate zu CSS-Positionierung

Wenn Sie eine pixelgenaue Positionierung benötigen (ähnlich dem Koordinatensystem von GemBox PDF), verwenden Sie die absolute CSS-Positionierung:

<div style="position:absolute; left:50px; top:750px; font-size:24px;">
    Text positioned at specific coordinates
</div>
<div style="position:absolute; left:50px; top:750px; font-size:24px;">
    Text positioned at specific coordinates
</div>
HTML

Seitenindizierung

Sowohl GemBox PDF als auch IronPDF verwenden 0-indizierte Seiten, so dass dieser Aspekt der Migration einfach zu bewerkstelligen ist:

// GemBox PDF
var page = document.Pages[0];

// IronPDF
var page = pdf.Pages[0];
// GemBox PDF
var page = document.Pages[0];

// IronPDF
var page = pdf.Pages[0];
' GemBox PDF
Dim page = document.Pages(0)

' IronPDF
Dim page = pdf.Pages(0)
$vbLabelText   $csharpLabel

Sicherheitseinstellungen

// GemBox PDF
document.SaveOptions.SetPasswordEncryption(userPassword, ownerPassword);

// IronPDF
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
// GemBox PDF
document.SaveOptions.SetPasswordEncryption(userPassword, ownerPassword);

// IronPDF
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
' GemBox PDF
document.SaveOptions.SetPasswordEncryption(userPassword, ownerPassword)

' IronPDF
pdf.SecuritySettings.UserPassword = "userPassword"
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
$vbLabelText   $csharpLabel

Fehlerbehebung

Ausgabe 1: PdfFormattedText nicht gefunden

Problem: PdfFormattedText existiert nicht in IronPDF.

Lösung: HTML mit CSS-Styling verwenden:

// GemBox PDF
var text = new PdfFormattedText { Text = "Hello", FontSize = 24 };

// IronPDF
var html = "<p style='font-size:24px;'>Hello</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// GemBox PDF
var text = new PdfFormattedText { Text = "Hello", FontSize = 24 };

// IronPDF
var html = "<p style='font-size:24px;'>Hello</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
' GemBox PDF
Dim text As New PdfFormattedText With {.Text = "Hello", .FontSize = 24}

' IronPDF
Dim html As String = "<p style='font-size:24px;'>Hello</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

Ausgabe 2: DrawText-Methode nicht gefunden

Problem: page.Content.DrawText() nicht verfügbar.

Lösung: Inhalte über HTML-Rendering erstellen oder Stamper verwenden:

// For new documents - render HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");

// For existing documents - use stampers
var stamper = new TextStamper() { Text = "Added Text" };
pdf.ApplyStamp(stamper);
// For new documents - render HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");

// For existing documents - use stampers
var stamper = new TextStamper() { Text = "Added Text" };
pdf.ApplyStamp(stamper);
Imports System

' For new documents - render HTML
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>")

' For existing documents - use stampers
Dim stamper As New TextStamper() With {.Text = "Added Text"}
pdf.ApplyStamp(stamper)
$vbLabelText   $csharpLabel

Thema 3: Unterschiede beim Laden von Dokumenten

Problem: PdfDocument.Load() nicht gefunden.

Lösung: Verwenden Sie PdfDocument.FromFile() oder FromStream():

// GemBox PDF
var doc = PdfDocument.Load("input.pdf");

// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
// GemBox PDF
var doc = PdfDocument.Load("input.pdf");

// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
Imports GemBox.Pdf
Imports IronPdf

Dim doc = PdfDocument.Load("input.pdf")

Dim pdf = PdfDocument.FromFile("input.pdf")
$vbLabelText   $csharpLabel

Ausgabe 4: Unterschiede zwischen den Speichermethoden

Problem: Die Methodensignatur von document.Save() weicht ab.

Lösung: Verwenden Sie SaveAs():

// GemBox PDF
document.Save("output.pdf");

// IronPDF
pdf.SaveAs("output.pdf");
// GemBox PDF
document.Save("output.pdf");

// IronPDF
pdf.SaveAs("output.pdf");
' GemBox PDF
document.Save("output.pdf")

' IronPDF
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • Erfassung aller GemBox-PDF-Verwendungen im Quellcode
  • Identifizieren Sie koordinatenbasierte Layouts, die eine HTML-Konvertierung benötigen.
  • Prüfen Sie die aktuellen Absatzbegrenzungen, die Ihren Code beeinflussen. -IronPDF-Lizenzschlüssel erhalten
  • Migrationszweig in der Versionskontrolle erstellen

Code-Migration

  • GemBox PDFNuGet Paket entfernen: dotnet remove package GemBox.Pdf
  • Installieren Sie das IronPDFNuGet Paket: dotnet add package IronPdf
  • Namespace-Importe aktualisieren
  • Ersetzen Sie ComponentInfo.SetLicense() durch IronPdf.License.LicenseKey
  • Konvertiere PdfDocument.Load() in PdfDocument.FromFile()
  • Konvertiere document.Save() in pdf.SaveAs()
  • Ersetzen Sie koordinatenbasierten Text durch HTML-Inhalt
  • Konvertiere PdfFormattedText in HTML mit CSS-Styling
  • Aktualisierung der Zusammenführungsvorgänge zur Verwendung von PdfDocument.Merge()

Testen

  • Überprüfen Sie, ob alle Dokumente korrekt generiert wurden.
  • Sicherstellen, dass das Erscheinungsbild des Dokuments den Erwartungen entspricht
  • Generierung von Testtabellen (bisher durch die 20-Absatz-Regel beschränkt)
  • Überprüfen Sie, ob die Textextraktion korrekt funktioniert.
  • Testen von Zusammenführungs- und Aufteilungsoperationen
  • Sicherheits-/Verschlüsselungsfunktionalität überprüfen

Nach der Migration

  • GemBox PDF-Lizenzschlüssel entfernen
  • Dokumentation aktualisieren
  • Schulung des Teams zum HTML/CSS-Ansatz für PDFs
  • Genießen Sie unbegrenzte Inhalte ohne Absatzbegrenzung!

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

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an