Zum Fußzeileninhalt springen
VIDEOS

Wie man Seitennummern in PDFs mit C# hinzufügt

Das Migrieren von GemBox.Pdf zu IronPDF transformiert Ihren .NET PDF-Workflow von koordinatebasierter, programmatischer Dokumentenerstellung zu moderner HTML/CSS-basierter Darstellung. Dieser Leitfaden bietet einen umfassenden, schrittweisen Migrationspfad, der die 2-Seiten-Limitierung im Freimodus entfernt und die Dokumenterstellung für professionelle .NET-Entwickler vereinfacht.

Warum von GemBox.Pdf zu IronPDF migrieren

Die Herausforderungen von GemBox.Pdf

GemBox.Pdf ist eine fähige .NET PDF-Komponente, aber es gibt Einschränkungen, die bei der Entwicklung in der Praxis abgewogen werden sollten:

  1. 2-Seiten-Free-Mode-Begrenzung: Die kostenlose Version wirft FreeLimitReachedException beim Laden oder Speichern eines PDFs mit mehr als 2 Seiten, daher erfordert alles über einen einseitigen Beleg oder eine zweiseitige Rechnung hinaus eine kostenpflichtige Lizenz. (Source: gemboxsoftware.com/pdf/free-version.)

  2. Keine HTML-zu-PDF-Konvertierung: GemBox.Pdf kann HTML nicht rendern — PdfDocument.Load öffnet nur bestehende PDF-Dateien. Um HTML in PDF zu konvertieren, müssen Sie das separate GemBox.Document-Produkt kaufen (andere SKU, andere Lizenz).

  3. Koordinatebasierte Layouts: GemBox.Pdf ist eine Low-Level-PDF-Content-Stream-API. Um Text zu platzieren, berechnen Sie X/Y in PDF-User-Space-Einheiten und rufen Sie page.Content.DrawText(formattedText, new PdfPoint(x, y)) auf. Es gibt kein Flusslayout.

  4. Office-zu-PDF erfordert andere SKUs: Word→PDF benötigt GemBox.Document, Excel→PDF benötigt GemBox.Spreadsheet, jede separat lizenziert; das GemBox.Bundle deckt alle ab, kostet aber mehr.

  5. Nur programmatisch: Jede Designänderung erfordert Codeänderungen. Abstände anpassen? Koordinaten neu berechnen. Die Schriftgröße ändern? Justieren Sie die Y-Positionen darunter.

  6. Kommerzielle Lizenzpreise: Einzelentwickler-Lizenz kostet 890 $ (Verlängerung 534 $), kleines Team (10 Entwickler) kostet 4.450 $, großes Team (50 Entwickler) kostet 13.350 $. (Quelle: gemboxsoftware.com/pdf/pricing.)

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

Vergleich von GemBox.Pdf und IronPDF

Aspekt GemBox.Pdf IronPDF
Grenzen der kostenlosen Version 2-Seiten-Maximum (FreeLimitReachedException) Nur Wasserzeichen, kein Seitenlimit
HTML-zu-PDF Nicht unterstützt (braucht GemBox.Document) Vollständige Chromium-Engine
Word/Excel → PDF Separate SKUs (GemBox.Document / GemBox.Spreadsheet) Rendern über HTML-Pipeline
Layout-Ansatz Koordinatenbasiert, manuell HTML/CSS-Flow-Layout
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)

IronPDF nutzt bekannte Webtechnologien zur PDF-Erstellung auf modernem .NET.


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 in dieser GemBox.Pdf-Migration ist der Wechsel von koordinatebasiertem Layout zu 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 supports .NET Framework 4.6.2+ and .NET Core 2.0+ / .NET 5+
  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.

Identifizieren aller GemBox.Pdf-Verwendungen

# 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

Before (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-LICENSE-KEY";

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

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
Imports IronPdf

' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-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

Before (GemBox.Pdf):

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

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

using (var document = new PdfDocument())
{
    var page = document.Pages.Add();
    // PdfFormattedText has no Text property; use Append/AppendLine.
    var formattedText = new PdfFormattedText();
    formattedText.FontSize = 24;
    formattedText.Append("Hello World");

    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();
    // PdfFormattedText has no Text property; use Append/AppendLine.
    var formattedText = new PdfFormattedText();
    formattedText.FontSize = 24;
    formattedText.Append("Hello World");

    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()
    ' PdfFormattedText has no Text property; use Append/AppendLine.
    Dim formattedText As New PdfFormattedText()
    formattedText.FontSize = 24
    formattedText.Append("Hello World")

    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 2-seitige Freimodus-Begrenzung
  • 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 (SecuritySettings)
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.BinaryData (gibt byte[] zurück)

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.Append(text) In HTML einfügen
formattedText.AppendLine(text) In HTML einfügen
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

Vorher (GemBox.Pdf) — nicht unterstützt von GemBox.Pdf; erfordert das separate GemBox.Document SKU:

// NuGet: Install-Package GemBox.Document
// NOTE: GemBox.Pdf does NOT support HTML-to-PDF. PdfDocument.Load only opens
// existing PDF files. To convert HTML to PDF you must use the separate
// GemBox.Document product (different SKU, different license).
using GemBox.Document;

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

        // GemBox.Document loads HTML and saves as PDF.
        var document = DocumentModel.Load("input.html");
        document.Save("output.pdf");
    }
}
// NuGet: Install-Package GemBox.Document
// NOTE: GemBox.Pdf does NOT support HTML-to-PDF. PdfDocument.Load only opens
// existing PDF files. To convert HTML to PDF you must use the separate
// GemBox.Document product (different SKU, different license).
using GemBox.Document;

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

        // GemBox.Document loads HTML and saves as PDF.
        var document = DocumentModel.Load("input.html");
        document.Save("output.pdf");
    }
}
Imports GemBox.Document

Module Program

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

        ' GemBox.Document loads HTML and saves as PDF.
        Dim document = DocumentModel.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

IronPDFs ChromePdfRenderer verwendet eine moderne Chromium-Engine für HTML/CSS/JavaScript-Rendering, sodass ein einzelnes NuGet-Paket HTML-zu-PDF direkt abdeckt — keine separate SKU. Weitere Rendering-Optionen finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: PDF-Dateien zusammenführen

Before (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 Merge-Methode von IronPDF vereinfacht den Vorgang — es ist nicht notwendig, 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

Before (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();
            // PdfFormattedText has no Text property; use Append/AppendLine.
            var formattedText = new PdfFormattedText();
            formattedText.FontSize = 24;
            formattedText.Append("Hello World");

            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();
            // PdfFormattedText has no Text property; use Append/AppendLine.
            var formattedText = new PdfFormattedText();
            formattedText.FontSize = 24;
            formattedText.Append("Hello World");

            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()
            ' PdfFormattedText has no Text property; use Append/AppendLine.
            Dim formattedText As New PdfFormattedText()
            formattedText.FontSize = 24
            formattedText.Append("Hello World")

            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 TextStamper-Klasse, die präzise Positionskontrolle 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!)

Vorher (GemBox.Pdf) — koordinatebasiertes Layout, auf 2 Seiten im Freimodus beschränkt:

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
    var headers = new[] { "Product", "Price", "Qty", "Total" };
    for (int i = 0; i < headers.Length; i++)
    {
        var text = new PdfFormattedText();
        text.FontSize = 12;
        text.Append(headers[i]);
        page.Content.DrawText(text, new PdfPoint(xPositions[i], y));
    }
    y -= 20;

    // Data rows — each row requires manual Y advancement,
    // and free mode caps the saved file at 2 pages total.

    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
    var headers = new[] { "Product", "Price", "Qty", "Total" };
    for (int i = 0; i < headers.Length; i++)
    {
        var text = new PdfFormattedText();
        text.FontSize = 12;
        text.Append(headers[i]);
        page.Content.DrawText(text, new PdfPoint(xPositions[i], y));
    }
    y -= 20;

    // Data rows — each row requires manual Y advancement,
    // and free mode caps the saved file at 2 pages total.

    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
    Dim headers = New String() {"Product", "Price", "Qty", "Total"}
    For i As Integer = 0 To headers.Length - 1
        Dim text As New PdfFormattedText()
        text.FontSize = 12
        text.Append(headers(i))
        page.Content.DrawText(text, New PdfPoint(xPositions(i), y))
    Next
    y -= 20

    ' Data rows — each row requires manual Y advancement,
    ' and free mode caps the saved file at 2 pages total.

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

Nachher (IronPDF) — keine Seitenbegrenzung, 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

Das ist die bedeutendste Verbesserung in der GemBox.Pdf-Migration. Tabellen, die ein Freimodus-GemBox.Pdf-Dokument über die 2-Seiten-Begrenzung hinausschieben würden, rendern ohne diese Begrenzung in IronPDF mit voller CSS-Styling-Unterstützung.


Kritische Hinweise zur Migration

Koordinate zu CSS-Positionierung

Wenn Sie pixelgenaue Positionierung benötigen (ähnlich dem Koordinatensystem von GemBox.Pdf), verwenden Sie CSS absolute 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-indexierte Seiten, was diesen Aspekt der Migration einfach macht:

// 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
var encryption = document.SaveOptions.SetPasswordEncryption();
encryption.DocumentOpenPassword = "userPassword";
encryption.PermissionsPassword = "ownerPassword";

// IronPDF
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
// GemBox.Pdf
var encryption = document.SaveOptions.SetPasswordEncryption();
encryption.DocumentOpenPassword = "userPassword";
encryption.PermissionsPassword = "ownerPassword";

// IronPDF
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
' GemBox.Pdf
Dim encryption = document.SaveOptions.SetPasswordEncryption()
encryption.DocumentOpenPassword = "userPassword"
encryption.PermissionsPassword = "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.FontSize = 24;
text.Append("Hello");

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

// IronPDF
var html = "<p style='font-size:24px;'>Hello</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
Imports GemBox.Pdf
Imports IronPDF

Dim text As New PdfFormattedText()
text.FontSize = 24
text.Append("Hello")

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() not found.

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: document.Save() Methodensignatur unterscheidet sich.

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

Migrations-Checkliste

Vor der Migration

  • Inventarisieren Sie alle GemBox.Pdf-Verwendung in der Codebasis
  • Identifizieren Sie koordinatenbasierte Layouts, die eine HTML-Konvertierung benötigen.
  • Bewerten Sie, wo die 2-seitige Freimodus-Begrenzung Ihren Code beeinflusst -IronPDF-Lizenzschlüssel erhalten
  • Migrationszweig in der Versionskontrolle erstellen

Code-Migration

  • Entfernen Sie GemBox.Pdf NuGet-Paket: dotnet remove package GemBox.Pdf
  • Installieren Sie IronPDF NuGet-Paket: dotnet add package IronPdf
  • Namespace-Importe aktualisieren
  • Ersetzen Sie ComponentInfo.SetLicense() durch IronPdf.License.LicenseKey
  • Konvertieren Sie PdfDocument.Load() zu PdfDocument.FromFile()
  • Konvertieren Sie document.Save() zu pdf.SaveAs()
  • Ersetzen Sie koordinatenbasierten Text durch HTML-Inhalt
  • Konvertieren Sie PdfFormattedText zu HTML mit CSS-Styling
  • Aktualisieren Sie Zusammenführungsoperationen, um PdfDocument.Merge() zu verwenden

Testen

  • Überprüfen Sie, ob alle Dokumente korrekt generiert wurden.
  • Sicherstellen, dass das Erscheinungsbild des Dokuments den Erwartungen entspricht
  • Testen Sie die Ausgabe mit mehreren Seiten (zuvor im Freimodus auf 2 Seiten 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

  • Entfernen Sie GemBox.Pdf Lizenzschlüssel
  • Dokumentation aktualisieren
  • Schulung des Teams zum HTML/CSS-Ansatz für PDFs
  • Genießen Sie unbegrenzte Seitenzahlen ohne Freimodusbegrenzung!

Hinweis:GemBox.Pdf ist eine eingetragene Marke ihres jeweiligen Eigentümers. Diese Seite ist nicht verbunden, unterstützt oder gesponsert von GemBox Software Ltd. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

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