Zum Fußzeileninhalt springen
PRODUKTVERGLEICHE

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: $799 (1 dev, 1 project) Kundenspezifisches Angebot (schätzungsweise $5.000-$10.000+) IronPDF: Transparente Preisgestaltung
Enterprise Professional: $2,399 (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:

  1. Öffnen Sie Visual Studio 2022 oder später
  2. Klicken Sie auf 'Neues Projekt erstellen'
  3. Wählen Sie 'ASP.NET Core Web App' (.NET 6.0 oder später empfohlen)
  4. Wählen Sie Ihren Projektnamen und Speicherort
  5. Wählen Sie basierend auf Ihren Bedürfnissen 'Webanwendung (Model-View-Controller)' oder 'Web-API'
  6. Stellen Sie sicher, dass '.NET 8.0' oder später für optimale Kompatibilität ausgewählt ist

Dialogfeld in Visual Studio zeigt die Auswahlmöglichkeit ASP.NET Core Web App an 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

Web Forms-Vorlagenauswahl im Projektassistenten von Visual Studio 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:

  1. Rechtsklick auf Ihr Projekt im Solution Explorer
  2. Wählen Sie "NuGet-Pakete verwalten"
  3. Klicken Sie auf "Durchsuchen" und suchen Sie nach "IronPDF"
  4. Klicken Sie auf 'Installieren' beim IronPDF-Paket

Kontextmenü im Projektmappen-Explorer zeigt die NuGet-Pakete verwalten-Option Zugriff auf den NuGet-Paketmanager über den Projektmappen-Explorer von Visual Studio zur Installation von IronPDF

Projektmenü in Visual Studio zeigt Optionen zur Paketverwaltung Alternativer Zugriff auf den NuGet-Paketmanager über das Projektmenü von Visual Studio

NuGet-Paketmanager-Oberfläche zeigt die Installation von IronPDF 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
SHELL

Methode 3: Direkte Download-Installation

Für Umgebungen ohne Zugriff auf NuGet:

  1. Download von der offiziellen Seite von IronPDF
  2. Entpacken Sie die ZIP-Datei in Ihr Projektverzeichnis
  3. In Visual Studio: Rechtsklick auf 'Verweise' → 'Verweis hinzufügen'
  4. Durchsuchen und auswählen IronPdf.dll

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
SHELL

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

  1. SDK entpacken

    # Example extraction path
    PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/
    # Example extraction path
    PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/
    SHELL
  2. 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
    $vbLabelText   $csharpLabel
  3. Erforderliche Bibliotheken kopieren

    • Kopieren Sie den Lib-Ordner von PDFNET_BASE in Ihr Projektverzeichnis
    • Verweise auf sowohl PDFNetLoader.dll als auch plattformspezifische PDFNet.dll hinzufügen
  4. Lokale Kopie-Eigenschaft konfigurieren

PDFTron Lokale Kopie-Eigenschaft in Visual Studio auf False gesetzt Setzen der Lokalen Kopie-Eigenschaft von PDFNet.dll auf False für die ordnungsgemäße Bereitstellung von PDFTron

  1. App.config aktualisieren

    <configuration>
       <runtime>
           <loadFromRemoteSources enabled="true" />
       </runtime>
    </configuration>
    <configuration>
       <runtime>
           <loadFromRemoteSources enabled="true" />
       </runtime>
    </configuration>
    XML
  2. Post-Build-Events konfigurieren

    xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Y
    xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Y
    SHELL

NuGet Installation (Vereinfacht)

Für einen einfacheren Ansatz:

  1. Öffnen Sie den NuGet-Paketmanager
  2. Suchen Sie nach 'PDFTron.NET.x64' oder plattformspezifischem Paket
  3. Installieren Sie das passende Paket für Ihre Architektur

PDFTron-Paketinstallationsoberfläche von NuGet 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");
$vbLabelText   $csharpLabel

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

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

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

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

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

Die ASPX-zu-PDF-Funktion von IronPDF bewahrt:

  • ViewState- und 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();
    }
}
$vbLabelText   $csharpLabel

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 dedizierte ImageToPdfConverter-Klasse für effizientes Batch-Processing:

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

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

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 hat 3 Preis-Editionen, von $799 bis $2,399. Ein kostenloses Testen von IronPDF ist ebenfalls verfügbar. IronPDF bietet transparente, veröffentlichte Preise (Stand 2025):

Lizenzstufen:

  • Lite-Lizenz: $799

    • 1 Entwickler
    • 1 Standort
    • 1 Projekt
    • Ideal für einzelne Entwickler oder kleine Projekte
  • Plus-Lizenz: $1,199

    • 3 Entwickler
    • 3 Standorte
    • 3 Projekte
    • Perfekt für kleine Teams
  • Berufslizenz: $2,399
    • 10 Entwickler
    • 10 Standorte
    • 10 Projekte
  • Optimal für wachsende Teams

  • Unbegrenzte Lizenz: Individuelle Preisgestaltung
    • Unbegrenzte Entwickler
    • Unbegrenzte Standorte
    • Unbegrenzte Projekte

Zusatzoptionen:

  • Lizensfreie Neuverteilung: +$2,399 (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:

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

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.ForEach war die leistungsstärkste Strategie für das Batch-Rendering von Html To PDF für meinen Anwendungsfall

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

Ergebnis: Ein professionelles 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 Unternehmen 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

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

Wählen Sie PDFTron (Apryse) wenn:

Dokumenten-Workflows im Unternehmen

  • 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:

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.

Starten Sie jetzt mit IronPDF.
green arrow pointer

Hinweis:PDFTron ist eine eingetragene Marke des jeweiligen Eigentümers. Diese Seite steht nicht in Verbindung, wird weder von PDFTron unterstützt noch gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Die Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich verfügbare Informationen zum Zeitpunkt des Schreibens wider.

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 für 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.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen