IronPDF vs PDFTron (Apryse): Der vollständige C# PDF-Bibliotheksvergleich für 2025
Suchen Sie die richtige PDF-Bibliothek für Ihr .NET-Projekt? Dieser umfassende Vergleich zwischen IronPDF und PDFTron (jetzt Apryse) analysiert Funktionen, Preise, Leistung und Entwicklererfahrung, um Ihnen bei einer fundierten Entscheidung zu helfen. Egal, ob Sie Webanwendungen, Desktop-Software oder Cloud-Dienste entwickeln, die Wahl des richtigen PDF-Toolkits kann Ihre Entwicklungsgeschwindigkeit und den Erfolg Ihres Projekts erheblich beeinflussen.
Zusammenfassung des Kurzvergleichs
| **Kategorie** | **Funktion/Aspekt** | **IronPDF** | **PDFTron (Apryse)** | **Schlüsselvorteil** |
|---|---|---|---|---|
| **Kernarchitektur** | Design-Philosophie | Einfachheit zuerst, Chrome V8-Engine | Unternehmensorientierter, benutzerdefinierter Motor | IronPDF: Schnellere Entwicklung |
| API-Komplexität | Einfache Methoden wie RenderHtmlAsPdf() | IronPDF: 70 % weniger Code | ||
| Lernkurve | typisch 1-2 Tage | typisch 1-2 Wochen | IronPDF: Schnellere Akzeptanz | |
| **Plattform-Unterstützung** | Plattformübergreifend | Native Unterstützung, einzelnes Paket | Mehrere Pakete/Module erforderlich | IronPDF: Einfachere Bereitstellung |
| .NET-Versionen | .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ | Ähnliche Unterstützung mit zusätzlichem Setup | Beides: Unterstützung moderner Frameworks | |
| **HTML zu PDF** | Rendering-Engine | Vollständige Chrome V8-Engine | Benutzerdefinierte Engine (über HTML2PDF-Modul) | IronPDF: 98%+ Browser-Treue |
| JavaScript-Unterstützung | Volle Unterstützung bei Rendering-Verzögerungen | Begrenzte Unterstützung | IronPDF: Bereit für dynamische Inhalte | |
| **MS Office Unterstützung** | DOCX to PDF | Eingebauter DocxToPdfRenderer | PDFTron: Bessere Office-Treue | |
| CAD-Unterstützung | Nicht verfügbar | DWG, DXF, DGN nach PDF | PDFTron: CAD-Workflows | |
| **Leistung** | HTML-Rendering-Geschwindigkeit | 0.8-1,2s typisch (Chrome-Engine) | 0.3-0,5s typisch (einfaches HTML) | PDFTron: Schneller für einfaches HTML |
| Speicherverwendung | 150-200MB (Chrome-Prozess) | 80-120 MB typisch | PDFTron: Geringerer Speicherbedarf | |
| **Licensing & Pricing** | Einstiegsstufe | Lite: $999 (1 dev, 1 project) | Kundenspezifisches Angebot (schätzungsweise $5.000-$10.000+) | IronPDF: Transparente Preisgestaltung |
| Enterprise | Professional: $2,999 (10 devs) | Kundenspezifisches Angebot (schätzungsweise $30.000+) | IronPDF: Bis zu 90 % Kostenersparnis | |
| **Unterstützung** | Inklusive Unterstützung | Ja, 24/5 technische Unterstützung | Variiert je nach Lizenzstufe | IronPDF: Unterstützung inklusive |
| **Best für** | Anwendungsfälle | Moderne Webanwendungen, HTML-Berichte, schnelle Entwicklung | Dokumentenlastige Arbeitsabläufe, CAD/Office-Konvertierung | Kontextabhängig |
Was sind IronPDF und PDFTron (Apryse)?
IronPDF Überblick
IronPDF ist eine umfassende .NET-PDF-Bibliothek, die Entwicklern die Erstellung, Bearbeitung und Manipulation von PDFs erleichtert. Auf einer Chrome-Rendering-Engine aufgebaut, ist es hervorragend im Konvertieren von HTML, CSS und JavaScript in pixelgenaue PDF-Dokumente. Das einfache API-Design der Bibliothek ermöglicht Entwicklern die Integration von PDF-Funktionen mit minimalem Codeaufwand, was sie ideal für Webanwendungen, Berichtssysteme und Dokumentenautomatisierung macht.
PDFTron (Apryse) Überblick
PDFTron, im Februar 2023 in Apryse umbenannt, ist ein unternehmenszentriertes PDF-SDK, das umfassende Dokumentenverarbeitungsmöglichkeiten bietet. Ursprünglich für komplexe Dokumentenworkflows entwickelt, bietet es robuste Unterstützung für verschiedene Dateiformate, einschließlich Microsoft Office, CAD-Zeichnungen und spezialisierter Dokumenttypen. PDFTron Systems Inc., ein global führendes Unternehmen in der Dokumentverarbeitungstechnologie, kündigte seine Umbenennung in Apryse an; um 13 Unternehmen, darunter iText, Windward, Eversign und mehr, zu vereinen.
Wie erstelle ich ein ASP.NET-Projekt für die PDF-Generierung?
Das Einrichten eines ASP.NET-Projekts zur PDF-Erzeugung erfordert die richtige Konfiguration, unabhängig davon, welche Bibliothek Sie wählen. Folgen Sie diesen Schritten, um eine Grundlage für die Integration von IronPDF oder PDFTron zu schaffen:
- Öffnen Sie Visual Studio 2022 oder später
- Klicken Sie auf 'Neues Projekt erstellen'
- Wählen Sie 'ASP.NET Core Web App' (.NET 6.0 oder später empfohlen)
- Wählen Sie Ihren Projektnamen und Speicherort
- Wählen Sie basierend auf Ihren Bedürfnissen 'Webanwendung (Model-View-Controller)' oder 'Web-API'
- Stellen Sie sicher, dass '.NET 8.0' oder später für optimale Kompatibilität ausgewählt ist
Visual Studios Dialogfeld Neues Projekt zeigt ASP.NET-Projekttemplates für die Integration der PDF-Bibliothek an
Für Web Forms-Anwendungen:
- Wählen Sie 'ASP.NET-Webanwendung (.NET Framework)'
- Wählen Sie 'Web Forms' aus den Template-Optionen
- Klicken Sie auf 'Erstellen', um die Projektstruktur zu generieren
Auswahl der Web Forms-Vorlage für traditionelle ASP.NET-Anwendungen mit PDF-Funktionen
Wie installiere ich IronPDF in meinem C#-Projekt?
IronPDF bietet mehrere Installationsmethoden für unterschiedliche Entwicklungsabläufe. In Visual Studio: Klicken Sie in der Projektmappe im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt und wählen Sie 'NuGet-Pakete verwalten...'. Dort suchen Sie einfach nach IronPDF und installieren die neueste Version.
Methode 1: Verwendung des Visual Studio Package Manager
Der einfachste Ansatz verwendet den integrierten NuGet-Paketmanager von Visual Studio:
- Rechtsklick auf Ihr Projekt im Solution Explorer
- Wählen Sie "NuGet-Pakete verwalten"
- Klicken Sie auf "Durchsuchen" und suchen Sie nach "IronPDF"
- Klicken Sie auf 'Installieren' beim IronPDF-Paket
Zugriff auf den NuGet-Paketmanager über den Projektmappen-Explorer von Visual Studio zur Installation von IronPDF
Alternativer Zugriff auf den NuGet-Paketmanager über das Projektmenü von Visual Studio
Installation von IronPDF über den NuGet-Paketmanager mit Versionsinformationen und Abhängigkeiten
Methode 2: Verwendung der Paketmanager-Konsole
Für Entwickler, die Befehlszeilentools bevorzugen:
# Open Package Manager Console in Visual Studio
# Tools > NuGet Package Manager > Package Manager Console
Install-Package IronPdf
# For specific version installation
Install-Package IronPdf -Version 2025.7.0
# Open Package Manager Console in Visual Studio
# Tools > NuGet Package Manager > Package Manager Console
Install-Package IronPdf
# For specific version installation
Install-Package IronPdf -Version 2025.7.0
Methode 3: Direkte Download-Installation
Für Umgebungen ohne Zugriff auf NuGet:
- Download von der offiziellen Seite von IronPDF
- Entpacken Sie die ZIP-Datei in Ihr Projektverzeichnis
- In Visual Studio: Rechtsklick auf 'Verweise' → 'Verweis hinzufügen'
- Navigieren Sie zu und wählen Sie
IronPdf.dllaus.
Methode 4: Verwendung von .NET CLI
Für Befehlszeilen-Enthusiasten und CI/CD-Pipelines:
# Navigate to your project directory
cd MyProject
# Install IronPDF
dotnet add package IronPdf
# Restore packages
dotnet restore
# Navigate to your project directory
cd MyProject
# Install IronPDF
dotnet add package IronPdf
# Restore packages
dotnet restore
Wie installiere ich PDFTron (Apryse) SDK?
Die Installation von PDFTron umfasst mehr Schritte aufgrund seiner modularen Architektur und Fokussierung auf Unternehmen. Der Prozess variiert je nach Zielplattform und benötigten Funktionen.
Voraussetzungen
- Visual Studio 2019 oder später
- .NET Desktop-Entwicklungslast
- Entwicklerwerkzeuge .NET Framework 4.5.1+
- PDFTron SDK herunterladen
Handbuch Integrationsschritte
-
SDK entpacken
# Example extraction path PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/# Example extraction path PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/SHELL -
Mit Lizenzschlüssel initialisieren
// Initialize PDFTron with your license key pdftron.PDFNet.Initialize("your-license-key-here"); // Note: Demo keys expire after evaluation period // Contact Apryse sales for production licenses// Initialize PDFTron with your license key pdftron.PDFNet.Initialize("your-license-key-here"); // Note: Demo keys expire after evaluation period // Contact Apryse sales for production licenses' Initialize PDFTron with your license key pdftron.PDFNet.Initialize("your-license-key-here") ' Note: Demo keys expire after evaluation period ' Contact Apryse sales for production licenses$vbLabelText $csharpLabel -
Erforderliche Bibliotheken kopieren
- Kopieren Sie den Ordner
Libaus dem OrdnerPDFNET_BASEin Ihr Projektverzeichnis - Fügen Sie Verweise sowohl auf
PDFNetLoader.dllals auch auf plattformspezifischePDFNet.dllhinzu.
- Kopieren Sie den Ordner
- Lokale Kopie-Eigenschaft konfigurieren
Setzen der Lokalen Kopie-Eigenschaft von PDFNet.dll auf False für die ordnungsgemäße Bereitstellung von PDFTron
-
App.config aktualisieren
<configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration><configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration>XML -
Post-Build-Events konfigurieren
xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Yxcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /YSHELL
NuGet Installation (Vereinfacht)
Für einen einfacheren Ansatz:
- Öffnen Sie den NuGet-Paketmanager
- Suchen Sie nach 'PDFTron.NET.x64' oder plattformspezifischem Paket
- Installieren Sie das passende Paket für Ihre Architektur
Installation von PDFTron über den NuGet-Paketmanager mit plattformspezifischen Paketen
PDFTron bietet eine größere Vielfalt von über 30 Anmerkungstypen im Vergleich zu ComPDFKits 10+ Typen. Dieses umfangreiche Feature-Set erfordert jedoch eine sorgfältige Modulauswahl während der Installation.
Wie konvertiere ich eine URL in PDF mit diesen Bibliotheken?
Beide Bibliotheken bieten URL-zu-PDF-Konvertierung, jedoch mit unterschiedlichen Ansätzen und Möglichkeiten. Untersuchen wir die Implementierungsdetails und Leistungscharakteristika jedes einzelnen.
URL zu PDF mit IronPDF
Die Chrome-Rendering-Engine von IronPDF bietet hervorragende Unterstützung für moderne Webstandards:
using IronPdf;
// Initialize the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer();
// Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 1000; // Wait for JS execution
// Handle authentication if needed
renderer.LoginCredentials = new ChromeHttpLoginCredentials() {
Username = "user@domain.com",
Password = "secure_password"
};
// Render URL to PDF with full browser capabilities
var pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/");
// Add metadata for document management
pdf.MetaData.Author = "Development Team";
pdf.MetaData.Title = "Website Export - " + DateTime.Now.ToString("yyyy-MM-dd");
// Save with compression
pdf.CompressImages(90);
pdf.SaveAs("website-export.pdf");
using IronPdf;
// Initialize the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer();
// Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 1000; // Wait for JS execution
// Handle authentication if needed
renderer.LoginCredentials = new ChromeHttpLoginCredentials() {
Username = "user@domain.com",
Password = "secure_password"
};
// Render URL to PDF with full browser capabilities
var pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/");
// Add metadata for document management
pdf.MetaData.Author = "Development Team";
pdf.MetaData.Title = "Website Export - " + DateTime.Now.ToString("yyyy-MM-dd");
// Save with compression
pdf.CompressImages(90);
pdf.SaveAs("website-export.pdf");
Imports IronPdf
' Initialize the Chrome renderer with advanced options
Private renderer = New ChromePdfRenderer()
' Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.RenderDelay = 1000 ' Wait for JS execution
' Handle authentication if needed
renderer.LoginCredentials = New ChromeHttpLoginCredentials() With {
.Username = "user@domain.com",
.Password = "secure_password"
}
' Render URL to PDF with full browser capabilities
Dim pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/")
' Add metadata for document management
pdf.MetaData.Author = "Development Team"
pdf.MetaData.Title = "Website Export - " & DateTime.Now.ToString("yyyy-MM-dd")
' Save with compression
pdf.CompressImages(90)
pdf.SaveAs("website-export.pdf")
Der Chrome-Renderer in IronPDF bewältigt komplexe Szenarien wie:
- Single-Page-Anwendungen (SPAs) mit umfangreichem JavaScript
- Responsives Design mit Medienabfragen
- Web-Schriften und externe Stylesheets
- AJAX-Inhaltsladen
- CSS-Animationen und Transitionen
Die Hauptentwicklungslinie von IronPDF unterstützt jetzt all dies: nuget.org/packages/IronPdf. Jüngste Leistungsverbesserungen haben insbesondere bei komplexen Webanwendungen die Rendering-Geschwindigkeit erheblich gesteigert.
URL zu PDF mit PDFTron (Apryse)
PDFTron benötigt das HTML2PDF-Modul zur Webinhaltskonvertierung:
using pdftron;
using pdftron.PDF;
using pdftron.SDF;
class UrlToPdfConverter
{
public static void ConvertUrlToPdf(string url, string outputPath)
{
// Initialize PDFTron with license
PDFNet.Initialize("your-license-key");
// Create a new PDF document
using (PDFDoc doc = new PDFDoc())
{
// Initialize HTML2PDF converter
HTML2PDF converter = new HTML2PDF();
// Configure conversion settings
HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
settings.SetPrintBackground(true);
settings.SetLoadImages(true);
// Set page dimensions
converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
converter.SetMargins(0.5, 0.5, 0.5, 0.5);
// Insert URL content
converter.InsertFromURL(url);
// Perform conversion
if (converter.Convert(doc))
{
// Save the resulting PDF
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
Console.WriteLine($"Successfully converted {url} to {outputPath}");
}
else
{
Console.WriteLine("Conversion failed");
}
}
}
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;
class UrlToPdfConverter
{
public static void ConvertUrlToPdf(string url, string outputPath)
{
// Initialize PDFTron with license
PDFNet.Initialize("your-license-key");
// Create a new PDF document
using (PDFDoc doc = new PDFDoc())
{
// Initialize HTML2PDF converter
HTML2PDF converter = new HTML2PDF();
// Configure conversion settings
HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
settings.SetPrintBackground(true);
settings.SetLoadImages(true);
// Set page dimensions
converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
converter.SetMargins(0.5, 0.5, 0.5, 0.5);
// Insert URL content
converter.InsertFromURL(url);
// Perform conversion
if (converter.Convert(doc))
{
// Save the resulting PDF
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
Console.WriteLine($"Successfully converted {url} to {outputPath}");
}
else
{
Console.WriteLine("Conversion failed");
}
}
}
}
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF
Friend Class UrlToPdfConverter
Public Shared Sub ConvertUrlToPdf(ByVal url As String, ByVal outputPath As String)
' Initialize PDFTron with license
PDFNet.Initialize("your-license-key")
' Create a new PDF document
Using doc As New PDFDoc()
' Initialize HTML2PDF converter
Dim converter As New HTML2PDF()
' Configure conversion settings
Dim settings As New HTML2PDF.WebPageSettings()
settings.SetPrintBackground(True)
settings.SetLoadImages(True)
' Set page dimensions
converter.SetPaperSize(PrinterMode.PaperSize.e_letter)
converter.SetMargins(0.5, 0.5, 0.5, 0.5)
' Insert URL content
converter.InsertFromURL(url)
' Perform conversion
If converter.Convert(doc) Then
' Save the resulting PDF
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
Console.WriteLine($"Successfully converted {url} to {outputPath}")
Else
Console.WriteLine("Conversion failed")
End If
End Using
End Sub
End Class
Wichtige Überlegungen zu PDFTron HTML2PDF:
- Das SDK von PDFTron orientiert sich an der Breite der Technologie (APIs, Funktionen) und dem Verteilungsumfang (externe oder interne Benutzer).
- Begrenzte JavaScript-Unterstützung im Vergleich zu Browser-Engines
- Möglicherweise zusätzliche Konfiguration für komplexe Layouts erforderlich
- Besser geeignet für einfachere HTML-Dokumente
Wie kann ich PDFs aus HTML-Strings erstellen?
Die Erstellung von PDFs aus HTML-Strings ist unerlässlich für die Generierung dynamischer Berichte, Rechnungen und Dokumente. Beide Bibliotheken behandeln dies unterschiedlich.
HTML String zu PDF mit IronPDF
IronPDF glänzt bei der Darstellung komplexer HTML mit voller CSS3- und JavaScript-Unterstützung:
using IronPdf;
using System.Text;
public class HtmlStringToPdfConverter
{
public static PdfDocument GenerateInvoice(InvoiceData data)
{
// Build dynamic HTML with modern CSS
var html = new StringBuilder();
html.Append(@"
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');
body {
font-family: 'Roboto', sans-serif;
margin: 0;
padding: 20px;
color: #333;
}
.invoice-header {
display: flex;
justify-content: space-between;
border-bottom: 2px solid #007bff;
padding-bottom: 20px;
margin-bottom: 30px;
}
.company-logo {
width: 150px;
height: auto;
}
.invoice-details {
text-align: right;
}
.invoice-number {
font-size: 24px;
font-weight: 700;
color: #007bff;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
th {
background-color: #f8f9fa;
padding: 12px;
text-align: left;
border-bottom: 2px solid #dee2e6;
}
td {
padding: 12px;
border-bottom: 1px solid #dee2e6;
}
.total-row {
font-weight: 700;
font-size: 18px;
background-color: #e9ecef;
}
@media print {
body { margin: 0; }
.no-print { display: none; }
}
</style>
</head>
<body>
");
// Add invoice header
html.Append($@"
<div class='invoice-header'>
<div>
<img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
<h2>{data.CompanyName}</h2>
<p>{data.CompanyAddress}</p>
</div>
<div class='invoice-details'>
<div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
<p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
<p>Due: {data.DueDate:yyyy-MM-dd}</p>
</div>
</div>
");
// Add line items table
html.Append(@"
<table>
<thead>
<tr>
<th>Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
");
foreach (var item in data.LineItems)
{
html.Append($@"
<tr>
<td>{item.Description}</td>
<td>{item.Quantity}</td>
<td>${item.UnitPrice:F2}</td>
<td>${item.Total:F2}</td>
</tr>
");
}
html.Append($@"
</tbody>
<tfoot>
<tr class='total-row'>
<td colspan='3'>Total</td>
<td>${data.Total:F2}</td>
</tr>
</tfoot>
</table>
</body>
</html>
");
// Configure renderer for optimal output
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
// Generate PDF with proper base path for assets
var pdf = renderer.RenderHtmlAsPdf(html.ToString());
// Add security if needed
pdf.SecuritySettings.UserPassword = data.CustomerEmail;
pdf.SecuritySettings.AllowUserPrinting = true;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
return pdf;
}
}
using IronPdf;
using System.Text;
public class HtmlStringToPdfConverter
{
public static PdfDocument GenerateInvoice(InvoiceData data)
{
// Build dynamic HTML with modern CSS
var html = new StringBuilder();
html.Append(@"
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');
body {
font-family: 'Roboto', sans-serif;
margin: 0;
padding: 20px;
color: #333;
}
.invoice-header {
display: flex;
justify-content: space-between;
border-bottom: 2px solid #007bff;
padding-bottom: 20px;
margin-bottom: 30px;
}
.company-logo {
width: 150px;
height: auto;
}
.invoice-details {
text-align: right;
}
.invoice-number {
font-size: 24px;
font-weight: 700;
color: #007bff;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
th {
background-color: #f8f9fa;
padding: 12px;
text-align: left;
border-bottom: 2px solid #dee2e6;
}
td {
padding: 12px;
border-bottom: 1px solid #dee2e6;
}
.total-row {
font-weight: 700;
font-size: 18px;
background-color: #e9ecef;
}
@media print {
body { margin: 0; }
.no-print { display: none; }
}
</style>
</head>
<body>
");
// Add invoice header
html.Append($@"
<div class='invoice-header'>
<div>
<img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
<h2>{data.CompanyName}</h2>
<p>{data.CompanyAddress}</p>
</div>
<div class='invoice-details'>
<div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
<p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
<p>Due: {data.DueDate:yyyy-MM-dd}</p>
</div>
</div>
");
// Add line items table
html.Append(@"
<table>
<thead>
<tr>
<th>Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
");
foreach (var item in data.LineItems)
{
html.Append($@"
<tr>
<td>{item.Description}</td>
<td>{item.Quantity}</td>
<td>${item.UnitPrice:F2}</td>
<td>${item.Total:F2}</td>
</tr>
");
}
html.Append($@"
</tbody>
<tfoot>
<tr class='total-row'>
<td colspan='3'>Total</td>
<td>${data.Total:F2}</td>
</tr>
</tfoot>
</table>
</body>
</html>
");
// Configure renderer for optimal output
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
// Generate PDF with proper base path for assets
var pdf = renderer.RenderHtmlAsPdf(html.ToString());
// Add security if needed
pdf.SecuritySettings.UserPassword = data.CustomerEmail;
pdf.SecuritySettings.AllowUserPrinting = true;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
return pdf;
}
}
Imports IronPdf
Imports System.Text
Public Class HtmlStringToPdfConverter
Public Shared Function GenerateInvoice(ByVal data As InvoiceData) As PdfDocument
' Build dynamic HTML with modern CSS
Dim html = New StringBuilder()
html.Append("
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');
body {
font-family: 'Roboto', sans-serif;
margin: 0;
padding: 20px;
color: #333;
}
.invoice-header {
display: flex;
justify-content: space-between;
border-bottom: 2px solid #007bff;
padding-bottom: 20px;
margin-bottom: 30px;
}
.company-logo {
width: 150px;
height: auto;
}
.invoice-details {
text-align: right;
}
.invoice-number {
font-size: 24px;
font-weight: 700;
color: #007bff;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
th {
background-color: #f8f9fa;
padding: 12px;
text-align: left;
border-bottom: 2px solid #dee2e6;
}
td {
padding: 12px;
border-bottom: 1px solid #dee2e6;
}
.total-row {
font-weight: 700;
font-size: 18px;
background-color: #e9ecef;
}
@media print {
body { margin: 0; }
.no-print { display: none; }
}
</style>
</head>
<body>
")
' Add invoice header
html.Append($"
<div class='invoice-header'>
<div>
<img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
<h2>{data.CompanyName}</h2>
<p>{data.CompanyAddress}</p>
</div>
<div class='invoice-details'>
<div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
<p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
<p>Due: {data.DueDate:yyyy-MM-dd}</p>
</div>
</div>
")
' Add line items table
html.Append("
<table>
<thead>
<tr>
<th>Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
")
For Each item In data.LineItems
html.Append($"
<tr>
<td>{item.Description}</td>
<td>{item.Quantity}</td>
<td>${item.UnitPrice:F2}</td>
<td>${item.Total:F2}</td>
</tr>
")
Next item
html.Append($"
</tbody>
<tfoot>
<tr class='total-row'>
<td colspan='3'>Total</td>
<td>${data.Total:F2}</td>
</tr>
</tfoot>
</table>
</body>
</html>
")
' Configure renderer for optimal output
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.CreatePdfFormsFromHtml = True
' Generate PDF with proper base path for assets
Dim pdf = renderer.RenderHtmlAsPdf(html.ToString())
' Add security if needed
pdf.SecuritySettings.UserPassword = data.CustomerEmail
pdf.SecuritySettings.AllowUserPrinting = True
pdf.SecuritySettings.AllowUserCopyPasteContent = False
Return pdf
End Function
End Class
Hauptvorteile der HTML-Darstellung von IronPDF:
- Volle CSS3-Unterstützung einschließlich Flexbox- und Grid-Layouts
- Google Fonts und Web-Schriftintegration
- JavaScript-Diagrammbibliotheken (Chart.js, D3.js) werden perfekt gerendert
- Unterstützung für responsives Design mit Ansichtssteuerung
- Base64-Bild-Einbettung für in sich geschlossene Dokumente
HTML String zu PDF mit PDFTron (Apryse)
Der Ansatz von PDFTron zur HTML-String-Konvertierung:
using pdftron;
using pdftron.PDF;
using pdftron.SDF;
public class PdfTronHtmlConverter
{
public static void ConvertHtmlString(string htmlContent, string outputPath)
{
PDFNet.Initialize("your-license-key");
using (PDFDoc doc = new PDFDoc())
{
// Create HTML2PDF converter instance
HTML2PDF converter = new HTML2PDF();
// Configure page settings
converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
converter.SetLandscape(false);
converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches);
// Enable images and backgrounds
HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
settings.SetPrintBackground(true);
settings.SetLoadImages(true);
settings.SetJavaScriptDelay(1000); // Limited JS support
// Insert HTML content
converter.InsertFromHtmlString(htmlContent);
// Convert to PDF
if (converter.Convert(doc))
{
// Post-processing options
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
}
}
}
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;
public class PdfTronHtmlConverter
{
public static void ConvertHtmlString(string htmlContent, string outputPath)
{
PDFNet.Initialize("your-license-key");
using (PDFDoc doc = new PDFDoc())
{
// Create HTML2PDF converter instance
HTML2PDF converter = new HTML2PDF();
// Configure page settings
converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
converter.SetLandscape(false);
converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches);
// Enable images and backgrounds
HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
settings.SetPrintBackground(true);
settings.SetLoadImages(true);
settings.SetJavaScriptDelay(1000); // Limited JS support
// Insert HTML content
converter.InsertFromHtmlString(htmlContent);
// Convert to PDF
if (converter.Convert(doc))
{
// Post-processing options
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
}
}
}
}
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF
Public Class PdfTronHtmlConverter
Public Shared Sub ConvertHtmlString(ByVal htmlContent As String, ByVal outputPath As String)
PDFNet.Initialize("your-license-key")
Using doc As New PDFDoc()
' Create HTML2PDF converter instance
Dim converter As New HTML2PDF()
' Configure page settings
converter.SetPaperSize(PrinterMode.PaperSize.e_letter)
converter.SetLandscape(False)
converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches)
' Enable images and backgrounds
Dim settings As New HTML2PDF.WebPageSettings()
settings.SetPrintBackground(True)
settings.SetLoadImages(True)
settings.SetJavaScriptDelay(1000) ' Limited JS support
' Insert HTML content
converter.InsertFromHtmlString(htmlContent)
' Convert to PDF
If converter.Convert(doc) Then
' Post-processing options
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
End If
End Using
End Sub
End Class
Einschränkungen der PDFTron HTML-Konvertierung:
- Grundlegende CSS-Unterstützung (keine erweiterten Layouts)
- Begrenzte JavaScript-Ausführung
- Schrifteinbettung erfordert zusätzliche Konfiguration
- Besser geeignet für einfache Dokumentlayouts
Wie kann ich ASPX-Seiten in PDF konvertieren?
Die Konvertierung von ASPX-Seiten in PDF ist eine häufige Anforderung für ASP.NET-Anwendungen. IronPDF bietet native Unterstützung, während PDFTron Workarounds benötigt.
ASPX zu PDF mit IronPDF
IronPDF bietet eine nahtlose ASPX-Konvertierung mit nur einer Codezeile:
using IronPdf;
public partial class InvoicePage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Render the current ASPX page as PDF on page load
if (Request.QueryString["pdf"] == "true")
{
// Configure PDF output options
AspxToPdf.RenderThisPageAsPdf(
AspxToPdf.FileBehavior.InBrowser,
"Invoice_" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");
}
}
protected void ExportToPdfButton_Click(object sender, EventArgs e)
{
// Advanced configuration for ASPX to PDF
IronPdf.AspxToPdf.RenderThisPageAsPdf(
IronPdf.AspxToPdf.FileBehavior.Attachment,
"Invoice.pdf",
new ChromePdfRenderOptions()
{
PaperSize = PdfPaperSize.A4,
MarginTop = 20,
MarginBottom = 20,
CssMediaType = PdfCssMediaType.Print,
EnableJavaScript = true,
CreatePdfFormsFromHtml = true,
FitToPaper = true
});
}
}
using IronPdf;
public partial class InvoicePage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Render the current ASPX page as PDF on page load
if (Request.QueryString["pdf"] == "true")
{
// Configure PDF output options
AspxToPdf.RenderThisPageAsPdf(
AspxToPdf.FileBehavior.InBrowser,
"Invoice_" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");
}
}
protected void ExportToPdfButton_Click(object sender, EventArgs e)
{
// Advanced configuration for ASPX to PDF
IronPdf.AspxToPdf.RenderThisPageAsPdf(
IronPdf.AspxToPdf.FileBehavior.Attachment,
"Invoice.pdf",
new ChromePdfRenderOptions()
{
PaperSize = PdfPaperSize.A4,
MarginTop = 20,
MarginBottom = 20,
CssMediaType = PdfCssMediaType.Print,
EnableJavaScript = true,
CreatePdfFormsFromHtml = true,
FitToPaper = true
});
}
}
Imports IronPdf
Partial Public Class InvoicePage
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
' Render the current ASPX page as PDF on page load
If Request.QueryString("pdf") = "true" Then
' Configure PDF output options
AspxToPdf.RenderThisPageAsPdf(AspxToPdf.FileBehavior.InBrowser, "Invoice_" & DateTime.Now.ToString("yyyyMMdd") & ".pdf")
End If
End Sub
Protected Sub ExportToPdfButton_Click(ByVal sender As Object, ByVal e As EventArgs)
' Advanced configuration for ASPX to PDF
IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.Attachment, "Invoice.pdf", New ChromePdfRenderOptions() With {
.PaperSize = PdfPaperSize.A4,
.MarginTop = 20,
.MarginBottom = 20,
.CssMediaType = PdfCssMediaType.Print,
.EnableJavaScript = True,
.CreatePdfFormsFromHtml = True,
.FitToPaper = True
})
End Sub
End Class
Für mehr Kontrolle über den Rendering-Prozess:
// In Global.asax.cs or Startup.cs
public static void ConfigureAspxToPdf()
{
// Set global defaults for all ASPX to PDF conversions
AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4;
AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = true;
AspxToPdf.GlobalSettings.EnableJavaScript = true;
AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen;
// Custom headers and footers
AspxToPdf.GlobalSettings.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
Height = 25
};
}
// In Global.asax.cs or Startup.cs
public static void ConfigureAspxToPdf()
{
// Set global defaults for all ASPX to PDF conversions
AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4;
AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = true;
AspxToPdf.GlobalSettings.EnableJavaScript = true;
AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen;
// Custom headers and footers
AspxToPdf.GlobalSettings.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
Height = 25
};
}
' In Global.asax.cs or Startup.cs
Public Shared Sub ConfigureAspxToPdf()
' Set global defaults for all ASPX to PDF conversions
AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4
AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = True
AspxToPdf.GlobalSettings.EnableJavaScript = True
AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen
' Custom headers and footers
AspxToPdf.GlobalSettings.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
.Height = 25
}
End Sub
Die ASPX-zu-PDF-Funktion von IronPDF bewahrt:
ViewStateund Formularwerte- Sitzungszustandsdaten
- CSS-Styling und Layouts
- JavaScript-gerenderte Inhalte
- Master-Seitenlayouts
ASPX-Alternative mit PDFTron
PDFTron bietet keine direkte ASPX-Unterstützung, es sind indirekte Ansätze erforderlich:
// Capture ASPX output as HTML, then convert
public void ConvertAspxWithPdfTron()
{
// Render ASPX to string first
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
// Render the page to HTML
this.RenderControl(hw);
string htmlContent = sw.ToString();
// Then use PDFTron's HTML2PDF
PDFNet.Initialize("your-license-key");
using (PDFDoc doc = new PDFDoc())
{
HTML2PDF converter = new HTML2PDF();
converter.InsertFromHtmlString(htmlContent);
converter.Convert(doc);
// Send to browser
byte[] pdfBytes = doc.Save(SDFDoc.SaveOptions.e_linearized);
Response.ContentType = "application/pdf";
Response.BinaryWrite(pdfBytes);
Response.End();
}
}
// Capture ASPX output as HTML, then convert
public void ConvertAspxWithPdfTron()
{
// Render ASPX to string first
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
// Render the page to HTML
this.RenderControl(hw);
string htmlContent = sw.ToString();
// Then use PDFTron's HTML2PDF
PDFNet.Initialize("your-license-key");
using (PDFDoc doc = new PDFDoc())
{
HTML2PDF converter = new HTML2PDF();
converter.InsertFromHtmlString(htmlContent);
converter.Convert(doc);
// Send to browser
byte[] pdfBytes = doc.Save(SDFDoc.SaveOptions.e_linearized);
Response.ContentType = "application/pdf";
Response.BinaryWrite(pdfBytes);
Response.End();
}
}
' Capture ASPX output as HTML, then convert
Public Sub ConvertAspxWithPdfTron()
' Render ASPX to string first
Dim sw As New StringWriter()
Dim hw As New HtmlTextWriter(sw)
' Render the page to HTML
Me.RenderControl(hw)
Dim htmlContent As String = sw.ToString()
' Then use PDFTron's HTML2PDF
PDFNet.Initialize("your-license-key")
Using doc As New PDFDoc()
Dim converter As New HTML2PDF()
converter.InsertFromHtmlString(htmlContent)
converter.Convert(doc)
' Send to browser
Dim pdfBytes() As Byte = doc.Save(SDFDoc.SaveOptions.e_linearized)
Response.ContentType = "application/pdf"
Response.BinaryWrite(pdfBytes)
Response.End()
End Using
End Sub
Wie konvertiere ich Bilder in PDF?
Die Bild-zu-PDF-Konvertierung ist unerlässlich für die Dokumentenarchivierung und Portfolioerstellung. Beide Bibliotheken bieten diese Funktionalität mit unterschiedlichen Ansätzen.
Bild zu PDF mit IronPDF
IronPDF bietet eine spezielle Klasse ImageToPdfConverter für die effiziente Stapelverarbeitung:
using IronPdf;
using System.IO;
using System.Linq;
public class ImagePdfGenerator
{
public static void CreatePhotoAlbum(string imageFolder, string outputPath)
{
// Get all supported image files
var supportedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" };
var imageFiles = Directory.GetFiles(imageFolder)
.Where(f => supportedExtensions.Contains(Path.GetExtension(f).ToLower()))
.OrderBy(f => f);
// Convert images to PDF with options
var pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage);
// Add metadata
pdf.MetaData.Title = "Photo Album";
pdf.MetaData.Author = "Photography Department";
pdf.MetaData.CreationDate = DateTime.Now;
// Apply compression for smaller file size
pdf.CompressImages(80); // 80% quality
// Save the PDF
pdf.SaveAs(outputPath);
}
public static void CreateThumbnailCatalog(List<ProductImage> images)
{
var renderer = new ChromePdfRenderer();
// Build HTML with image grid
var html = @"
<html>
<head>
<style>
.image-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
padding: 20px;
}
.image-item {
text-align: center;
}
.image-item img {
max-width: 100%;
height: 200px;
object-fit: cover;
border: 1px solid #ddd;
}
.image-caption {
margin-top: 10px;
font-size: 12px;
}
</style>
</head>
<body>
<h1>Product Catalog</h1>
<div class='image-grid'>";
foreach (var image in images)
{
html += $@"
<div class='image-item'>
<img src='data:image/jpeg;base64,{image.Base64Data}' />
<div class='image-caption'>{image.ProductName}</div>
</div>";
}
html += "</div></body></html>";
// Render with optimal settings for images
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("product-catalog.pdf");
}
}
using IronPdf;
using System.IO;
using System.Linq;
public class ImagePdfGenerator
{
public static void CreatePhotoAlbum(string imageFolder, string outputPath)
{
// Get all supported image files
var supportedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" };
var imageFiles = Directory.GetFiles(imageFolder)
.Where(f => supportedExtensions.Contains(Path.GetExtension(f).ToLower()))
.OrderBy(f => f);
// Convert images to PDF with options
var pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage);
// Add metadata
pdf.MetaData.Title = "Photo Album";
pdf.MetaData.Author = "Photography Department";
pdf.MetaData.CreationDate = DateTime.Now;
// Apply compression for smaller file size
pdf.CompressImages(80); // 80% quality
// Save the PDF
pdf.SaveAs(outputPath);
}
public static void CreateThumbnailCatalog(List<ProductImage> images)
{
var renderer = new ChromePdfRenderer();
// Build HTML with image grid
var html = @"
<html>
<head>
<style>
.image-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
padding: 20px;
}
.image-item {
text-align: center;
}
.image-item img {
max-width: 100%;
height: 200px;
object-fit: cover;
border: 1px solid #ddd;
}
.image-caption {
margin-top: 10px;
font-size: 12px;
}
</style>
</head>
<body>
<h1>Product Catalog</h1>
<div class='image-grid'>";
foreach (var image in images)
{
html += $@"
<div class='image-item'>
<img src='data:image/jpeg;base64,{image.Base64Data}' />
<div class='image-caption'>{image.ProductName}</div>
</div>";
}
html += "</div></body></html>";
// Render with optimal settings for images
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("product-catalog.pdf");
}
}
Imports IronPdf
Imports System.IO
Imports System.Linq
Public Class ImagePdfGenerator
Public Shared Sub CreatePhotoAlbum(ByVal imageFolder As String, ByVal outputPath As String)
' Get all supported image files
Dim supportedExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" }
Dim imageFiles = Directory.GetFiles(imageFolder).Where(Function(f) supportedExtensions.Contains(Path.GetExtension(f).ToLower())).OrderBy(Function(f) f)
' Convert images to PDF with options
Dim pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage)
' Add metadata
pdf.MetaData.Title = "Photo Album"
pdf.MetaData.Author = "Photography Department"
pdf.MetaData.CreationDate = DateTime.Now
' Apply compression for smaller file size
pdf.CompressImages(80) ' 80% quality
' Save the PDF
pdf.SaveAs(outputPath)
End Sub
Public Shared Sub CreateThumbnailCatalog(ByVal images As List(Of ProductImage))
Dim renderer = New ChromePdfRenderer()
' Build HTML with image grid
Dim html = "
<html>
<head>
<style>
.image-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
padding: 20px;
}
.image-item {
text-align: center;
}
.image-item img {
max-width: 100%;
height: 200px;
object-fit: cover;
border: 1px solid #ddd;
}
.image-caption {
margin-top: 10px;
font-size: 12px;
}
</style>
</head>
<body>
<h1>Product Catalog</h1>
<div class='image-grid'>"
For Each image In images
html &= $"
<div class='image-item'>
<img src='data:image/jpeg;base64,{image.Base64Data}' />
<div class='image-caption'>{image.ProductName}</div>
</div>"
Next image
html &= "</div></body></html>"
' Render with optimal settings for images
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("product-catalog.pdf")
End Sub
End Class
Erweiterte Bildverarbeitungsfunktionen:
- SVG- zu PDF-Konvertierung mit Erhaltung der Vektorqualität
- Batch-Verarbeitung mit Speicheroptimierung
- Anpassbare Größen- und Positionierungsoptionen
- Erhaltung der EXIF-Daten
Bild zu PDF mit PDFTron (Apryse)
PDFTron verwendet seine Conversion-API für die Bildverarbeitung:
using pdftron;
using pdftron.PDF;
using pdftron.SDF;
public class PdfTronImageConverter
{
public static void ConvertImageToPdf(string imagePath, string outputPath)
{
PDFNet.Initialize("your-license-key");
using (PDFDoc doc = new PDFDoc())
{
// Use Convert API for image to PDF
pdftron.PDF.Convert.ToPdf(doc, imagePath);
// Additional image processing
PageIterator itr = doc.GetPageIterator();
while (itr.HasNext())
{
Page page = itr.Current();
// Adjust page size to image
Rect crop_box = page.GetCropBox();
page.SetMediaBox(crop_box);
itr.Next();
}
// Save optimized PDF
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
}
}
public static void CreateMultiPageImagePdf(string[] imagePaths, string outputPath)
{
PDFNet.Initialize("your-license-key");
using (PDFDoc doc = new PDFDoc())
{
ElementBuilder builder = new ElementBuilder();
ElementWriter writer = new ElementWriter();
foreach (string imagePath in imagePaths)
{
// Create a new page for each image
Page page = doc.PageCreate();
writer.Begin(page);
// Add image to page
Image img = Image.Create(doc, imagePath);
Element element = builder.CreateImage(img, 0, 0, 612, 792);
writer.WritePlacedElement(element);
writer.End();
doc.PagePushBack(page);
}
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
}
}
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;
public class PdfTronImageConverter
{
public static void ConvertImageToPdf(string imagePath, string outputPath)
{
PDFNet.Initialize("your-license-key");
using (PDFDoc doc = new PDFDoc())
{
// Use Convert API for image to PDF
pdftron.PDF.Convert.ToPdf(doc, imagePath);
// Additional image processing
PageIterator itr = doc.GetPageIterator();
while (itr.HasNext())
{
Page page = itr.Current();
// Adjust page size to image
Rect crop_box = page.GetCropBox();
page.SetMediaBox(crop_box);
itr.Next();
}
// Save optimized PDF
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
}
}
public static void CreateMultiPageImagePdf(string[] imagePaths, string outputPath)
{
PDFNet.Initialize("your-license-key");
using (PDFDoc doc = new PDFDoc())
{
ElementBuilder builder = new ElementBuilder();
ElementWriter writer = new ElementWriter();
foreach (string imagePath in imagePaths)
{
// Create a new page for each image
Page page = doc.PageCreate();
writer.Begin(page);
// Add image to page
Image img = Image.Create(doc, imagePath);
Element element = builder.CreateImage(img, 0, 0, 612, 792);
writer.WritePlacedElement(element);
writer.End();
doc.PagePushBack(page);
}
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
}
}
}
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF
Public Class PdfTronImageConverter
Public Shared Sub ConvertImageToPdf(ByVal imagePath As String, ByVal outputPath As String)
PDFNet.Initialize("your-license-key")
Using doc As New PDFDoc()
' Use Convert API for image to PDF
pdftron.PDF.Convert.ToPdf(doc, imagePath)
' Additional image processing
Dim itr As PageIterator = doc.GetPageIterator()
Do While itr.HasNext()
Dim page As Page = itr.Current()
' Adjust page size to image
Dim crop_box As Rect = page.GetCropBox()
page.SetMediaBox(crop_box)
itr.Next()
Loop
' Save optimized PDF
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
End Using
End Sub
Public Shared Sub CreateMultiPageImagePdf(ByVal imagePaths() As String, ByVal outputPath As String)
PDFNet.Initialize("your-license-key")
Using doc As New PDFDoc()
Dim builder As New ElementBuilder()
Dim writer As New ElementWriter()
For Each imagePath As String In imagePaths
' Create a new page for each image
Dim page As Page = doc.PageCreate()
writer.Begin(page)
' Add image to page
Dim img As Image = Image.Create(doc, imagePath)
Dim element As Element = builder.CreateImage(img, 0, 0, 612, 792)
writer.WritePlacedElement(element)
writer.End()
doc.PagePushBack(page)
Next imagePath
doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
End Using
End Sub
End Class
Was sind die Lizenzierungsoptionen und Kosten?
Das Verständnis von Lizenzen ist entscheidend für Budgetierung und Compliance. Die beiden Bibliotheken haben sehr unterschiedliche Preismodelle.
IronPDF-Lizenzierung
IronPDF bietet 3 Preisversionen an, von $999 bis $2,999. Ein kostenloses Testen von IronPDF ist ebenfalls verfügbar. IronPDF bietet transparente, veröffentlichte Preise (Stand 2025):
Lizenzstufen:
-
Lite -Lizenz: $999
- 1 Entwickler
- 1 Standort
- 1 Projekt
- Ideal für einzelne Entwickler oder kleine Projekte
-
Plus -Lizenz: $1,499
- 3 Entwickler
- 3 Standorte
- 3 Projekte
- Perfekt für kleine Teams
- Professional : $2,999
- 10 Entwickler
- 10 Standorte
- 10 Projekte
-
Optimal für wachsende Teams
- Unbegrenzte Lizenz: Individuelle Preisgestaltung
- Unbegrenzte Entwickler
- Unbegrenzte Standorte
- Unbegrenzte Projekte
Zusatzoptionen:
- Lizenzfreie Weiterverbreitung: +$2,999 (einmalig)
- SaaS/OEM-Lizenzierung verfügbar
- Iron Suite-Bundle: 10 Produkte zum Preis von 2
Alle Teamlizenzen sind nicht übertragbar und die Weitergabe von Lizenzen außerhalb einer Organisation oder einer Agentur/Kundenbeziehung ist untersagt.
PDFTron (Apryse) Lizenzierung
Die Lizenzierung von PDFTron basiert auf Angeboten, ohne veröffentlichte Preisgestaltung. Basierend auf Nutzerfeedback und Branchenberichten:
Geschätzte Preisspannen:
- Kleines Unternehmen: 5.000 - 15.000 US-Dollar jährlich
- Großunternehmen: 30.000 - 100.000+ US-Dollar jährlich
- Zusätzliche Module erfordern separate Lizenzen
Preistransparenz ist bei PDFTRON ein großer Nachteil. Alles ist ein Add-on, das spezifische Lizenzbedingungen und Verträge erfordert. Benutzer berichten:
- Nach 6500 $ Investition in PDFTRON hat das Produkt nicht wie beworben funktioniert, was uns mit leeren Händen dastehen ließ.
- Komplexe Lizenzverhandlungen erforderlich
- Preisgestaltung pro Modul erhöht die Gesamtkosten
- Begrenzte Rückerstattungsrichtlinien
Hauptunterschiede:
- IronPDF: Dauerlizenzen, Einmalzahlung
- PDFTron: Oft abonnements- oder jährliche Gebühren
- IronPDF: Alle Funktionen sind in der Basislizenz enthalten
- PDFTron: Kernfunktionen mit kostenpflichtigen Add-ons
Wie werden die Support-Optionen verglichen?
Der Entwicklersupport kann die Projektzeitpläne entscheidend beeinflussen. Hier ist, wie jeder Anbieter den Kundensupport angeht.
IronPDF-Unterstützung
IronPDF enthält professionellen Support mit allen Lizenzen:
- 24/5-Engineering-Support per E-Mail
- Direkter Zugang zum Entwicklungsteam
- Typische Antwortzeit: 24-48 Stunden
- Umfassende Dokumentation
- Aktive Community-Foren
- Video-Tutorials und Codebeispiele
Die IronPDF-Bibliothek funktioniert in Azure WebApps, Functions und WebJobs. Es funktioniert in sowohl Linux- als auch Windows-Varianten, obwohl ich die Windows-Variant Functions und WebApps als erheblich besser getestet und einfacher zu installieren empfehlen würde.
PDFTron (Apryse) Unterstützung
Der Support von PDFTron variiert je nach Lizenzstufe:
- Die Kosten für PDFTron sind hoch. Die Bedeutung für unser Geschäft rechtfertigt die Kosten, aber es war definitiv ein Hindernis für uns, als wir dieses Produkt mit anderen PDF-Weblösungen verglichen haben.
- Forenbasierter Support für grundlegende Lizenzen
- Kostenpflichtige Supportpläne verfügbar
- Gelegentlich kann der Support mangelhaft sein und die Entwickler müssen sich selbst durchkämpfen.
- Antwortzeiten variieren nach Supportstufe
Was sind die Leistungsmerkmale?
Die Leistung beeinflusst die Benutzererfahrung und die Serverkosten. Untersuchen wir realistische Leistungsdaten.
IronPDF Leistung
Jüngste Verbesserungen haben die Leistung von IronPDF erheblich gesteigert:
// Optimized batch processing example
public async Task BatchConvertWithPerformanceMonitoring()
{
var renderer = new ChromePdfRenderer();
// Configure for performance
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.RenderDelay = 0; // No delay for static content
renderer.RenderingOptions.Timeout = 30; // 30 second timeout
// Enable parallel processing
var tasks = new List<Task<PdfDocument>>();
var urls = GetUrlsToConvert();
// Process in parallel with throttling
using (var semaphore = new SemaphoreSlim(4)) // Max 4 concurrent
{
foreach (var url in urls)
{
await semaphore.WaitAsync();
tasks.Add(Task.Run(async () =>
{
try
{
return await renderer.RenderUrlAsPdfAsync(url);
}
finally
{
semaphore.Release();
}
}));
}
var results = await Task.WhenAll(tasks);
// Merge results if needed
var merged = PdfDocument.Merge(results);
merged.SaveAs("batch-output.pdf");
}
}
// Optimized batch processing example
public async Task BatchConvertWithPerformanceMonitoring()
{
var renderer = new ChromePdfRenderer();
// Configure for performance
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.RenderDelay = 0; // No delay for static content
renderer.RenderingOptions.Timeout = 30; // 30 second timeout
// Enable parallel processing
var tasks = new List<Task<PdfDocument>>();
var urls = GetUrlsToConvert();
// Process in parallel with throttling
using (var semaphore = new SemaphoreSlim(4)) // Max 4 concurrent
{
foreach (var url in urls)
{
await semaphore.WaitAsync();
tasks.Add(Task.Run(async () =>
{
try
{
return await renderer.RenderUrlAsPdfAsync(url);
}
finally
{
semaphore.Release();
}
}));
}
var results = await Task.WhenAll(tasks);
// Merge results if needed
var merged = PdfDocument.Merge(results);
merged.SaveAs("batch-output.pdf");
}
}
' Optimized batch processing example
Public Async Function BatchConvertWithPerformanceMonitoring() As Task
Dim renderer = New ChromePdfRenderer()
' Configure for performance
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen
renderer.RenderingOptions.RenderDelay = 0 ' No delay for static content
renderer.RenderingOptions.Timeout = 30 ' 30 second timeout
' Enable parallel processing
Dim tasks = New List(Of Task(Of PdfDocument))()
Dim urls = GetUrlsToConvert()
' Process in parallel with throttling
Using semaphore = New SemaphoreSlim(4) ' Max 4 concurrent
For Each url In urls
Await semaphore.WaitAsync()
tasks.Add(Task.Run(Async Function()
Try
Return Await renderer.RenderUrlAsPdfAsync(url)
Finally
semaphore.Release()
End Try
End Function))
Next url
Dim results = Await Task.WhenAll(tasks)
' Merge results if needed
Dim merged = PdfDocument.Merge(results)
merged.SaveAs("batch-output.pdf")
End Using
End Function
Leistungsmessdaten aus Produktionsumgebungen:
- Einfaches HTML: 200-400ms
- Komplexes HTML mit CSS/JS: 800-1200ms
- IronPDF hat asynchrone Varianten von Render-Methoden wie hier dokumentiert IronPDF.com/examples/async. Die Verwendung von
Parallel.ForEacherwies sich in meinem Anwendungsfall als die leistungsstärkste Strategie für das Stapelrendering von HTML zu PDF.
PDFTron (Apryse) Leistung
PDFTron bietet im Allgemeinen schnellere Rohleistung bei einfachen Konvertierungen:
- Einfaches HTML: 100-300ms
- Office-Dokumente: 500-1000ms
- Geringerer Speicherverbrauch
- Besser für einfache Dokumente mit hohem Volumen
Allerdings berichten Benutzer von Problemen bei komplexen Szenarien:
- Fehler treten von Zeit zu Zeit auf. Manchmal ziemlich schwerwiegende, die wahrscheinlich im QA-Testing hätten gesehen werden sollen. Es kann eine Weile dauern, bis sie letztendlich behoben sind.
Modernes CSS-Framework und Bootstrap-Unterstützung
Da Unternehmensanwendungen zunehmend moderne CSS-Frameworks wie Bootstrap, Tailwind und Foundation übernehmen, wird die Fähigkeit, diese Frameworks genau in PDF zu konvertieren, zu einem kritischen Auswahlkriterium für PDF-Bibliotheken.
IronPDF: Vollständige Unterstützung des Chromium-basierten Frameworks
Die Chrome V8 Rendering-Engine von IronPDF bietet umfassende Unterstützung für alle modernen CSS-Frameworks und Webstandards:
- Bootstrap 5: Vollständige Flexbox- und CSS-Grid-Unterstützung mit allen responsiven Hilfsprogrammen
- Bootstrap 4: Volle Kompatibilität mit Kartenkomponenten, Navigationssystemen und Formularlayouts
- Tailwind CSS: Alle Utility-Klassen, responsiven Modifikatoren und JIT-Kompilierungsmuster
- Foundation: Vollständige Unterstützung für Grid-System und Komponentenbibliothek
- Modernes CSS3: Flexbox, CSS Grid, CSS-Variablen, Animationen, Transformationen und Übergänge
- JavaScript Frameworks: React, Vue, Angular – Komponentenrendering mit vollständiger Interaktivitätsunterstützung
Produktionsvalidierung: Die Bootstrap-Homepage und offizielle Vorlagen werden mit 98%+ Browser-Fidelity konvertiert.
Code-Beispiel: Unternehmens-Dashboard mit Datentabellen
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapDashboard = @"
<!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-fluid py-4'>
<div class='d-flex justify-content-between align-items-center mb-4'>
<h1>Sales Dashboard - Q1 2025</h1>
<span class='badge bg-success fs-5'>+15.3% YoY</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>Total Revenue</h6>
<h2 class='text-primary'>$1.2M</h2>
<small class='text-success'>↑ 12%</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>New Customers</h6>
<h2 class='text-info'>1,847</h2>
<small class='text-success'>↑ 8%</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>Avg Order Value</h6>
<h2 class='text-warning'>$649</h2>
<small class='text-danger'>↓ 3%</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>Conversion Rate</h6>
<h2 class='text-success'>3.2%</h2>
<small class='text-success'>↑ 0.4%</small>
</div>
</div>
</div>
</div>
<div class='card'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Top Products by Revenue</h5>
</div>
<div class='card-body p-0'>
<table class='table table-striped table-hover mb-0'>
<thead class='table-light'>
<tr>
<th>Product</th>
<th>Category</th>
<th>Units Sold</th>
<th class='text-end'>Revenue</th>
<th class='text-end'>Growth</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Professional License</strong></td>
<td><span class='badge bg-primary'>Software</span></td>
<td>1,234</td>
<td class='text-end'>$369,000</td>
<td class='text-end'><span class='badge bg-success'>+18%</span></td>
</tr>
<tr>
<td><strong>Plus License</strong></td>
<td><span class='badge bg-primary'>Software</span></td>
<td>2,891</td>
<td class='text-end'>$289,000</td>
<td class='text-end'><span class='badge bg-success'>+15%</span></td>
</tr>
<tr>
<td><strong>Support Package</strong></td>
<td><span class='badge bg-info'>Services</span></td>
<td>892</td>
<td class='text-end'>$178,000</td>
<td class='text-end'><span class='badge bg-success'>+22%</span></td>
</tr>
<tr>
<td><strong>Training Program</strong></td>
<td><span class='badge bg-info'>Services</span></td>
<td>456</td>
<td class='text-end'>$91,000</td>
<td class='text-end'><span class='badge bg-warning'>+5%</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapDashboard);
pdf.SaveAs("sales-dashboard.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapDashboard = @"
<!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-fluid py-4'>
<div class='d-flex justify-content-between align-items-center mb-4'>
<h1>Sales Dashboard - Q1 2025</h1>
<span class='badge bg-success fs-5'>+15.3% YoY</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>Total Revenue</h6>
<h2 class='text-primary'>$1.2M</h2>
<small class='text-success'>↑ 12%</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>New Customers</h6>
<h2 class='text-info'>1,847</h2>
<small class='text-success'>↑ 8%</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>Avg Order Value</h6>
<h2 class='text-warning'>$649</h2>
<small class='text-danger'>↓ 3%</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>Conversion Rate</h6>
<h2 class='text-success'>3.2%</h2>
<small class='text-success'>↑ 0.4%</small>
</div>
</div>
</div>
</div>
<div class='card'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Top Products by Revenue</h5>
</div>
<div class='card-body p-0'>
<table class='table table-striped table-hover mb-0'>
<thead class='table-light'>
<tr>
<th>Product</th>
<th>Category</th>
<th>Units Sold</th>
<th class='text-end'>Revenue</th>
<th class='text-end'>Growth</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Professional License</strong></td>
<td><span class='badge bg-primary'>Software</span></td>
<td>1,234</td>
<td class='text-end'>$369,000</td>
<td class='text-end'><span class='badge bg-success'>+18%</span></td>
</tr>
<tr>
<td><strong>Plus License</strong></td>
<td><span class='badge bg-primary'>Software</span></td>
<td>2,891</td>
<td class='text-end'>$289,000</td>
<td class='text-end'><span class='badge bg-success'>+15%</span></td>
</tr>
<tr>
<td><strong>Support Package</strong></td>
<td><span class='badge bg-info'>Services</span></td>
<td>892</td>
<td class='text-end'>$178,000</td>
<td class='text-end'><span class='badge bg-success'>+22%</span></td>
</tr>
<tr>
<td><strong>Training Program</strong></td>
<td><span class='badge bg-info'>Services</span></td>
<td>456</td>
<td class='text-end'>$91,000</td>
<td class='text-end'><span class='badge bg-warning'>+5%</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapDashboard);
pdf.SaveAs("sales-dashboard.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim bootstrapDashboard 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-fluid py-4'>
<div class='d-flex justify-content-between align-items-center mb-4'>
<h1>Sales Dashboard - Q1 2025</h1>
<span class='badge bg-success fs-5'>+15.3% YoY</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>Total Revenue</h6>
<h2 class='text-primary'>$1.2M</h2>
<small class='text-success'>↑ 12%</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>New Customers</h6>
<h2 class='text-info'>1,847</h2>
<small class='text-success'>↑ 8%</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>Avg Order Value</h6>
<h2 class='text-warning'>$649</h2>
<small class='text-danger'>↓ 3%</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center'>
<div class='card-body'>
<h6 class='text-muted'>Conversion Rate</h6>
<h2 class='text-success'>3.2%</h2>
<small class='text-success'>↑ 0.4%</small>
</div>
</div>
</div>
</div>
<div class='card'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Top Products by Revenue</h5>
</div>
<div class='card-body p-0'>
<table class='table table-striped table-hover mb-0'>
<thead class='table-light'>
<tr>
<th>Product</th>
<th>Category</th>
<th>Units Sold</th>
<th class='text-end'>Revenue</th>
<th class='text-end'>Growth</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Professional License</strong></td>
<td><span class='badge bg-primary'>Software</span></td>
<td>1,234</td>
<td class='text-end'>$369,000</td>
<td class='text-end'><span class='badge bg-success'>+18%</span></td>
</tr>
<tr>
<td><strong>Plus License</strong></td>
<td><span class='badge bg-primary'>Software</span></td>
<td>2,891</td>
<td class='text-end'>$289,000</td>
<td class='text-end'><span class='badge bg-success'>+15%</span></td>
</tr>
<tr>
<td><strong>Support Package</strong></td>
<td><span class='badge bg-info'>Services</span></td>
<td>892</td>
<td class='text-end'>$178,000</td>
<td class='text-end'><span class='badge bg-success'>+22%</span></td>
</tr>
<tr>
<td><strong>Training Program</strong></td>
<td><span class='badge bg-info'>Services</span></td>
<td>456</td>
<td class='text-end'>$91,000</td>
<td class='text-end'><span class='badge bg-warning'>+5%</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapDashboard)
pdf.SaveAs("sales-dashboard.pdf")
Ergebnis: Ein Professional Enterprise Dashboard mit Bootstrap Flexbox-Metrikkarten, responsivem Rasterlayout und gestalteten Datentabellen – alles in perfekter Wiedergabetreue im PDF dargestellt.
PDFTron (Apryse): HTML2PDF-Modul mit Framework-Einschränkungen
Die HTML-zu-PDF-Konvertierung von PDFTron wird über das HTML2PDF-Modul bereitgestellt, das eine benutzerdefinierte Render-Engine mit spezifischen Beschränkungen für moderne CSS-Frameworks verwendet:
- Eigene Engine: Nicht auf Chromium basierend, was bedeutet, dass die CSS3-Unterstützung selektiv und nicht umfassend ist.
- Flexbox-Unterstützung: Teilweise implementiert, Bootstrap 4/5 Flexbox-Layouts werden möglicherweise nicht korrekt dargestellt
- CSS Grid: Eingeschränkte Unterstützung für CSS Grid Layout-Spezifikationen
- JavaScript Einschränkungen: Begrenzte JavaScript Ausführung im Vergleich zu vollständigen Browser-Engines
- Bootstrap 3: Funktioniert im Allgemeinen besser als Bootstrap 4/5 aufgrund tabellenbasierter Layouts
- Framework-Tests erforderlich: Komplexe Bootstrap-Komponenten erfordern umfangreiche Tests und mögliche Workarounds.
Laut Entwicklerberichten stoßen PDFTron-Benutzer, die mit Bootstrap arbeiten, auf:
- Flexbox-basierte Navigationsleisten werden mit Ausrichtungsproblemen gerendert
- Kartendecks und Gitter-Systeme erfordern CSS-Anpassungen
- Responsives Utility wird im PDF-Ausgang nicht beachtet.
- Notwendigkeit, Bootstrap-Komponenten zu vereinfachen oder auf CSS zurückzugreifen
Für Enterprise ist zu beachten: Bei Anwendungen, die auf modernen Bootstrap-Versionen (4+) basieren, kann PDFTron einen erheblichen zusätzlichen Entwicklungsaufwand für die Durchführung von Layoutkonvertierungen erfordern, wodurch die anderen Leistungsvorteile möglicherweise zunichtegemacht werden. Der benutzerdefinierte Engine-Ansatz bedeutet, dass Sie nicht dieselbe Rendering-Fidelity wie ein echter Browser erhalten.
Für umfassende Unterstützung von Bootstrap-Frameworks und Testanleitungen siehe den Bootstrap & Flexbox CSS Guide.
Wann sollte ich die einzelnen Bibliotheken auswählen?
Die richtige Wahl zu treffen, hängt von Ihren spezifischen Anforderungen und Einschränkungen ab.
Wählen Sie IronPDF, wenn:
HTML/CSS-Treue ist entscheidend
- Moderne Webanwendungen mit komplexen Layouts
- Inhalt mit viel JavaScript
- Responsive Designs, die erhalten bleiben müssen
Schnelle Entwicklung hat Vorrang
- Einfaches API reduziert die Entwicklungsdauer
- Umfangreiche Codebeispiele
- Geringe Lernkurve
Budgettransparenz ist wichtig
- Veröffentlichte Preise ermöglichen genaue Budgetplanung
- Keine Überraschungskosten oder versteckte Gebühren
- Alle Funktionen sind in der Basislizenz enthalten
Sie benötigen bestimmte Funktionen
- ASPX-zu-PDF-Konvertierung
- Azure- und Cloud-Optimierung
- Umfassende HTML/CSS/JS-Unterstützung
Wählen Sie PDFTron (Apryse) wenn:
Dokumenten-Workflows im Enterprise
- Komplexe Formularverarbeitung mit XFA-Unterstützung
- CAD-Dateikonvertierungen (DWG, DXF)
- Erweiterte Handhabung von Office-Dokumenten
Leistung vor Funktionen
- Verarbeitung einfacher Dokumente mit hohem Volumen
- Geringere Speicheranforderungen
- Grundlegende HTML-Konvertierung
Spezialisierte Anforderungen
- Eingebaute Dokumentanzeigenkomponenten
- Umfangreiche Anmerkungstypen (30+)
- Integration in Altsysteme
Große Unternehmensumgebung
- Dedizierte Supportverträge
- Individuelle Funktionsentwicklung
- Konformitätszertifizierungen
Zusammenfassung und Schlussfolgerung
Sowohl IronPDF als auch PDFTron (Apryse) sind fähige PDF-Bibliotheken, aber sie bedienen unterschiedliche Marktsegmente und Anwendungsfälle.
IronPDF glänzt bei: PDFTron bleibt für Unternehmen mit spezifischen Anforderungen an CAD-Konvertierung, komplexe Formularverarbeitung oder beim Arbeiten mit älteren Dokumentformaten eine geeignete Option.
- Entwicklerfreundliches API-Design
- Transparente, erschwingliche Preisgestaltung
- Schnelle Anwendungsentwicklung
- Cloud- und containerisierte Bereitstellungen
PDFTron (Apryse)-Stärken umfassen:
- Unternehmensdokumenten-Workflows
- CAD- und spezialisierte Formatunterstützung
- Niedrigere Ressourcenverbrauch
- Umfangreiche Annotationsmöglichkeiten
- Kompatibilität mit Legacy-Systemen
Für die meisten .NET-Entwickler, die moderne Anwendungen entwickeln, bietet IronPDF die beste Kombination aus Funktionen, Benutzerfreundlichkeit und Wert. Die auf Chrome basierende Rendering-Engine sorgt für eine pixelgenaue HTML-zu-PDF-Konvertierung, während die einfache API die Entwicklung beschleunigt.
PDFTron bleibt für Unternehmen mit spezifischen Anforderungen an CAD-Konvertierung, komplexe Formularverarbeitung oder beim Arbeiten mit älteren Dokumentformaten eine viable Option. Jedoch können die fehlende Preistransparenz und die modulare Lizenzierungsstruktur die Gesamtkosten erheblich erhöhen.
Erste Schritte
IronPDF ausprobieren:
PDFTron erkunden:
- Evaluation anfordern
- Besuch des Entwicklerportals
Bewerten Sie beide Optionen gründlich für Ihre Anwendungsfälle, bevor Sie entscheiden. Berücksichtigen Sie neben den technischen Möglichkeiten auch Faktoren wie die langfristigen Kosten, die Qualität des Supports und die Roadmaps der Funktionen.
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.
Wie unterscheiden sich die Leistungen von IronPDF und PDFTron bei der Konvertierung von HTML zu PDF?
IronPDF bietet dank seiner Chrome-basierten Engine überlegenes Rendering für komplexe Webinhalte und bessere Unterstützung for JavaScript und CSS3. PDFTron ist zwar schneller bei einfachem HTML, kann jedoch komplexe Inhalte nicht so effektiv verarbeiten.
Welche Lizenzierungsoptionen gibt es für IronPDF und PDFTron?
IronPDF bietet transparente und unbefristete Lizenzen mit allen Funktionen ab $749. PDFTron hingegen erfordert maßgeschneiderte Angebote für die Lizenzierung, die von $5.000 bis zu über $100.000 jährlich reichen können.
Ist es möglich, ASPX-Seiten mit diesen Bibliotheken in PDF zu konvertieren?
Ja, IronPDF kann ASPX-Seiten mit der Methode AspxToPdf.RenderThisPageAsPdf in einer einzigen Codezeile in PDF konvertieren. PDFTron unterstützt die Konvertierung von ASPX-Seiten nicht direkt.
Welche Bibliothek ist besser für Cloud-Umgebungen wie Azure geeignet?
IronPDF ist für Cloud-Umgebungen, einschließlich Azure und AWS, optimiert und funktioniert nahtlos mit Functions und WebApps. PDFTron kann für eine optimale Cloud-Bereitstellung zusätzliche Konfigurationen erfordern.
Kann man ausfüllbare PDF-Formulare mit IronPDF oder PDFTron erstellen?
Ja, beide Bibliotheken unterstützen die Erstellung ausfüllbarer PDF-Formulare. IronPDF verwendet CreatePdfFormsFromHtml für die automatische Konvertierung von HTML-Formularen. PDFTron bietet umfangreiche Formularfeldtypen, erfordert jedoch eine komplexere Integration.
Welche Supportoptionen stehen Benutzern von IronPDF und PDFTron zur Verfügung?
IronPDF bietet 24/5 Ingenieursunterstützung mit direktem Entwicklerkontakt und einer typischen Antwortzeit von 24-48 Stunden. Die Supportoptionen von PDFTron variieren je nach Lizenzstufe, mit grundlegender Forumunterstützung und kostenpflichtiger direkter Unterstützung.
Wie vergleichen sich IronPDF und PDFTron bei der Handhabung von passwortgeschützten Websites?
IronPDF unterstützt die Authentifizierung über ChromeHttpLoginCredentials zur Handhabung von Anmeldeformularen und HTTP-Authentifizierung, während PDFTron für dieses Feature nur begrenzte Unterstützung bietet.



