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:
-
2-Seiten-Free-Mode-Begrenzung: Die kostenlose Version wirft
FreeLimitReachedExceptionbeim 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.) -
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). -
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. -
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.
-
Nur programmatisch: Jede Designänderung erfordert Codeänderungen. Abstände anpassen? Koordinaten neu berechnen. Die Schriftgröße ändern? Justieren Sie die Y-Positionen darunter.
-
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.)
- 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
- .NET Version:IronPDF supports .NET Framework 4.6.2+ and .NET Core 2.0+ / .NET 5+
- 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.
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" .
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
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")
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" }
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
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
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 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
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
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
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 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
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 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
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")
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>
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)
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"
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)
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() 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")
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");
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()durchIronPdf.License.LicenseKey - Konvertieren Sie
PdfDocument.Load()zuPdfDocument.FromFile() - Konvertieren Sie
document.Save()zupdf.SaveAs() - Ersetzen Sie koordinatenbasierten Text durch HTML-Inhalt
- Konvertieren Sie
PdfFormattedTextzu 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!

