IronPDF vs PDFTron (Apryse): Kompleksowe porównanie bibliotek PDF C# na 2025 rok
Looking for the right PDF library for your .NET project? This comprehensive comparison between IronPDF and PDFTron (now Apryse) analyzes features, pricing, performance, and developer experience to help you make an informed decision. Whether you're building web applications, desktop software, or cloud services, choosing the right PDF toolkit can significantly impact your development speed and project success.
Quick Comparison Summary
| Category | Feature/Aspect | IronPDF | PDFTron (Apryse) | Key Advantage |
|---|---|---|---|---|
| Podstawowa architektura | Design Philosophy | Simplicity-first, Chrome V8 engine | Przedsiębiorstwo-focused, custom engine | IronPDF: Faster development |
| API Complexity | Simple methods like RenderHtmlAsPdf() | IronPDF: 70% less code | ||
| Krzywa uczenia się | Zazwyczaj 1–2 dni | Zazwyczaj 1–2 tygodnie | IronPDF: Quicker adoption | |
| Obsługa platform | Wieloplatformowe | Native support, single package | Multiple packages/modules required | IronPDF: Łatwiejsze wdrożenie |
| Wersje .NET | .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ | Similar support with additional setup | Both: Modern framework support | |
| HTML do PDF | Silnik renderujący | Pełny silnik Chrome V8 | Custom engine (via HTML2PDF module) | IronPDF: zgodność z przeglądarkami na poziomie ponad 98% |
| Obsługa JavaScript | Pełna obsługa opóźnień renderowania | Ograniczone wsparcie | IronPDF: Dynamic content ready | |
| Obsługa pakietu MS Office | DOCX do PDF | Wbudowany DocxToPdfRenderer | PDFTron: Lepsza wierność dokumentów Office | |
| Wsparcie CAD | Niedostępne | DWG, DXF, DGN do PDF | PDFTron: procesy CAD | |
| Wydajność | Szybkość renderowania HTML | Typowo 0,8–1,2 s (silnik Chrome) | Typowy czas: 0,3–0,5 s (prosty HTML) | PDFTron: Szybszy dla podstawowego HTML |
| Wykorzystanie pamięci | 150–200 MB (proces Chrome) | Zazwyczaj 80–120 MB | PDFTron: Mniejsze zużycie pamięci | |
| Licensing & Pricing | Entry Level | Lite: $799 (1 dev, 1 project) | Indywidualna wycena (szacunkowo 5 000–10 000 USD+) | IronPDF: Przejrzyste ceny |
| Przedsiębiorstwo | Professional: $2,399 (10 devs) | Indywidualna wycena (szacunkowo 30 000 USD+) | IronPDF: Oszczędność kosztów nawet do 90% | |
| Wsparcie | Wsparcie techniczne w cenie | Yes, 24/5 engineering support | Różni się w zależności od poziomu licencji | IronPDF: Wsparcie w cenie |
| Najlepsze dla | Przykłady zastosowań | Nowoczesne aplikacje internetowe, raporty HTML, szybkie tworzenie oprogramowania | Procesy wymagające dużej ilości dokumentów, konwersja plików CAD/Office | Context-dependent |
Czym są IronPDF i PDFTron (Apryse)?
Przegląd IronPDF
IronPDF to kompleksowa biblioteka .NET do obsługi plików PDF, która ułatwia programistom tworzenie, edycję i obróbkę plików PDF. Oparty na silniku renderującym Chrome, doskonale radzi sobie z konwersją HTML, CSS i JavaScript na dokumenty PDF o idealnej rozdzielczości. Prosta konstrukcja API biblioteki pozwala programistom na integrację funkcji PDF przy użyciu minimalnej ilości kodu, co czyni ją idealną do zastosowania w aplikacjach internetowych, systemach raportowania oraz automatyzacji dokumentów.
Przegląd PDFTron (Apryse)
PDFTron, przemianowany w lutym 2023 r. na Apryse, to SDK do obsługi plików PDF przeznaczony dla Przedsiębiorstwo, który zapewnia szerokie możliwości przetwarzania dokumentów. Pierwotnie opracowany z myślą o złożonych procesach obiegu dokumentów, oferuje solidną obsługę różnych formatów plików, w tym Microsoft Office, rysunków CAD i specjalistycznych typów dokumentów. PDFTron Systems Inc., światowy lider w dziedzinie technologii przetwarzania dokumentów, ogłosił zmianę nazwy na Apryse; zrzeszająca 13 firm, w tym iText, Windward, Eversign i inne.
Jak utworzyć projekt ASP.NET do generowania plików PDF?
Skonfigurowanie projektu ASP.NET do generowania plików PDF wymaga odpowiedniej konfiguracji, niezależnie od tego, którą bibliotekę wybierzesz. Wykonaj poniższe kroki, aby stworzyć podstawę do integracji z IronPDF lub PDFTron:
- Otwórz program Visual Studio 2022 lub nowszą wersję
- Kliknij "Utwórz nowy projekt"
- Wybierz "Aplikacja internetowa ASP.NET Core" (zalecane .NET Core 6.0 lub nowsze)
- Wybierz nazwę projektu i lokalizację
- Wybierz "Aplikacja internetowa (Model-View-Controller)" lub "Web API" w zależności od potrzeb
- Upewnij się, że wybrano wersję ".NET 8.0" lub nowszą, aby zapewnić optymalną kompatybilność
Okno dialogowe "Nowy projekt" programu Visual Studio wyświetlające szablony projektów ASP.NET do integracji biblioteki PDF
W przypadku aplikacji Web Forms:
- Wybierz "Aplikacja internetowa ASP.NET (.NET Framework)"
- Wybierz "Web Forms" spośród opcji szablonów
- Kliknij "Utwórz", aby wygenerować strukturę projektu
Wybór szablonu Web Forms dla tradycyjnych aplikacji ASP.NET z obsługą plików PDF
Jak zainstalować IronPDF w moim projekcie C#?
IronPDF oferuje wiele metod instalacji dostosowanych do różnych procesów programistycznych. W programie Visual Studio kliknij prawym przyciskiem myszy swój projekt w Eksploratorze rozwiązań i wybierz opcję "Zarządzaj pakietami NuGet...". Następnie wystarczy wyszukać IronPDF i zainstalować najnowszą wersję.
Metoda 1: Korzystanie z menedżera pakietów Visual Studio
Najprostszym podejściem jest użycie wbudowanego w Visual Studio menedżera pakietów NuGet:
- Kliknij prawym przyciskiem myszy swój projekt w Eksploratorze rozwiązań
- Wybierz "Zarządzaj pakietami NuGet"
- Click "Browse" and search for "IronPDF"
- Kliknij "Zainstaluj" w pakiecie IronPDF
Dostęp do menedżera pakietów NuGet za pośrednictwem Eksploratora rozwiązań programu Visual Studio w celu instalacji IronPDF
Alternatywny dostęp do menedżera pakietów NuGet poprzez menu Projekt w programie Visual Studio
Instalacja IronPDF za pomocą menedżera pakietów NuGet wraz z informacjami o wersji i zależnościach
Metoda 2: Korzystanie z konsoli menedżera pakietów
For developers who prefer command-line tools:
# 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
Metoda 3: Instalacja poprzez bezpośrednie pobranie
W środowiskach bez dostępu do NuGet:
- Pobierz z oficjalnej strony IronPDF
- Rozpakuj plik ZIP do katalogu projektu
- W programie Visual Studio kliknij prawym przyciskiem myszy "Odwołania" → "Dodaj odwołanie"
- Browse to and select
IronPdf.dll
Metoda 4: Korzystanie z .NET CLI
Dla entuzjastów wiersza poleceń i potoków CI/CD:
# 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
Jak zainstalować SDK PDFTron (Apryse)?
Instalacja PDFTron wymaga wykonania większej liczby kroków ze względu na jego modułową architekturę i ukierunkowanie na Przedsiębiorstwo. Proces różni się w zależności od platformy docelowej i wymaganych funkcji.
Wymagania wstępne
- Visual Studio 2019 lub nowsze
- Obciążenie związane z tworzeniem aplikacji desktopowych w środowisku .NET
- Narzędzia programistyczne .NET Framework 4.5.1+
- Pobierz PDFTron SDK
Ręczne kroki integracji
-
Wyodrębnij SDK
# Example extraction path PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/# Example extraction path PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/SHELL -
Inicjalizacja za pomocą klucza licencyjnego
// 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 -
Skopiuj wymagane biblioteki
- Copy the
Libfolder fromPDFNET_BASEto your project directory - Add references to both
PDFNetLoader.dlland platform-specificPDFNet.dll
- Copy the
- Skonfiguruj właściwość Copy Local
Ustawienie właściwości Copy Local biblioteki PDFNet.dll na False w celu prawidłowego wdrożenia PDFTron
-
Zaktualizuj plik App.config
<configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration><configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration>XML -
Konfiguracja zdarzeń po kompilacji
xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Yxcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /YSHELL
Instalacja NuGet (uproszczona)
Aby uzyskać bardziej zwięzłe podejście:
- Otwórz menedżera pakietów NuGet
- Wyszukaj "PDFTron.NET.x64" lub pakiet przeznaczony dla konkretnej platformy
- Zainstaluj odpowiedni pakiet dla swojej architektury
Instalacja PDFTron za pomocą menedżera pakietów NuGet z pakietami specyficznymi dla platformy
PDFTron oferuje szerszy wybór ponad 30 typów adnotacji w porównaniu z ponad 10 typami dostępnymi w ComPDFKit. Jednak ten rozbudowany zestaw funkcji wymaga starannego doboru modułów podczas instalacji.
Jak przekonwertować adres URL na plik PDF przy użyciu tych bibliotek?
Obie biblioteki umożliwiają konwersję adresów URL do formatu PDF, ale mają różne podejścia i możliwości. Przyjrzyjmy się szczegółom implementacji i charakterystyce wydajnościowej każdego z nich.
URL do pliku PDF za pomocą IronPDF
Silnik renderujący IronPDF dla przeglądarki Chrome zapewnia wyjątkową obsługę nowoczesnych standardów internetowych:
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")
Renderer Chrome w IronPDF obsługuje złożone scenariusze, w tym:
- Aplikacje jednostronicowe (SPA) z intensywnym wykorzystaniem JavaScript
- Responsywne projekty z wykorzystaniem zapytań o media
- Czcionki internetowe i zewnętrzne arkusze stylów
- Ładowanie treści AJAX
- Animacje i przejścia CSS
Główna gałąź IronPDF obsługuje teraz wszystkie te funkcje: nuget.org/packages/IronPdf. Ostatnie ulepszenia wydajności znacznie zwiększyły szybkość renderowania, zwłaszcza w przypadku złożonych aplikacji internetowych.
URL do pliku PDF za pomocą PDFTron (Apryse)
PDFTron wymaga modułu HTML2PDF do konwersji treści internetowych:
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
Ważne uwagi dotyczące PDFTron HTML2PDF:
- Wycena pakietu SDK firmy PDFTron opiera się na zakresie technologii (interfejsy API, funkcje) oraz zasięgu dystrybucji (użytkownicy zewnętrzni lub wewnętrzni).
- Ograniczona obsługa JavaScript w porównaniu z silnikami przeglądarek
- Może wymagać dodatkowej konfiguracji w przypadku złożonych układów
- Bardziej odpowiednie dla prostszych dokumentów HTML
Jak tworzyć pliki PDF z ciągów znaków HTML?
Tworzenie plików PDF na podstawie ciągów znaków HTML jest niezbędne do generowania dynamicznych raportów, faktur i dokumentów. Obie biblioteki obsługują to w różny sposób.
Przekształcanie ciągów znaków HTML do formatu PDF za pomocą IronPDF
IronPDF doskonale radzi sobie z renderowaniem złożonego kodu HTML z pełną obsługą CSS3 i JavaScript:
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
Główne zalety renderowania HTML w IronPDF:
- Pełna obsługa CSS3, w tym układy flexbox i grid
- Google Fonts i integracja czcionek internetowych
- Biblioteki wykresów JavaScript (Chart.js, D3.js) renderują się idealnie
- Obsługa responsywnego projektowania z kontrolą okna wyświetlania
- Osadzanie obrazów w formacie Base64 w dokumentach samodzielnych
Przekształcanie ciągów znaków HTML do formatu PDF za pomocą PDFTron (Apryse)
Podejście PDFTron do konwersji ciągów znaków HTML:
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
Ograniczenia PDFTron HTML, które należy wziąć pod uwagę:
- Podstawowa obsługa CSS (bez zaawansowanych układów)
- Ograniczone wykonywanie kodu JavaScript
- Osadzanie czcionek wymaga dodatkowej konfiguracji
- Bardziej odpowiednie dla prostych układów dokumentów
Jak mogę przekonwertować strony ASPX do formatu PDF?
Konwersja stron ASPX do formatu PDF jest częstym wymaganiem w aplikacjach ASP.NET. IronPDF zapewnia natywną obsługę, podczas gdy PDFTron wymaga zastosowania rozwiązań alternatywnych.
ASPX do PDF z IronPDF
IronPDF oferuje płynną konwersję ASPX za pomocą jednej linii kodu:
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
Aby uzyskać większą kontrolę nad procesem renderowania:
// 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
Funkcja ASPX do PDF firmy IronPDF zachowuje:
ViewStateand form values- Dane stanu sesji
- Stylizacja CSS i układy
- Treści renderowane w JavaScript
- Układy stron głównych
Alternatywa dla ASPX z PDFTron
PDFTron nie oferuje bezpośredniej obsługi ASPX, co wymaga zastosowania metod pośrednich:
// 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
How Do I Convert Images to PDF?
Konwersja obrazów do formatu PDF jest niezbędna do archiwizacji dokumentów i tworzenia portfolio. Obie biblioteki oferują tę funkcjonalność, stosując różne podejścia.
Obraz do pliku PDF za pomocą IronPDF
IronPDF provides a dedicated ImageToPdfConverter class for efficient 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");
}
}
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
Zaawansowane funkcje obsługi obrazów:
- Konwersja SVG do PDF z zachowaniem jakości wektorowej
- Przetwarzanie wsadowe z optymalizacją pamięci
- Opcje dostosowywania rozmiaru i położenia
- Zachowanie danych EXIF
Obraz do PDF za pomocą PDFTron (Apryse)
PDFTron wykorzystuje swoje API konwersji do obsługi obrazów:
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
Jakie są opcje licencyjne i koszty?
Zrozumienie zasad licencjonowania ma kluczowe znaczenie dla planowania budżetu i zapewnienia zgodności z przepisami. Te dwie biblioteki mają zupełnie różne modele cenowe.
Licencjonowanie IronPDF
IronPDF has 3 pricing edition(s), from $799 to $2,399. Dostępna jest również bezpłatna wersja próbna IronPDF. IronPDF oferuje przejrzyste, opublikowane ceny (stan na 2025 r.):
Poziomy licencji:
-
Lite License: $799
- 1 programista
- 1 lokalizacja
- 1 project
- Idealne rozwiązanie dla indywidualnych programistów lub małych projektów
-
Plus License: $1,199
- 3 programistów
- 3 lokalizacje
- 3 projekty
- Idealne rozwiązanie dla małych zespołów
-
Professional License: $2,399
- 10 programistów
- 10 lokalizacji
- 10 projektów
- Najlepsze rozwiązanie dla rozwijających się zespołów
- Unlimited License: indywidualna wycena
- Nieograniczona liczba programistów
- Nieograniczona liczba lokalizacji
- Nieograniczona liczba projektów
Dodatkowe opcje:
- Royalty-Free Redistribution: +$2,399 (one-time)
- Dostępne licencje SaaS/Licencjonowanie OEM
- Pakiet Iron Suite: 10 produktów w cenie 2
All Team Licenses are non-transferable, and sharing of licenses outside an organization or agency/client relationship is prohibited.
Licencjonowanie PDFTron (Apryse)
Licencjonowanie PDFTron odbywa się na podstawie wyceny, bez opublikowanych cen. Na podstawie opinii użytkowników i raportów branżowych:
Szacunkowe przedziały cenowe:
- Małe przedsiębiorstwa: 5 000–15 000 USD rocznie
- Przedsiębiorstwo: 30 000–100 000 USD rocznie
- Dodatkowe moduły wymagają oddzielnych licencji
Przejrzystość cen to duża wada PDFTRON. Wszystko to są dodatki, wymagające określonych warunków licencyjnych i umów. Użytkownicy zgłaszają:
- Po zainwestowaniu 6500 dolarów w PDFTRON ich produkt po prostu nie działał tak, jak reklamowano, pozostawiając nas z niczym i całym bałaganem do uporządkowania w naszym produkcie.
- Wymagane są złożone negocjacje licencyjne
- Ceny za moduł zwiększają całkowity koszt
- Ograniczone zasady zwrotu kosztów
Kluczowe różnice:
- IronPDF: Licencje wieczyste, płatność jednorazowa
- PDFTron: Często oparty na subskrypcji lub opłatach rocznych
- IronPDF: Wszystkie funkcje zawarte w licencji podstawowej
- PDFTron: Podstawowe funkcje z płatnymi dodatkami
Jak wypadają opcje wsparcia w porównaniu?
Wsparcie dla programistów może zadecydować o sukcesie lub porażce projektu. Oto, jak poszczególni dostawcy podchodzą do kwestii pomocy dla klientów.
Wsparcie techniczne IronPDF
IronPDF zapewnia profesjonalne wsparcie techniczne dla wszystkich licencji:
- Wsparcie techniczne przez e-mail 24 godziny na dobę, 5 dni w tygodniu
- Direct access to development team
- Typowy czas realizacji: 24–48 godzin
- Kompleksowa dokumentacja
- Active community forums
- Video tutorials and code examples
The IronPDF library works in Azure WebApps, Functions and WebJobs. It works in both Linux and Windows variants, although I would recommend Windows variant Functions and WebApps as significantly better tested and easier to install.
PDFTron (Apryse) Support
PDFTron's support varies by license tier:
- The cost of PDFTron is high. The importance to our business justifies the cost, but it was definitely a hurdle for us when comparing this product to other PDF web solutions.
- Forum-based support for basic licenses
- Paid support plans available
- Occasionally support can be lacking and the developers are left to struggle through it themselves.
- Response times vary by support tier
What Are the Performance Characteristics?
Performance impacts user experience and server costs. Let's examine real-world performance data.
IronPDF Performance
Recent improvements have enhanced IronPDF's performance significantly:
// 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
Performance metrics from production environments:
- Simple HTML: 200-400ms
- Complex HTML with CSS/JS: 800-1200ms
- IronPDF does have Async variants of render methods such as documented here ironpdf.com/examples/async. Using
Parallel.ForEachwas the highest performing strategy for batch rendering Html To PDF for my use case
PDFTron (Apryse) Performance
PDFTron generally offers faster raw performance for simple conversions:
- Basic HTML: 100-300ms
- Office documents: 500-1000ms
- Lower memory footprint
- Better for high-volume simple documents
However, users report issues with complex scenarios:
- Bugs do crop up from time to time. Sometimes pretty detrimental ones that should have probably been seen in QA testing. It can take a while for them to eventually get fixed.
Modern CSS Framework and Bootstrap Support
As enterprise applications increasingly adopt modern CSS frameworks like Bootstrap, Tailwind, and Foundation, the ability to accurately convert these frameworks to PDF becomes a critical selection criterion for PDF libraries.
IronPDF: Full Chromium-Based Framework Support
IronPDF's Chrome V8 rendering engine provides comprehensive support for all modern CSS frameworks and web standards:
- Bootstrap 5: Complete flexbox and CSS Grid support with all responsive utilities
- Bootstrap 4: Full compatibility with card components, navigation systems, and form layouts
- Tailwind CSS: All utility classes, responsive modifiers, and JIT compilation patterns
- Foundation: Complete grid system and component library support
- Modern CSS3: Flexbox, CSS Grid, CSS variables, animations, transforms, and transitions
- JavaScript Frameworks: React, Vue, Angular component rendering with full interactivity support
Production validation: The Bootstrap homepage and official templates convert with 98%+ browser fidelity.
Code Example: Przedsiębiorstwo Dashboard with Data Tables
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")
Output: A professional enterprise dashboard with Bootstrap's flexbox metrics cards, responsive grid layout, and styled data tables—all rendered with perfect fidelity in the PDF.
PDFTron (Apryse): HTML2PDF Module with Framework Limitations
PDFTron's HTML-to-PDF conversion is provided through the HTML2PDF module, which uses a custom rendering engine with specific limitations for modern CSS frameworks:
- Custom Engine: Not Chromium-based, which means CSS3 support is selective rather than comprehensive
- Flexbox Support: Partial implementation, Bootstrap 4/5 flexbox layouts may not render correctly
- CSS Grid: Ograniczone wsparcie for CSS Grid Layout specifications
- JavaScript Limitations: Limited JavaScript execution compared to full browser engines
- Bootstrap 3: Generally works better than Bootstrap 4/5 due to table-based layouts
- Framework Testing Required: Complex Bootstrap components need extensive testing and potential workarounds
According to developer reports, PDFTron users working with Bootstrap encounter:
- Flexbox-based navigation bars rendering with alignment issues
- Card decks and grid systems requiring CSS adjustments
- Responsive utilities not being honored in PDF output
- Need to simplify Bootstrap components or use fallback CSS
Przedsiębiorstwo consideration: For applications built on modern Bootstrap versions (4+), PDFTron may require significant additional development effort to handle layout conversions, potentially offsetting its other performance advantages. The custom engine approach means you're not getting the same rendering fidelity as a real browser.
For comprehensive Bootstrap framework support and testing guidance, see the Bootstrap & Flexbox CSS Guide.
When Should I Choose Each Library?
Making the right choice depends on your specific requirements and constraints.
Kiedy wybrać IronPDF:
HTML/CSS Fidelity is Critical
- Modern web applications with complex layouts
- JavaScript-heavy content
- Responsive designs that need preservation
Rapid Development is Priority
- Simple API reduces development time
- Extensive code examples
- Minimal learning curve
Budget Transparency Matters
- Published pricing enables accurate budgeting
- No surprise costs or hidden fees
- Includes all features in base license
You Need Specific Features
- ASPX to PDF conversion
- Azure and cloud optimization
- Comprehensive HTML/CSS/JS support
Choose PDFTron (Apryse) When:
Przedsiębiorstwo Document Workflows
- Complex form processing with XFA support
- CAD file conversions (DWG, DXF)
- Advanced Office document handling
Performance Over Features
- High-volume simple document processing
- Lower memory requirements
- Basic HTML conversion needs
Specialized Requirements
- Built-in document viewer components
- Extensive annotation types (30+)
- Integracja starszych systemów
Large Przedsiębiorstwo Environment
- Dedicated support contracts
- Custom feature development
- Compliance certifications
Summary and Conclusion
Both IronPDF and PDFTron (Apryse) are capable PDF libraries, but they serve different market segments and use cases.
IronPDF excels in:
- Modern web technology support (HTML5, CSS3, JavaScript)
- Developer-friendly API design
- Transparent, affordable pricing
- Rapid application development
- Wdrożenia w chmurze i w kontenerach
Atuty PDFTron (Apryse) obejmują:
- Przepływy pracy z dokumentami w Przedsiębiorstwo
- Obsługa CAD i formatów specjalistycznych
- Mniejsze zużycie zasobów
- Rozbudowane możliwości dodawania adnotacji
- Kompatybilność z systemami starszego typu
Dla większości programistów .NET tworzących nowoczesne aplikacje IronPDF oferuje najlepsze połączenie funkcji, łatwości użytkowania i wartości. Jego silnik renderujący oparty na Chrome zapewnia konwersję HTML do PDF z idealną dokładnością pikselową, a proste API przyspiesza proces tworzenia oprogramowania.
PDFTron pozostaje opcją dla Przedsiębiorstwo mających specyficzne wymagania dotyczące konwersji CAD, przetwarzania złożonych formularzy lub pracy ze starszymi formatami dokumentów. Jednak brak przejrzystości cenowej i modułowa struktura licencji mogą znacznie zwiększyć całkowite koszty.
Pierwsze kroki
Wypróbuj IronPDF:
Poznaj PDFTron:
Pamiętaj, aby przed podjęciem decyzji dokładnie przeanalizować obie opcje w kontekście konkretnych przypadków użycia. Oprócz możliwości technicznych należy wziąć pod uwagę takie czynniki, jak koszty długoterminowe, jakość wsparcia technicznego oraz plany rozwoju funkcji.
Często Zadawane Pytania
Jak mogę przekonwertować HTML na PDF w języku C#?
Możesz użyć metody RenderHtmlAsPdf biblioteki IronPDF do konwersji ciągów HTML na pliki PDF. Możesz również konwertować pliki HTML na pliki PDF za pomocą metody RenderHtmlFileAsPdf.
Jak wygladaja roznice w wydajnosci miedzy IronPDF a PDFTron w konwersji HTML do PDF?
IronPDF zapewnia lepsze renderowanie dla zlozonych tresci internetowych dzieki silnikowi opartemu na Chrome, oferujac lepsze wsparcie dla JavaScript i CSS3. PDFTron, choc jest szybszy dla prostego HTML, moze nie radzic sobie tak skutecznie z zlozonymi tresciami.
Jakie sa opcje licencjonowania dla IronPDF i PDFTron?
IronPDF oferuje przejrzyste i wieczyste licencje z wszystkimi funkcjami zaczynajacymi sie od $749. PDFTron zas wymaga przygotowania indywidualnych wycen licencji, ktore moga wynosic od $5,000 do ponad $100,000 rocznie.
Czy mozliwe jest konwertowanie stron ASPX na PDF za pomoca tych bibliotek?
Tak, IronPDF moze konwertowac strony ASPX na PDF za pomoca metody AspxToPdf.RenderThisPageAsPdf w jednej linii kodu. PDFTron nie obsluguje bezposrednio konwersji stron ASPX.
Ktora biblioteka jest bardziej odpowiednia dla srodowisk chmurowych, takich jak Azure?
IronPDF jest zoptymalizowany dla srodowisk chmurowych, wlacznie z Azure i AWS, i dziala sprawnie z wlasciwosciami Functions oraz WebApps. PDFTron moze wymagac dodatkowej konfiguracji dla uzyskania optymalnego wdrozenia w chmurze.
Czy mozna tworzyc formularze PDF do wypelnienia przy pomocy IronPDF lub PDFTron?
Tak, obie biblioteki obsluguja tworzenie formularzy PDF do wypelnienia. IronPDF uzywa CreatePdfFormsFromHtml do automatycznej konwersji formularzy HTML. PDFTron oferuje szeroki zakres typow pol formularzy, ale wymaga bardziej zlozonej integracji.
Jakie opcje wsparcia sa dostepne dla uzytkownikow IronPDF oraz PDFTron?
IronPDF oferuje wsparcie inzynierskie 24/5 z bezposrednim dostepem do deweloperow i typowym czasem odpowiedzi wynoszacym 24-48 godzin. Opcje wsparcia PDFTron roznia sie w zaleznosci od poziomu licencji, od podstawowego wsparcia na forum do platnej bezposredniej pomocy.
Jak IronPDF i PDFTron radza sobie z obsluga stron internetowych chronionych haslem?
IronPDF wspiera uwierzytelnianie przez ChromeHttpLoginCredentials do obslugi formularzy logowania i uwierzytelniania HTTP, podczas gdy PDFTron ma ograniczone wsparcie dla tej funkcjonalnosci.



