IronPDF vs GemBox.Pdf: Vollständiger .NET PDF-Bibliotheksvergleich für HTML zu PDF Konvertierung
Bei der Entwicklung von .NET-Anwendungen, die die Erzeugung und Bearbeitung von PDF-Dateien erfordern, kann die Wahl der richtigen C# PDF-Bibliothek den Erfolg Ihres Projekts erheblich beeinflussen. Dieser umfassende Vergleich untersucht IronPDF und GemBox.Pdf, zwei prominente .NET-PDF-Bibliotheken, um Entwicklern eine fundierte Entscheidung basierend auf Funktionen, Leistung, Preisgestaltung und praxisnahen Anwendungsfällen zu ermöglichen.
Kurzer Überblick über den Vergleich
| Kategorie | Merkmal/Aspekt | IronPDF | GemBox.Pdf | Hauptvorteil |
|---|---|---|---|---|
| Kernarchitektur | Design-Philosophie | HTML-first, Chrome-Rendering | PDF-native Manipulation | Kontextabhängig |
| API-Komplexität | Einfache Methoden wie RenderHtmlAsPdf() |
PDF-Objekte auf niedriger Ebene | IronPDF: Schnellere Entwicklung | |
| Lernkurve | typisch 1-2 Tage | 3-5 Tage typisch | IronPDF: Schnellere Akzeptanz | |
| Plattform-Unterstützung | Plattformübergreifend | Windows, Linux, macOS, Docker | Windows, Linux, macOS, Android, iOS | GemBox: Mobile Unterstützung |
| .NET-Versionen | .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ | .NET 6, Standard 2.0, Framework 3.5+ | IronPDF: Neueste .NET-Unterstützung | |
| Cloud-Plattformen | Azure/AWS optimiert | Standard-Cloud-Unterstützung | IronPDF: Cloud-fähig | |
| HTML zu PDF | Rendering-Engine | Vollständige Chrome V8-Engine | Chromium-basierte Engine | Beide: Chromium-Rendering |
| CSS3/HTML5-Unterstützung | Vollständige Unterstützung | HTML5/CSS3-Unterstützung | Beide: Moderne Webstandards | |
| JavaScript-Ausführung | Volle JavaScript-Unterstützung | JavaScript-Ausführung unterstützt | Beide: Dynamische Inhalte | |
| Rendering-Geschwindigkeit | ~125ms typisch | Chromium-basiertes Rendering | IronPDF: Dokumentierte Renderzeit | |
| Erfahrung des Entwicklers | Codebeispiele | 100+ fertige Beispiele | mehr als 100 Beispiele verfügbar | Beides: Umfangreiche Ressourcen |
| Dokumentation | Tutorials, Anleitungen, Videos | Schwerpunkt API-Dokumentation | IronPDF: Mehrere Lernpfade | |
| Inhaltsmanipulation | PDFs zusammenführen/teilen | Eingebaute Methoden | Eingebaute Methoden | Beide: Standardfunktionen |
| Textextraktion | Unicode-Unterstützung, OCR-Integration | Unicode-Unterstützung, integrierte OCR | GemBox: Eingebaute OCR | |
| Formulare unterstützen | HTML-Formulare in PDF-Formulare | Formulare erstellen, ausfüllen, glätten | Kontextabhängig | |
| Leistungskennzahlen | Speicherverwendung | Typischerweise unter 10 MB | Geringer Speicherbedarf | Beide: Effizient |
| Threading-Unterstützung | Natives async/await optimiert | Thread-sichere Operationen | IronPDF: Bessere async-Unterstützung | |
| Security & Encryption | Verschlüsselungsstufen | AES-256, benutzerdefinierte Handler | AES-256-Standard | Beides: Industriestandard |
| Digitale Signaturen | Integrierte, visuelle Signaturen | Unterstützung für digitale Signaturen | Beides: Unterstützung von Signaturen | |
| Licensing & Pricing | Einstiegsstufe | Lite: $999 (1 Entwickler, 1 Projekt) | Einzelnutzer: $890 (1 Entwickler, unbegrenzte Projekte) | IronPDF: Niedrigere Einstiegskosten |
| Weitervertrieb | +$1.999 lizenzgebührenfrei | Inklusive, unbegrenzte Einsätze | GemBox: Bessere Begriffe für die Bereitstellung | |
| Suite-Option | Iron Suite: `$suitePreis` (9 Produkte) | GemBox Bundle: $2,200 (6 products, 1 dev) | IronPDF: Besserer Wert der Suite | |
| Unterstützung | Inklusive Unterstützung | Ja, 24/5 technische Unterstützung | Ja, 1 Jahr professioneller Support | Beides: Gute Unterstützung |
| Reaktionszeit | typischerweise 24-48 Stunden | Innerhalb von 1 Arbeitstag | Beides: Schnelle Reaktion | |
| Best für | Anwendungsfälle | HTML zu PDF, Webanwendungen, Berichte | PDF-Bearbeitung, Formulare, OCR | Kontextabhängig |
Was ist die IronPDF-Bibliothek?
IronPDF hebt sich als umfassende .NET PDF-Bibliothek hervor, die speziell entwickelt wurde, um HTML zu PDF-Konvertierung für Entwickler nahtlos zu gestalten. Mit einer Chrome-Rendering-Engine im Kern verändert IronPDF die Art und Weise, wie Entwickler die PDF-Erzeugung in C#, F# und VB.NET-Anwendungen angehen.
Die Philosophie der Bibliothek konzentriert sich darauf, vorhandene Webentwicklungskompetenzen zu nutzen. Anstatt komplexe PDF-APIs zu erlernen, können Entwickler vertraute HTML-, CSS- und JavaScript-Technologien verwenden, um anspruchsvolle PDF-Dokumente zu erstellen. Dieser Ansatz verkürzt die Entwicklungszeit erheblich und gewährleistet eine pixelgenaue Wiedergabe, die den modernen Webstandards entspricht.
Kernfunktionen von IronPDF
IronPDF bietet ein umfangreiches Funktionsset, das nahezu alle PDF-bezogenen Aufgaben abdeckt, auf die Entwickler stoßen könnten:
Exzellenz bei der HTML-zu-PDF-Konvertierung
- Chrome V8 Engine: Rendert HTML mit derselben Engine wie Google Chrome und gewährleistet so eine Browsertreue von über 98 %.
- Volle CSS3/HTML5-Unterstützung: Umfassende Unterstützung für moderne Webstandards einschließlich Flexbox, Grid und Animationen
- JavaScript -Ausführung: Verarbeitet JavaScript vor dem Rendern und erfasst dynamische Inhalte perfekt.
- Responsives Design: Unterstützt responsive Layouts mit anpassbaren Viewport-Einstellungen
- Unterstützung für Webfonts: Stellt Google Fonts, benutzerdefinierte Schriftarten und Symbolfonts korrekt dar.
Erweiterte PDF-Manipulation
- PDFs zusammenführen und aufteilen : Mehrere PDFs kombinieren oder bestimmte Seiten mit einfachen Methodenaufrufen extrahieren.
- Digitale Signaturen : Kryptografische Signaturen mit Zertifikatsunterstützung anwenden
- Formularverwaltung : Erstellen Sie ausfüllbare Formulare aus HTML oder bearbeiten Sie vorhandene PDF-Formulare
- Wasserzeichen und Stempel : Fügen Sie Text- oder Bildwasserzeichen mit Transparenzsteuerung hinzu.
- Kopf- und Fußzeilen : Dynamische Kopf- und Fußzeilen mit Seitennummerierung
Sicherheit und Konformität
- Verschlüsselung: AES-256 Verschlüsselung mit benutzerdefinierten Berechtigungseinstellungen
- PDF/A-Konformität : Erstellung von PDFs in Archivqualität für die Langzeitarchivierung
- Schwärzung : Sensible Inhalte dauerhaft entfernen
- Passwortschutz: Unterstützung von Benutzer- und Besitzerpasswörtern mit differenzierten Berechtigungen
IronPDF Code Beispiel: HTML zu PDF mit erweiterten Funktionen
using IronPdf;
using IronPdf.Rendering;
// Configure the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
// Set paper orientation and size
PaperOrientation = PdfPaperOrientation.Portrait,
PaperSize = PdfPaperSize.A4,
// Configure margins (in millimeters)
MarginTop = 25,
MarginBottom = 25,
MarginLeft = 20,
MarginRight = 20,
// Enable JavaScript execution
EnableJavaScript = true,
RenderDelay = 1000, // Wait 1 second for JS to complete
// Print background colors and images
PrintHtmlBackgrounds = true,
// Create PDF forms from HTML form elements
CreatePdfFormsFromHtml = true,
// Custom header and footer
HtmlHeader = new HtmlHeaderFooter
{
Height = 20,
HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Company Report - {page} of {total-pages}</div>",
DrawDividerLine = true
},
HtmlFooter = new HtmlHeaderFooter
{
Height = 15,
HtmlFragment = "<div style='text-align: center; font-size: 10px;'>© 2025 Company Name. Confidential.</div>"
}
}
};
// Convert complex HTML with CSS and JavaScript
string htmlContent = @"
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: 'Segoe UI', Arial, sans-serif; line-height: 1.6; }
.invoice-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 30px;
border-radius: 10px;
margin-bottom: 30px;
}
.data-table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
.data-table th {
background-color: #f8f9fa;
padding: 12px;
text-align: left;
border-bottom: 2px solid #dee2e6;
}
.data-table td {
padding: 10px;
border-bottom: 1px solid #dee2e6;
}
.total-section {
margin-top: 30px;
text-align: right;
font-size: 18px;
font-weight: bold;
}
@media print {
.no-print { display: none; }
}
</style>
</head>
<body>
<div class='invoice-header'>
<h1>Invoice #INV-2025-001</h1>
<p>Date: <span id='current-date'></span></p>
</div>
<table class='data-table'>
<thead>
<tr>
<th>Item Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Professional PDF Library License</td>
<td>1</td>
<td>$999.00</td>
<td>$999.00</td>
</tr>
<tr>
<td>Priority Support (1 Year)</td>
<td>1</td>
<td>$299.00</td>
<td>$299.00</td>
</tr>
</tbody>
</table>
<div class='total-section'>
<p>Subtotal: $1,048.00</p>
<p>Tax (8%): $83.84</p>
<p style='color: #667eea; font-size: 24px;'>Total: $1,131.84</p>
</div>
<script>
// Dynamic date insertion
document.getElementById('current-date').textContent = new Date().toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
</script>
</body>
</html>";
// Render the HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Apply additional security settings
pdf.SecuritySettings.OwnerPassword = "admin123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;
// Add metadata
pdf.MetaData.Author = "Invoice System";
pdf.MetaData.Title = "Invoice INV-2025-001";
pdf.MetaData.Subject = "Customer Invoice";
pdf.MetaData.Keywords = "invoice, payment, 2025";
pdf.MetaData.CreationDate = DateTime.Now;
// Save the PDF
pdf.SaveAs("invoice-2025-001.pdf");
// Optional: Save as PDF/A for archival
pdf.SaveAsPdfA("invoice-2025-001-archive.pdf", PdfAVersions.PdfA3);
using IronPdf;
using IronPdf.Rendering;
// Configure the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
// Set paper orientation and size
PaperOrientation = PdfPaperOrientation.Portrait,
PaperSize = PdfPaperSize.A4,
// Configure margins (in millimeters)
MarginTop = 25,
MarginBottom = 25,
MarginLeft = 20,
MarginRight = 20,
// Enable JavaScript execution
EnableJavaScript = true,
RenderDelay = 1000, // Wait 1 second for JS to complete
// Print background colors and images
PrintHtmlBackgrounds = true,
// Create PDF forms from HTML form elements
CreatePdfFormsFromHtml = true,
// Custom header and footer
HtmlHeader = new HtmlHeaderFooter
{
Height = 20,
HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Company Report - {page} of {total-pages}</div>",
DrawDividerLine = true
},
HtmlFooter = new HtmlHeaderFooter
{
Height = 15,
HtmlFragment = "<div style='text-align: center; font-size: 10px;'>© 2025 Company Name. Confidential.</div>"
}
}
};
// Convert complex HTML with CSS and JavaScript
string htmlContent = @"
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: 'Segoe UI', Arial, sans-serif; line-height: 1.6; }
.invoice-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 30px;
border-radius: 10px;
margin-bottom: 30px;
}
.data-table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
.data-table th {
background-color: #f8f9fa;
padding: 12px;
text-align: left;
border-bottom: 2px solid #dee2e6;
}
.data-table td {
padding: 10px;
border-bottom: 1px solid #dee2e6;
}
.total-section {
margin-top: 30px;
text-align: right;
font-size: 18px;
font-weight: bold;
}
@media print {
.no-print { display: none; }
}
</style>
</head>
<body>
<div class='invoice-header'>
<h1>Invoice #INV-2025-001</h1>
<p>Date: <span id='current-date'></span></p>
</div>
<table class='data-table'>
<thead>
<tr>
<th>Item Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Professional PDF Library License</td>
<td>1</td>
<td>$999.00</td>
<td>$999.00</td>
</tr>
<tr>
<td>Priority Support (1 Year)</td>
<td>1</td>
<td>$299.00</td>
<td>$299.00</td>
</tr>
</tbody>
</table>
<div class='total-section'>
<p>Subtotal: $1,048.00</p>
<p>Tax (8%): $83.84</p>
<p style='color: #667eea; font-size: 24px;'>Total: $1,131.84</p>
</div>
<script>
// Dynamic date insertion
document.getElementById('current-date').textContent = new Date().toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
</script>
</body>
</html>";
// Render the HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Apply additional security settings
pdf.SecuritySettings.OwnerPassword = "admin123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;
// Add metadata
pdf.MetaData.Author = "Invoice System";
pdf.MetaData.Title = "Invoice INV-2025-001";
pdf.MetaData.Subject = "Customer Invoice";
pdf.MetaData.Keywords = "invoice, payment, 2025";
pdf.MetaData.CreationDate = DateTime.Now;
// Save the PDF
pdf.SaveAs("invoice-2025-001.pdf");
// Optional: Save as PDF/A for archival
pdf.SaveAsPdfA("invoice-2025-001-archive.pdf", PdfAVersions.PdfA3);
Imports IronPdf
Imports IronPdf.Rendering
' Configure the Chrome renderer with advanced options
Dim renderer As New ChromePdfRenderer With {
.RenderingOptions = New ChromePdfRenderOptions With {
' Set paper orientation and size
.PaperOrientation = PdfPaperOrientation.Portrait,
.PaperSize = PdfPaperSize.A4,
' Configure margins (in millimeters)
.MarginTop = 25,
.MarginBottom = 25,
.MarginLeft = 20,
.MarginRight = 20,
' Enable JavaScript execution
.EnableJavaScript = True,
.RenderDelay = 1000, ' Wait 1 second for JS to complete
' Print background colors and images
.PrintHtmlBackgrounds = True,
' Create PDF forms from HTML form elements
.CreatePdfFormsFromHtml = True,
' Custom header and footer
.HtmlHeader = New HtmlHeaderFooter With {
.Height = 20,
.HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Company Report - {page} of {total-pages}</div>",
.DrawDividerLine = True
},
.HtmlFooter = New HtmlHeaderFooter With {
.Height = 15,
.HtmlFragment = "<div style='text-align: center; font-size: 10px;'>© 2025 Company Name. Confidential.</div>"
}
}
}
' Convert complex HTML with CSS and JavaScript
Dim htmlContent As String = "
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: 'Segoe UI', Arial, sans-serif; line-height: 1.6; }
.invoice-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 30px;
border-radius: 10px;
margin-bottom: 30px;
}
.data-table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
.data-table th {
background-color: #f8f9fa;
padding: 12px;
text-align: left;
border-bottom: 2px solid #dee2e6;
}
.data-table td {
padding: 10px;
border-bottom: 1px solid #dee2e6;
}
.total-section {
margin-top: 30px;
text-align: right;
font-size: 18px;
font-weight: bold;
}
@media print {
.no-print { display: none; }
}
</style>
</head>
<body>
<div class='invoice-header'>
<h1>Invoice #INV-2025-001</h1>
<p>Date: <span id='current-date'></span></p>
</div>
<table class='data-table'>
<thead>
<tr>
<th>Item Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Professional PDF Library License</td>
<td>1</td>
<td>$999.00</td>
<td>$999.00</td>
</tr>
<tr>
<td>Priority Support (1 Year)</td>
<td>1</td>
<td>$299.00</td>
<td>$299.00</td>
</tr>
</tbody>
</table>
<div class='total-section'>
<p>Subtotal: $1,048.00</p>
<p>Tax (8%): $83.84</p>
<p style='color: #667eea; font-size: 24px;'>Total: $1,131.84</p>
</div>
<script>
// Dynamic date insertion
document.getElementById('current-date').textContent = new Date().toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
</script>
</body>
</html>"
' Render the HTML to PDF
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
' Apply additional security settings
pdf.SecuritySettings.OwnerPassword = "admin123"
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserFormData = True
' Add metadata
pdf.MetaData.Author = "Invoice System"
pdf.MetaData.Title = "Invoice INV-2025-001"
pdf.MetaData.Subject = "Customer Invoice"
pdf.MetaData.Keywords = "invoice, payment, 2025"
pdf.MetaData.CreationDate = DateTime.Now
' Save the PDF
pdf.SaveAs("invoice-2025-001.pdf")
' Optional: Save as PDF/A for archival
pdf.SaveAsPdfA("invoice-2025-001-archive.pdf", PdfAVersions.PdfA3)
Dieses Beispiel zeigt die Fähigkeit von IronPDF, komplexe HTML-Layouts mit Verläufen, Tabellen, dynamischen JavaScript-Inhalten und erweiterten PDF-Funktionen wie Sicherheitseinstellungen und Metadaten zu behandeln. Die Bibliothek verarbeitet alles nahtlos und erzeugt ein professionelles PDF, das dem HTML-Design exakt entspricht.
Was ist die GemBox.Pdf-Bibliothek?
GemBox.Pdf repräsentiert einen anderen Ansatz zur PDF-Bearbeitung in .NET. Anstatt sich auf die Konvertierung von HTML in PDF zu konzentrieren, spezialisiert sich GemBox.Pdf auf niedrigstufige PDF-Operationen und die direkte PDF-Manipulation. Dies macht es besonders geeignet für Szenarien, in denen Entwickler eine präzise Kontrolle über die PDF-Struktur und den Inhalt benötigen.
Die Bibliothek ist hervorragend im Umgang mit bestehenden PDF-Dokumenten und bietet robuste Funktionen zum Lesen, Bearbeiten und Bearbeiten von PDF-Dateien auf granularer Ebene. GemBox.Pdf arbeitet ohne Abhängigkeiten von Adobe Acrobat, was die Bereitstellung in verschiedenen Umgebungen unkompliziert macht.
Kernfunktionen von GemBox.Pdf
GemBox.Pdf bietet umfangreiche PDF-Bearbeitungsfähigkeiten:
PDF-Dokumente bearbeiten
- PDFs lesen und schreiben: Direkter Zugriff auf PDF-Struktur und -Inhalt
- Zusammenführen und Aufteilen: Mehrere PDFs kombinieren oder bestimmte Seiten extrahieren
- Seiten klonen: Seiten zwischen verschiedenen PDF-Dokumenten importieren
- Seitenverwaltung: Seiten programmatisch hinzufügen, entfernen oder neu anordnen
Inhaltsextraktion und -manipulation
- Textextraktion: Unicode-Text mit Positionsinformationen extrahieren
- Bildextraktion: Eingebettete Bilder aus PDF-Dokumenten abrufen
- OCR-Unterstützung: Integrierte optische Zeichenerkennung für gescannte Dokumente
- Inhaltsschwärzung: Sensible Informationen dauerhaft entfernen
Formulare und Interaktivität
- Interaktive Formulare: PDF-Formulare erstellen, ausfüllen, reduzieren und exportieren
- Formularfeldverwaltung: Programmatischer Zugriff auf alle Formularfeldtypen
- Anmerkungen: Hyperlinks und andere PDF-Anmerkungen hinzufügen
Grafiken und visuelle Elemente
- Zeichenoperationen: Text, Bilder und Vektorgrafiken hinzufügen
- Formen und Pfade: Erstellen Sie komplexe Vektorgrafiken
- Wasserzeichen: Text- und Bildwasserzeichen anwenden
- Inhaltsgruppen: Inhalte in logische Gruppen organisieren
GemBox.Pdf Code Beispiel: PDF-Bearbeitung und Formulare
using GemBox.Pdf;
using GemBox.Pdf.Content;
using GemBox.Pdf.Forms;
using GemBox.Pdf.Security;
// Set license (use FREE-LIMITED-KEY for evaluation)
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Create a new PDF document from scratch
using (var document = new PdfDocument())
{
// Add a page with custom size
var page = document.Pages.Add();
// Create formatted text with multiple styles
using (var formattedText = new PdfFormattedText())
{
formattedText.FontSize = 24;
formattedText.FontFamily = new PdfFontFamily("Arial");
formattedText.Color = PdfColor.FromRgb(0.2, 0.2, 0.6);
formattedText.AppendLine("GemBox.Pdf Document Example");
formattedText.FontSize = 12;
formattedText.Color = PdfColor.FromRgb(0, 0, 0);
formattedText.AppendLine("This document demonstrates PDF creation and manipulation features.");
// Draw text to the page
page.Content.DrawText(formattedText, new PdfPoint(50, 700));
}
// Add a form to the document
var form = document.Form;
// Create text field
var textField = form.Fields.AddText(page, 50, 600, 200, 30);
textField.Name = "CustomerName";
textField.Value = "Enter your name";
textField.Format.Fill.Color = PdfColor.FromRgb(0.95, 0.95, 0.95);
// Create checkbox
var checkBox = form.Fields.AddCheck(page, 50, 550, 20, 20);
checkBox.Name = "Agreement";
checkBox.Checked = false;
// Add descriptive text next to checkbox
using (var checkboxLabel = new PdfFormattedText())
{
checkboxLabel.Append("I agree to the terms and conditions");
page.Content.DrawText(checkboxLabel, new PdfPoint(80, 555));
}
// Create submit button
var submitButton = form.Fields.AddButton(page, 50, 500, 100, 30);
submitButton.Name = "Submit";
submitButton.Actions.Activate = PdfActionType.Named;
// Add button appearance
using (var buttonText = new PdfFormattedText())
{
buttonText.Append("Submit Form");
buttonText.FontSize = 14;
buttonText.Color = PdfColor.FromRgb(1, 1, 1);
// Create button appearance stream
var appearance = submitButton.Appearance.Normal;
appearance.Fill.Color = PdfColor.FromRgb(0.2, 0.4, 0.8);
appearance.Stroke.Color = PdfColor.FromRgb(0.1, 0.2, 0.4);
appearance.Stroke.Width = 1;
// Draw button background
appearance.DrawRectangle(new PdfPoint(0, 0), new PdfSize(100, 30), true, true);
// Draw button text
appearance.DrawText(buttonText, new PdfPoint(20, 10));
}
// Add a table using low-level graphics
var tableTop = 400;
var tableLeft = 50;
var cellWidth = 150;
var cellHeight = 30;
// Draw table headers
page.Content.DrawRectangle(new PdfPoint(tableLeft, tableTop),
new PdfSize(cellWidth * 3, cellHeight), true, true);
using (var headerText = new PdfFormattedText())
{
headerText.FontSize = 12;
headerText.Color = PdfColor.FromRgb(1, 1, 1);
headerText.Append("Product");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + 10, tableTop + 10));
headerText.Clear();
headerText.Append("Quantity");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth + 10, tableTop + 10));
headerText.Clear();
headerText.Append("Price");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth * 2 + 10, tableTop + 10));
}
// Draw table data rows
var rowData = new[]
{
new { Product = "PDF Library", Quantity = "1", Price = "$890" },
new { Product = "Support Plan", Quantity = "1", Price = "$299" },
new { Product = "Training", Quantity = "2", Price = "$500" }
};
var currentY = tableTop - cellHeight;
foreach (var row in rowData)
{
// Draw cell borders
page.Content.DrawRectangle(new PdfPoint(tableLeft, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth * 2, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
// Draw cell content
using (var cellText = new PdfFormattedText())
{
cellText.FontSize = 11;
cellText.Append(row.Product);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + 10, currentY + 10));
cellText.Clear();
cellText.Append(row.Quantity);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth + 10, currentY + 10));
cellText.Clear();
cellText.Append(row.Price);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth * 2 + 10, currentY + 10));
}
currentY -= cellHeight;
}
// Apply security settings
var securitySettings = document.SecuritySettings;
securitySettings.DocumentOpenPassword = "user123";
securitySettings.PermissionsPassword = "owner123";
securitySettings.Permissions = PdfPermissions.AllowPrint | PdfPermissions.AllowFormFill;
// Save the document
document.Save("gembox-example.pdf");
}
// Example: Manipulating existing PDF
using (var existingDoc = PdfDocument.Load("existing-document.pdf"))
{
// Extract text from first page
var page = existingDoc.Pages[0];
var text = page.Content.GetText();
Console.WriteLine($"Extracted text: {text}");
// Add watermark to all pages
foreach (var p in existingDoc.Pages)
{
using (var watermark = new PdfFormattedText())
{
watermark.Append("CONFIDENTIAL");
watermark.FontSize = 50;
watermark.Color = PdfColor.FromRgb(0.5, 0.5, 0.5);
watermark.Opacity = 0.3;
// Calculate center position
var pageWidth = p.MediaBox.Width;
var pageHeight = p.MediaBox.Height;
var textWidth = watermark.Width;
var textHeight = watermark.Height;
var x = (pageWidth - textWidth) / 2;
var y = (pageHeight - textHeight) / 2;
// Draw watermark diagonally
p.Content.SaveGraphicsState();
p.Content.SetTransform(1, 0, 0, 1, x, y);
p.Content.SetTransform(0.7071, 0.7071, -0.7071, 0.7071, 0, 0);
p.Content.DrawText(watermark, new PdfPoint(0, 0));
p.Content.RestoreGraphicsState();
}
}
existingDoc.Save("watermarked-document.pdf");
}
using GemBox.Pdf;
using GemBox.Pdf.Content;
using GemBox.Pdf.Forms;
using GemBox.Pdf.Security;
// Set license (use FREE-LIMITED-KEY for evaluation)
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Create a new PDF document from scratch
using (var document = new PdfDocument())
{
// Add a page with custom size
var page = document.Pages.Add();
// Create formatted text with multiple styles
using (var formattedText = new PdfFormattedText())
{
formattedText.FontSize = 24;
formattedText.FontFamily = new PdfFontFamily("Arial");
formattedText.Color = PdfColor.FromRgb(0.2, 0.2, 0.6);
formattedText.AppendLine("GemBox.Pdf Document Example");
formattedText.FontSize = 12;
formattedText.Color = PdfColor.FromRgb(0, 0, 0);
formattedText.AppendLine("This document demonstrates PDF creation and manipulation features.");
// Draw text to the page
page.Content.DrawText(formattedText, new PdfPoint(50, 700));
}
// Add a form to the document
var form = document.Form;
// Create text field
var textField = form.Fields.AddText(page, 50, 600, 200, 30);
textField.Name = "CustomerName";
textField.Value = "Enter your name";
textField.Format.Fill.Color = PdfColor.FromRgb(0.95, 0.95, 0.95);
// Create checkbox
var checkBox = form.Fields.AddCheck(page, 50, 550, 20, 20);
checkBox.Name = "Agreement";
checkBox.Checked = false;
// Add descriptive text next to checkbox
using (var checkboxLabel = new PdfFormattedText())
{
checkboxLabel.Append("I agree to the terms and conditions");
page.Content.DrawText(checkboxLabel, new PdfPoint(80, 555));
}
// Create submit button
var submitButton = form.Fields.AddButton(page, 50, 500, 100, 30);
submitButton.Name = "Submit";
submitButton.Actions.Activate = PdfActionType.Named;
// Add button appearance
using (var buttonText = new PdfFormattedText())
{
buttonText.Append("Submit Form");
buttonText.FontSize = 14;
buttonText.Color = PdfColor.FromRgb(1, 1, 1);
// Create button appearance stream
var appearance = submitButton.Appearance.Normal;
appearance.Fill.Color = PdfColor.FromRgb(0.2, 0.4, 0.8);
appearance.Stroke.Color = PdfColor.FromRgb(0.1, 0.2, 0.4);
appearance.Stroke.Width = 1;
// Draw button background
appearance.DrawRectangle(new PdfPoint(0, 0), new PdfSize(100, 30), true, true);
// Draw button text
appearance.DrawText(buttonText, new PdfPoint(20, 10));
}
// Add a table using low-level graphics
var tableTop = 400;
var tableLeft = 50;
var cellWidth = 150;
var cellHeight = 30;
// Draw table headers
page.Content.DrawRectangle(new PdfPoint(tableLeft, tableTop),
new PdfSize(cellWidth * 3, cellHeight), true, true);
using (var headerText = new PdfFormattedText())
{
headerText.FontSize = 12;
headerText.Color = PdfColor.FromRgb(1, 1, 1);
headerText.Append("Product");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + 10, tableTop + 10));
headerText.Clear();
headerText.Append("Quantity");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth + 10, tableTop + 10));
headerText.Clear();
headerText.Append("Price");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth * 2 + 10, tableTop + 10));
}
// Draw table data rows
var rowData = new[]
{
new { Product = "PDF Library", Quantity = "1", Price = "$890" },
new { Product = "Support Plan", Quantity = "1", Price = "$299" },
new { Product = "Training", Quantity = "2", Price = "$500" }
};
var currentY = tableTop - cellHeight;
foreach (var row in rowData)
{
// Draw cell borders
page.Content.DrawRectangle(new PdfPoint(tableLeft, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth * 2, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
// Draw cell content
using (var cellText = new PdfFormattedText())
{
cellText.FontSize = 11;
cellText.Append(row.Product);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + 10, currentY + 10));
cellText.Clear();
cellText.Append(row.Quantity);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth + 10, currentY + 10));
cellText.Clear();
cellText.Append(row.Price);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth * 2 + 10, currentY + 10));
}
currentY -= cellHeight;
}
// Apply security settings
var securitySettings = document.SecuritySettings;
securitySettings.DocumentOpenPassword = "user123";
securitySettings.PermissionsPassword = "owner123";
securitySettings.Permissions = PdfPermissions.AllowPrint | PdfPermissions.AllowFormFill;
// Save the document
document.Save("gembox-example.pdf");
}
// Example: Manipulating existing PDF
using (var existingDoc = PdfDocument.Load("existing-document.pdf"))
{
// Extract text from first page
var page = existingDoc.Pages[0];
var text = page.Content.GetText();
Console.WriteLine($"Extracted text: {text}");
// Add watermark to all pages
foreach (var p in existingDoc.Pages)
{
using (var watermark = new PdfFormattedText())
{
watermark.Append("CONFIDENTIAL");
watermark.FontSize = 50;
watermark.Color = PdfColor.FromRgb(0.5, 0.5, 0.5);
watermark.Opacity = 0.3;
// Calculate center position
var pageWidth = p.MediaBox.Width;
var pageHeight = p.MediaBox.Height;
var textWidth = watermark.Width;
var textHeight = watermark.Height;
var x = (pageWidth - textWidth) / 2;
var y = (pageHeight - textHeight) / 2;
// Draw watermark diagonally
p.Content.SaveGraphicsState();
p.Content.SetTransform(1, 0, 0, 1, x, y);
p.Content.SetTransform(0.7071, 0.7071, -0.7071, 0.7071, 0, 0);
p.Content.DrawText(watermark, new PdfPoint(0, 0));
p.Content.RestoreGraphicsState();
}
}
existingDoc.Save("watermarked-document.pdf");
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content
Imports GemBox.Pdf.Forms
Imports GemBox.Pdf.Security
' Set license (use FREE-LIMITED-KEY for evaluation)
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
' Create a new PDF document from scratch
Using document = New PdfDocument()
' Add a page with custom size
Dim page = document.Pages.Add()
' Create formatted text with multiple styles
Using formattedText = New PdfFormattedText()
formattedText.FontSize = 24
formattedText.FontFamily = New PdfFontFamily("Arial")
formattedText.Color = PdfColor.FromRgb(0.2, 0.2, 0.6)
formattedText.AppendLine("GemBox.Pdf Document Example")
formattedText.FontSize = 12
formattedText.Color = PdfColor.FromRgb(0, 0, 0)
formattedText.AppendLine("This document demonstrates PDF creation and manipulation features.")
' Draw text to the page
page.Content.DrawText(formattedText, New PdfPoint(50, 700))
End Using
' Add a form to the document
Dim form = document.Form
' Create text field
Dim textField = form.Fields.AddText(page, 50, 600, 200, 30)
textField.Name = "CustomerName"
textField.Value = "Enter your name"
textField.Format.Fill.Color = PdfColor.FromRgb(0.95, 0.95, 0.95)
' Create checkbox
Dim checkBox = form.Fields.AddCheck(page, 50, 550, 20, 20)
checkBox.Name = "Agreement"
checkBox.Checked = False
' Add descriptive text next to checkbox
Using checkboxLabel = New PdfFormattedText()
checkboxLabel.Append("I agree to the terms and conditions")
page.Content.DrawText(checkboxLabel, New PdfPoint(80, 555))
End Using
' Create submit button
Dim submitButton = form.Fields.AddButton(page, 50, 500, 100, 30)
submitButton.Name = "Submit"
submitButton.Actions.Activate = PdfActionType.Named
' Add button appearance
Using buttonText = New PdfFormattedText()
buttonText.Append("Submit Form")
buttonText.FontSize = 14
buttonText.Color = PdfColor.FromRgb(1, 1, 1)
' Create button appearance stream
Dim appearance = submitButton.Appearance.Normal
appearance.Fill.Color = PdfColor.FromRgb(0.2, 0.4, 0.8)
appearance.Stroke.Color = PdfColor.FromRgb(0.1, 0.2, 0.4)
appearance.Stroke.Width = 1
' Draw button background
appearance.DrawRectangle(New PdfPoint(0, 0), New PdfSize(100, 30), True, True)
' Draw button text
appearance.DrawText(buttonText, New PdfPoint(20, 10))
End Using
' Add a table using low-level graphics
Dim tableTop = 400
Dim tableLeft = 50
Dim cellWidth = 150
Dim cellHeight = 30
' Draw table headers
page.Content.DrawRectangle(New PdfPoint(tableLeft, tableTop), New PdfSize(cellWidth * 3, cellHeight), True, True)
Using headerText = New PdfFormattedText()
headerText.FontSize = 12
headerText.Color = PdfColor.FromRgb(1, 1, 1)
headerText.Append("Product")
page.Content.DrawText(headerText, New PdfPoint(tableLeft + 10, tableTop + 10))
headerText.Clear()
headerText.Append("Quantity")
page.Content.DrawText(headerText, New PdfPoint(tableLeft + cellWidth + 10, tableTop + 10))
headerText.Clear()
headerText.Append("Price")
page.Content.DrawText(headerText, New PdfPoint(tableLeft + cellWidth * 2 + 10, tableTop + 10))
End Using
' Draw table data rows
Dim rowData = {
New With {
Key .Product = "PDF Library",
Key .Quantity = "1",
Key .Price = "$890"
},
New With {
Key .Product = "Support Plan",
Key .Quantity = "1",
Key .Price = "$299"
},
New With {
Key .Product = "Training",
Key .Quantity = "2",
Key .Price = "$500"
}
}
Dim currentY = tableTop - cellHeight
For Each row In rowData
' Draw cell borders
page.Content.DrawRectangle(New PdfPoint(tableLeft, currentY), New PdfSize(cellWidth, cellHeight), False, True)
page.Content.DrawRectangle(New PdfPoint(tableLeft + cellWidth, currentY), New PdfSize(cellWidth, cellHeight), False, True)
page.Content.DrawRectangle(New PdfPoint(tableLeft + cellWidth * 2, currentY), New PdfSize(cellWidth, cellHeight), False, True)
' Draw cell content
Using cellText = New PdfFormattedText()
cellText.FontSize = 11
cellText.Append(row.Product)
page.Content.DrawText(cellText, New PdfPoint(tableLeft + 10, currentY + 10))
cellText.Clear()
cellText.Append(row.Quantity)
page.Content.DrawText(cellText, New PdfPoint(tableLeft + cellWidth + 10, currentY + 10))
cellText.Clear()
cellText.Append(row.Price)
page.Content.DrawText(cellText, New PdfPoint(tableLeft + cellWidth * 2 + 10, currentY + 10))
End Using
currentY -= cellHeight
Next row
' Apply security settings
Dim securitySettings = document.SecuritySettings
securitySettings.DocumentOpenPassword = "user123"
securitySettings.PermissionsPassword = "owner123"
securitySettings.Permissions = PdfPermissions.AllowPrint Or PdfPermissions.AllowFormFill
' Save the document
document.Save("gembox-example.pdf")
End Using
' Example: Manipulating existing PDF
Using existingDoc = PdfDocument.Load("existing-document.pdf")
' Extract text from first page
Dim page = existingDoc.Pages(0)
Dim text = page.Content.GetText()
Console.WriteLine($"Extracted text: {text}")
' Add watermark to all pages
For Each p In existingDoc.Pages
Using watermark = New PdfFormattedText()
watermark.Append("CONFIDENTIAL")
watermark.FontSize = 50
watermark.Color = PdfColor.FromRgb(0.5, 0.5, 0.5)
watermark.Opacity = 0.3
' Calculate center position
Dim pageWidth = p.MediaBox.Width
Dim pageHeight = p.MediaBox.Height
Dim textWidth = watermark.Width
Dim textHeight = watermark.Height
Dim x = (pageWidth - textWidth) \ 2
Dim y = (pageHeight - textHeight) \ 2
' Draw watermark diagonally
p.Content.SaveGraphicsState()
p.Content.SetTransform(1, 0, 0, 1, x, y)
p.Content.SetTransform(0.7071, 0.7071, -0.7071, 0.7071, 0, 0)
p.Content.DrawText(watermark, New PdfPoint(0, 0))
p.Content.RestoreGraphicsState()
End Using
Next p
existingDoc.Save("watermarked-document.pdf")
End Using
Dieses Beispiel zeigt die Stärken von GemBox.Pdf in der PDF-Bearbeitung auf niedriger Ebene und demonstriert die Erstellung von Formularen, das Zeichnen von Grafiken und die Dokumentensicherheitsfunktionen. Während der Code ausführlicher ist als der HTML-Ansatz von IronPDF, bietet er die präzise Kontrolle über jeden Aspekt des PDFs.
Wie gehen diese Bibliotheken mit der Konvertierung von HTML in PDF um?
Der Ansatz zur HTML-zu-PDF-Konvertierung stellt einen der bedeutendsten Unterschiede zwischen IronPDF und GemBox.Pdf dar.
IronPDFs HTML-zu-PDF-Ansatz
IronPDF wurde von Grund auf mit dem Hauptfokus auf die HTML zu PDF-Konvertierung entwickelt. Die Bibliothek enthält eine vollständige Chrome-Rendering-Engine, die HTML, CSS und JavaScript genau so verarbeitet, wie es ein Webbrowser tun würde. Das bedeutet:
- Echtes Browser-Rendering: Nutzt dieselbe Blink-Engine wie Google Chrome
- Vollständige Unterstützung der Webstandards: Volle Unterstützung für CSS3, HTML5, Flexbox, Grid und modernes JavaScript
- Dynamischer Inhalt: Führt JavaScript vor dem Rendern aus und erfasst so AJAX-Inhalte und dynamische Elemente.
- Responsives Design: Unterstützt Media Queries und responsive Layouts
- Externe Ressourcen: Lädt automatisch Bilder, Stylesheets und Schriftarten von URLs ab
GemBox.Pdfs HTML-zu-PDF-Ansatz
GemBox.Pdf beinhaltet eingebaute HTML-zu-PDF-Konvertierung unter Nutzung einer Chromium-Rendering-Engine, die HTML5, CSS3 und JavaScript-Ausführung unterstützt. Konvertierung kann von lokalen Dateien, Live-URLs, HTML-Strings oder Streams über die ConversionOptions API durchgeführt werden.
IronPDF differenziert sich in diesem Bereich durch seine tiefe Chrome-V8-Integration und eine reichhaltigere Konfigurationsoberfläche — einschließlich benutzerdefinierter Kopf-/Fußzeilen, Seitennummerierungstoken, Druckhintergrundkontrollen, Renderverzögerungen for JavaScript-intensive Seiten und umfangreicheren Sicherheits-/Metadatenoptionen, die alle aus einer einzigen einheitlichen API zugänglich sind.
Moderne CSS-Framework-Unterstützung: Ein entscheidender Unterschied
Einer der bedeutendsten Vorteile von IronPDFs Chrome-basiertem Rendering wird sichtbar, wenn mit modernen CSS-Frameworks wie Bootstrap, Tailwind CSS und Foundation gearbeitet wird. Diese Frameworks sind das Rückgrat moderner Webanwendungen geworden, und ihre Fähigkeit, korrekt in PDFs dargestellt zu werden, ist für viele Anwendungsfälle unerlässlich.
IronPDF: Vollständige Unterstützung moderner Frameworks
IronPDFs Chrome-Rendering-Engine bietet vollständige, native Unterstützung für alle modernen CSS-Frameworks:
- Bootstrap 5: Volle Flexbox- und CSS-Grid-Unterstützung für responsive Layouts
- Tailwind CSS: Vollständige Unterstützung für Utility-First-CSS-Frameworks
- Beispiele aus der Praxis: Rendert die Bootstrap-Homepage und Bootstrap-Vorlagen pixelgenau.
- Moderne CSS3-Funktionen: Animationen, Transformationen, Übergänge, benutzerdefinierte Eigenschaften
- Responsive Designs: Media Queries und Viewport-basierte Layouts funktionieren nahtlos.
Code-Beispiel: Bootstrap-Formular zu PDF
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapForm = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container mt-5'>
<h1 class='mb-4'>Customer Registration</h1>
<form class='needs-validation'>
<div class='row g-3'>
<div class='col-md-6'>
<label class='form-label'>First Name</label>
<input type='text' class='form-control' value='John'>
</div>
<div class='col-md-6'>
<label class='form-label'>Last Name</label>
<input type='text' class='form-control' value='Smith'>
</div>
</div>
<div class='mt-4'>
<button class='btn btn-primary' type='submit'>Submit</button>
</div>
</form>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapForm);
pdf.SaveAs("bootstrap-form.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapForm = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container mt-5'>
<h1 class='mb-4'>Customer Registration</h1>
<form class='needs-validation'>
<div class='row g-3'>
<div class='col-md-6'>
<label class='form-label'>First Name</label>
<input type='text' class='form-control' value='John'>
</div>
<div class='col-md-6'>
<label class='form-label'>Last Name</label>
<input type='text' class='form-control' value='Smith'>
</div>
</div>
<div class='mt-4'>
<button class='btn btn-primary' type='submit'>Submit</button>
</div>
</form>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapForm);
pdf.SaveAs("bootstrap-form.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim bootstrapForm As String = "
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container mt-5'>
<h1 class='mb-4'>Customer Registration</h1>
<form class='needs-validation'>
<div class='row g-3'>
<div class='col-md-6'>
<label class='form-label'>First Name</label>
<input type='text' class='form-control' value='John'>
</div>
<div class='col-md-6'>
<label class='form-label'>Last Name</label>
<input type='text' class='form-control' value='Smith'>
</div>
</div>
<div class='mt-4'>
<button class='btn btn-primary' type='submit'>Submit</button>
</div>
</form>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapForm)
pdf.SaveAs("bootstrap-form.pdf")
GemBox.Pdf: Chromium-basierte Framework-Unterstützung
GemBox.Pdf verwendet eine Chromium-Engine für HTML-zu-PDF-Konvertierung, die grundlegende Unterstützung für HTML5 und CSS3 bietet. Moderne CSS-Frameworks, die auf üblichem Browser-Rendering basieren, sollten auf Engine-Ebene kompatibel sein.
Der Vorteil von IronPDF hier ist seine tief dokumentierte und getestete Unterstützung für Bootstrap, Tailwind CSS und andere Frameworks, mit expliziten Beispielen, Fehlerbehebungshandbüchern und Konfigurationsoptionen (wie Viewport-Einstellungen und Renderverzögerungen), die Teil der Kern-API-Oberfläche sind. IronPDF-Nutzer profitieren von umfassenden Community-Ressourcen und offizieller Anleitung für übliche Framework-spezifische Rendering-Szenarien.
Praxisrelevante Überlegung: Wenn Ihr Projekt eine feine Kontrolle darüber erfordert, wie Bootstrap- oder Tailwind-Layouts in PDF gerendert werden — einschließlich benutzerdefinierter Viewport-Größen, JavaScript-gesteuerter Inhalte oder dynamische Diagramm-Darstellung — bietet IronPDFs reichhaltigere Konfigurations-API und offizielle Framework-Leitfäden einen direkteren Weg zu Produktionsqualitätsergebnissen.
Für weitere Details zur Kompatibilität von CSS-Frameworks siehe den Bootstrap- & Flexbox-CSS-Leitfaden.
Welche Bibliothek eignet sich besonders gut für verschiedene PDF-Aufgaben?
Zu verstehen, wo jede Bibliothek glänzt, hilft Entwicklern, das richtige Werkzeug für ihre spezifischen Bedürfnisse zu wählen.
Wo IronPDF sich auszeichnet
IronPDF ist gut geeignet für diese Szenarien:
1. PDF-Erzeugung für Webanwendungen
Perfekt für SaaS-Anwendungen, Webportale und jedes System, das Webinhalte in PDF umwandeln muss. Die Chrome-Rendering-Engine stellt sicher, dass komplexe Weblayouts, einschließlich solcher, die Bootstrap, Tailwind CSS oder benutzerdefinierte Frameworks verwenden, perfekt dargestellt werden.
2. Dynamische Berichterstellung
Wenn Berichte Diagramme (Chart.js, D3.js), dynamische Datenvisualisierungen oder von JavaScript gerenderte Inhalte enthalten, erfasst IronPDF alles genau. Das macht es ideal für Geschäftsintelligenz-Dashboards und datengesteuerte Anwendungen.
3. Rechnungs- und Dokumentenvorlagen
Durch die Verwendung von HTML/CSS-Vorlagen für Rechnungen, Quittungen und Geschäftsdokumente können Designer Vorlagen erstellen, ohne PDF-spezifische APIs erlernen zu müssen. Änderungen können schnell mithilfe vertrauter Webtechnologien vorgenommen werden.
4. Schnelle Entwicklungsprojekte
Die einfache API und der HTML-basierte Ansatz verkürzen die Entwicklungszeit erheblich. Ein Entwickler kann ein komplexes PDF in Minuten statt Stunden erstellen.
5. Bereitstellung auf verschiedenen Plattformen
Mit nativer Unterstützung für Windows, Linux, macOS, Docker und Cloud-Plattformen vereinfacht IronPDF die Bereitstellung in unterschiedlichen Umgebungen.
Wo GemBox.Pdf sich auszeichnet
GemBox.Pdf zeigt seine Stärken in diesen Bereichen:
1. Manipulation von PDFs auf niedriger Ebene
Wenn eine präzise Kontrolle über die PDF-Struktur erforderlich ist, bietet der objektorientierte Ansatz von GemBox.Pdf direkten Zugriff auf PDF-Elemente, Streams und Wörterbücher.
2. Formularlastige Anwendungen
Für Anwendungen, die umfangreich mit PDF-Formularen arbeiten, bietet GemBox.Pdf umfassende Manipulationsmöglichkeiten für Formularfelder, einschließlich der programmatischen Erstellung komplexer interaktiver Formulare.
3. OCR-Anforderungen
Mit eingebauten OCR-Funktionen kann GemBox.Pdf Text aus gescannten Dokumenten extrahieren, ohne zusätzliche Bibliotheken zu benötigen, was es für die Digitalisierung von Dokumenten geeignet macht.
4. Mobile Entwicklung
Die native Unterstützung von Android- und iOS-Plattformen macht GemBox.Pdf zu einer guten Wahl für mobile Anwendungen, die PDF-Funktionalität benötigen.
5. Bestehende PDF-Modifikation
Beim primären Arbeiten mit bestehenden PDFs anstatt neuer Generierung sind die Tools von GemBox.Pdf zum Extrahieren, Bearbeiten und Bearbeiten gut für die Aufgabe geeignet.
Wie lassen sich Installation und Einrichtung vergleichen?
Beide Bibliotheken bieten eine einfache Installation über NuGet, allerdings mit unterschiedlichen Komplexitätsstufen.
Installation von IronPDF
Die Installation von IronPDF ist bemerkenswert einfach:
Install-Package IronPdf
Oder über die .NET CLI:
dotnet add package IronPdf
Das Paket enthält alles Notwendige, einschließlich der Chrome-Rendering-Engine. Für die meisten Anwendungsfälle ist keine zusätzliche Konfiguration oder Abhängigkeit erforderlich.
Für spezifische Bereitstellungsszenarien bietet IronPDF:
IronPdf.Slim: Leichtgewicht-Paket, das plattformspezifische Komponenten zur Laufzeit herunterlädtIronPdf.Linux: Vorkonfiguriert für Linux-BereitstellungenIronPdf.MacOs: Optimiert für macOS-Umgebungen
Installation von GemBox.Pdf
Die Installation von GemBox.Pdf ist für die grundlegende PDF-Bearbeitung ebenso einfach:
Install-Package GemBox.Pdf
Für die HTML zu PDF-Konvertierung benötigen Sie jedoch:
Install-Package GemBox.Document
Beide Bibliotheken erfordern die Konfiguration des Lizenzschlüssels:
// IronPDF
License.LicenseKey = "YOUR-LICENSE-KEY";
// GemBox.Pdf
ComponentInfo.SetLicense("YOUR-LICENSE-KEY");
// IronPDF
License.LicenseKey = "YOUR-LICENSE-KEY";
// GemBox.Pdf
ComponentInfo.SetLicense("YOUR-LICENSE-KEY");
' IronPDF
License.LicenseKey = "YOUR-LICENSE-KEY"
' GemBox.Pdf
ComponentInfo.SetLicense("YOUR-LICENSE-KEY")
Was sind die Unterschiede in der Lizenzierung und Preisgestaltung?
Das Verständnis der Lizenzierungsmodelle hilft dabei, die Gesamtkosten für jede Lösung zu bestimmen.
IronPDF-Lizenzierung
IronPDF bietet transparente, abgestufte Lizenzen (Preise ab April 2026):
-
Lite License: $999
- 1 Entwickler
- 1 Projekt
- 1 Jahr Support und Updates
-
Plus License: $1,499
- 3 Entwickler
- 3 Projekte
- 1 Jahr Support und Updates
- Professional License: $2,399
- 10 Entwickler
- 10 Projekte
- 1 Jahr Support und Updates
Zusatzoptionen:
- Gebührenfreie Weiterverbreitung: +$1,999
- SaaS/OEM-Lizenzierung verfügbar
- Iron Suite bundle: $2,998 for 10 products
Wichtigste Vorteile:
- 30-Tage-Geld-zurück-Garantie
- Unbefristete Lizenzen (Einmalkauf)
- Kostenlose Entwicklung und Testung
- Bereitstellung für Entwicklungs-/Staging-/Produktion
GemBox.Pdf Lizenzierung
GemBox bietet pro-Entwickler-Lizenzen (ab April 2026):
- Single Developer: $890
- 1 Entwickler
- Unbegrenzte Projekte
- 1 Jahr Support und Updates
- Lizenzgebührenfreie Bereitstellung inbegriffen
Wichtige Überlegungen:
- 40% Rabatt auf Verlängerungen (60% bei Verlängerung vor Ablauf)
- GemBox Bundle: $2,200 für 1 Entwickler (6 Produkte)
Wichtigste Vorteile:
- 30-Tage-Geld-zurück-Garantie
- Unbefristete Lizenzen
- Unbegrenzte Bereitstellung inbegriffen
- Keine Server- oder OEM-Lizenzen erforderlich
Kostenvergleich für gängige Szenarien
| Szenario | IronPDF Kosten | GemBox.Pdf Kosten |
|---|---|---|
| Einzelentwickler, HTML zu PDF | $999 | $890 |
| 3 Entwickler, nur PDF-Bearbeitung | $1,499 | $4,450 (bis zu 10 Entwickler) |
| 3 Entwickler, HTML zu PDF | $1,499 | $4,450 (bis zu 10 Entwickler) |
| Unternehmen (10 Entwickler), volle Funktionen | $2,399 | $4,450 |
Welche Bibliothek sollten Sie wählen?
Die Wahl zwischen IronPDF und GemBox.Pdf hängt von Ihren spezifischen Anforderungen ab:
Wählen Sie IronPDF, wenn:
- Fülle an HTML-zu-PDF-Konfiguration ist eine Priorität: IronPDF bietet eine umfassende API für Kopf-/Fußzeilen, JavaScript-Renderverzögerungen, Viewport-Einstellungen, PDF-Sicherheit und Metadaten — alles innerhalb einer einzigen einheitlichen Bibliothek
- Sie benötigen tief dokumentierte Framework-Integration: Offizielle Leitfäden und getestete Beispiele für Bootstrap, Tailwind CSS, Chart.js und andere Web-Frameworks
- Schnelle Entwicklung ist wichtig: Einfache, hochgradige API-Methoden wie
RenderHtmlAsPdf()verkürzen die Markteinführungszeit - Plattformübergreifende Bereitstellung ist erforderlich: Hervorragende Unterstützung für Cloud- und containerisierte Umgebungen, mit speziellen Linux- und macOS-Paketen
- Budget ist eine Überlegung: Niedrige Einstiegskosten und ein breites Funktionsangebot aus einer einzigen Bibliothek
Wählen Sie GemBox.Pdf wenn:
- Eine detaillierte PDF-Kontrolle ist unerlässlich: Direkter Zugriff auf PDF-Objekte und -Struktur
- Unterstützung der mobilen Plattform erforderlich: Native Android- und iOS-Kompatibilität
- OCR ist eine Kernanforderung: Integrierte OCR ohne zusätzliche Abhängigkeiten
- Sie arbeiten hauptsächlich mit bestehenden PDFs: Starke Bearbeitungs- und Extraktionsfunktionen
- Unbegrenzte Bereitstellung ist wichtig: Gebührenfreie Weiterverbreitung ohne zusätzliche Kosten enthalten
Die Verwendung beider Bibliotheken ist zu erwägen, wenn:
Einige Organisationen finden Wert darin, beide Bibliotheken für verschiedene Teile ihrer Anwendung zu nutzen:
- IronPDF für Berichtserstellung und HTML zu PDF-Konvertierung
- GemBox.Pdf für Formularverarbeitung und PDF-Bearbeitung
Einstieg in die Bibliothek Ihrer Wahl
Beide Bibliotheken bieten kostenlose Testversionen, um ihre Fähigkeiten zu bewerten:
Probieren Sie IronPDF aus.
- Installieren Sie das NuGet-Paket
- Kein Lizenzschlüssel für die Entwicklung nötig
- Wasserzeichen erscheinen in PDFs im Testmodus
- Vollzugriff auf Funktionen während der Evaluierung
Probieren Sie GemBox.Pdf aus.
- Installieren Sie das NuGet-Paket
- Verwenden Sie
ComponentInfo.SetLicense("FREE-LIMITED-KEY") - Auf 2 Seiten im kostenlosen Modus beschränkt
- Upgrade zur Beseitigung von Beschränkungen
Visuelle Installationsanleitung
Für Entwickler, die die grafische Benutzeroberfläche von Visual Studio bevorzugen, hier eine Schritt-für-Schritt-Anleitung zur Installation beider Bibliotheken:
Ein neues ASP.NET-Projekt erstellen
Der Neue-Projekt-Dialog von Visual Studio für die Erstellung einer ASP.NET-Webanwendung - die Grundlage für PDF-Generierungsprojekte
Die Auswahl von Webformularen als Projektvorlage - geeignet für sowohl IronPDF- als auch GemBox.Pdf-Implementierungen
Installation von PDF-Bibliotheken über NuGet
Klicken Sie mit der rechten Maustaste auf Ihr Projekt im Lösungs-Explorer, um den NuGet-Paketmanager für die Bibliotheksinstallation aufzurufen
Alternative Zugang zum NuGet-Paketmanager über das Projektmenü in Visual Studio
IronPDF über den NuGet-Paketmanager installieren - beachten Sie die umfassende Funktionsbeschreibung und die Download-Anzahl
Alternative Installationsmethoden
Die Webseite von IronPDF bietet direkte DLL-Downloads für Szenarien, in denen die NuGet-Installation nicht geeignet ist
Abschluss
Sowohl IronPDF als auch GemBox.Pdf sind hochwertige PDF-Bibliotheken für .NET-Entwickler, jede mit eigenen Stärken. Beide Bibliotheken beinhalten Chromium-basierte HTML-zu-PDF-Konvertierung; IronPDF unterscheidet sich durch eine reichere Konfigurations-API, tiefere Dokumentation für Web-Frameworks und einen breiteren Funktionsumfang innerhalb eines einzigen Pakets. GemBox.Pdf glänzt in der niedrigstufigen PDF-Manipulation, mobiler Plattformunterstützung und integriertem OCR — was es gut für Anwendungen geeignet macht, die genaue PDF-Strukturkontrolle erfordern.
Für Webentwickler und Teams, die moderne Anwendungen entwickeln und einen umfassend dokumentierten, hoch konfigurierbaren HTML-zu-PDF-Workflow wünschen, reduziert IronPDFs einheitliche API und breite Ökosystemunterstützung die Entwicklungszeit und -komplexität.
GemBox.Pdf bleibt jedoch eine solide Wahl für spezialisierte Szenarien, insbesondere für die mobile Entwicklung und Anwendungen, die sich auf die PDF-Formularverarbeitung oder OCR-Anforderungen konzentrieren.
Bereit, Ihre HTML-Inhalte in professionelle PDFs zu verwandeln? Starten Sie mit der kostenlosen Testversion von IronPDF und erleben Sie die Leistung von Chrome-Rendering in Ihren .NET-Anwendungen. Mit umfassender Dokumentation, umfassenden Codebeispielen und reaktionsschnellem Support erstellen Sie PDFs in Minuten, nicht Stunden.
Häufig gestellte Fragen
Wie kann ich HTML in PDF in C# konvertieren?
Sie können die RenderHtmlAsPdf-Methode von IronPDF verwenden, um HTML-Strings in PDFs zu konvertieren. Sie können auch HTML-Dateien mit RenderHtmlFileAsPdf in PDFs konvertieren.
Kann ich vorhandene PDF-Dateien mit diesen Bibliotheken manipulieren?
Ja, sowohl IronPDF als auch GemBox.Pdf können verwendet werden, um vorhandene PDF-Dateien zu manipulieren. IronPDF vereinfacht häufige Aufgaben wie das Zusammenführen, Aufteilen und Hinzufügen von Wasserzeichen. GemBox.Pdf bietet eine detailliertere Kontrolle über PDF-Objekte, was für komplexe Manipulationsaufgaben nützlich ist.
Was sind die Vorteile der Nutzung von IronPDF für die HTML-zu-PDF-Konvertierung?
IronPDF bietet überlegene Konvertierungsqualität von HTML zu PDF mit seiner Chrome V8-Rendering-Engine und erreicht über 98 % Browser-Treue. Es unterstützt moderne CSS3-, HTML5-, JavaScript-Ausführung, Web-Schriften und responsive Designs.
Welche Bibliothek ist kostengünstiger für ein kleines Entwicklungsteam?
Für ein 3-Entwickler-Team, das HTML-zu-PDF-Konvertierung benötigt, kostet IronPDF $1.499 für die Plus-Lizenz, während GemBox $5.340 für 3 GemBox.Pdf-Lizenzen und 3 GemBox.Document-Lizenzen kosten würde. IronPDF bietet deutlich besseren Wert für Teams.
Ist IronPDF geeignet für die Erzeugung von PDFs in großen Mengen?
Ja, IronPDF bietet hervorragende Leistung mit einer ungefähren HTML-zu-PDF-Rendering-Zeit von 125 ms, optimierter async/await-Unterstützung und effizienter Speichernutzung unter 10 MB. Es ist gut geeignet für die Erzeugung von web-basierten PDFs in großen Mengen.
Welche Art von Support ist bei IronPDF enthalten?
IronPDF umfasst 24/5 Ingenieur-Support mit direktem Zugang zum Entwicklungsteam und typischen Reaktionszeiten von 24-48 Stunden sowie umfassender Dokumentation und Codebeispielen.
Kann ich PDF/A-konforme Dokumente mit diesen Bibliotheken erstellen?
Ja, IronPDF kann PDF/A-konforme Dokumente mit einem einfachen Methodenaufruf wie SaveAsPdfA() generieren und unterstützt mehrere PDF/A-Versionen. GemBox.Pdf kann PDF/A-Dokumente lesen und die Konformität bei deren Modifikation beibehalten.
Sind diese Bibliotheken mit modernen .NET-Frameworks kompatibel?
Ja, beide Bibliotheken unterstützen moderne .NET-Versionen. IronPDF unterstützt .NET Framework 4.6.2+, .NET Core 3.1+ und .NET 5 bis 10. GemBox.Pdf unterstützt .NET Framework 3.5+, .NET Standard 2.0 und .NET 6+.
Welche Bibliothek ist für den Einsatz in der Cloud optimiert?
IronPDF ist für den Cloud-Einsatz optimiert mit spezifischer Unterstützung für Azure, AWS, Docker-Container und serverlose Umgebungen. Sein HTML-basierter Ansatz passt sich natürlich an Webanwendungen an, was es zur besseren Wahl für SaaS-Anwendungen macht.
Gibt es eine kostenlose Version für das Testen von IronPDF?
IronPDF bietet eine kostenlose Evaluationsoption, die unbegrenzte Entwicklung und Tests ohne Lizenzschlüssel ermöglicht, obwohl Wasserzeichen auf den Ausgaben erscheinen. Dies bietet genügend Funktionalität, um das Produkt vor dem Kauf zu bewerten.



