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:
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
- 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
- .NET Version:IronPDF unterstützt .NET Framework 4.6.2+ und .NET Core 2.0+ / .NET 5/6/7/8/9+
- Lizenzschlüssel: Ihren IronPDF-Lizenzschlüssel erhalten Sie unter IronPDF.
- Datensicherung: Erstellen Sie einen Branch für die Migrationsarbeiten.
- 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" .
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
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")
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" }
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
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
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")
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
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
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
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
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
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
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
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")
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>
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)
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"
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)
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)
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")
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")
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()durchIronPdf.License.LicenseKey - Konvertiere
PdfDocument.Load()inPdfDocument.FromFile() - Konvertiere
document.Save()inpdf.SaveAs() - Ersetzen Sie koordinatenbasierten Text durch HTML-Inhalt
- Konvertiere
PdfFormattedTextin 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!

