IronPDF vs PDFTron (Apryse) : La comparaison complète des bibliothèques PDF C# pour 2025
Vous cherchez la bonne bibliothèque PDF pour votre projet .NET ? Cette comparaison complète entre IronPDF et PDFTron (désormais Apryse) analyse les fonctionnalités, les prix, les performances et l'expérience développeur pour vous aider à prendre une décision éclairée. Que vous créiez des applications web, des logiciels de bureau ou des services cloud, choisir le bon ensemble d'outils PDF peut avoir un impact significatif sur la vitesse de développement et le succès du projet.
Résumé de la comparaison rapide
| Catégorie** | Caractéristiques/Aspect** | IronPDF** | PDFTron (Apryse)** | Avantage clé** |
|---|---|---|---|---|
| **Architecture de base** | Philosophie de conception | Simplicité d'abord, moteur Chrome V8 | Moteur personnalisé axé sur l'entreprise | IronPDF : Un développement plus rapide |
| Complexité de l'API | Des méthodes simples comme RenderHtmlAsPdf() |
Approche multi-classes, contrôle granulaire | IronPDF : 70% de code en moins | |
| Courbe d'apprentissage | 1-2 jours en général | 1 à 2 semaines en général | IronPDF : Adoption plus rapide | |
| **Support de plateforme** | Multiplateforme | Support natif, paquet unique | Plusieurs paquets/modules requis | IronPDF : Un déploiement plus simple |
| Versions .NET | .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ | Assistance similaire avec configuration supplémentaire | Les deux : prise en charge de cadres modernes | |
| **HTML en PDF** | Moteur de rendu | Moteur Chrome V8 complet | Moteur personnalisé (via le module HTML2PDF) | IronPDF : fidélité au navigateur de plus de 98 |
| Support JavaScript | Prise en charge complète des délais de rendu | Soutien limité | IronPDF : Prêt pour le contenu dynamique | |
| **Support MS Office** | DOCX en PDF | Intégrée DocxToPdfRenderer |
Prise en charge de la conversion Native Office | PDFTron : une meilleure fidélité au bureau |
| Support CAO | Non disponible | DWG, DXF, DGN vers PDF | PDFTron : flux de travail CAO | |
| **Performance** | Vitesse de rendu HTML | 0.8-1.2s typique (moteur Chrome) | 0.3-0.5s typique (HTML simple) | PDFTron : plus rapide pour le HTML de base |
| Utilisation de la mémoire | 150-200MB (processus Chrome) | 80-120MB typique | PDFTron : une empreinte mémoire réduite | |
| **Licensing & Pricing** | Niveau d'entrée | Lite: $999 (1 dev, 1 project) | Devis personnalisé (est. $5,000-$10,000+) | IronPDF : Une tarification transparente |
| Entreprise | Professional: $2,999 (10 devs) | Devis personnalisé (est. $30,000+) | IronPDF : Jusqu'à 90 % d'économies | |
| **Soutien** | Support inclus | Oui, support technique 24/5 | Varie selon le niveau de licence | IronPDF : Support inclus |
| **Parfait pour** | Cas d'Utilisation | Applications web modernes, rapports HTML, développement rapide | Flux de travail à forte intensité documentaire, conversion CAO/Bureautique | En fonction du contexte |
Qu'est-ce qu'IronPDF et PDFTron (Apryse) ?
Aperçu d'IronPDF
IronPDF est une bibliothèque complète .NET PDF qui simplifie la création, l'édition et la manipulation de PDF pour les développeurs. Construit sur un moteur de rendu Chrome, il excelle à convertir HTML, CSS et JavaScript en documents PDF parfaits en pixels. La conception API simple de la bibliothèque permet aux développeurs d'intégrer la fonctionnalité PDF avec un code minimal, ce qui la rend idéale pour les applications Web, les systèmes de rapport et l'automatisation documentaire.
Aperçu de PDFTron (Apryse)
PDFTron, rebaptisé Apryse en février 2023, est un SDK PDF axé sur l'entreprise qui offre des capacités étendues de traitement des documents. Initialement développé pour les flux de travail de documents complexes, il offre un support robuste pour divers formats de fichiers, y compris Microsoft Office, les dessins CAD et les types de documents spécialisés. PDFTron Systems Inc., un leader mondial dans la technologie de traitement des documents, a annoncé son rebranding en Apryse ; rassemblant 13 entreprises, y compris iText, Windward, Eversign, et plus encore.
Comment créer un projet ASP.NET pour la génération de PDF ?
La mise en place d'un projet ASP.NET pour la génération de PDF nécessite une configuration appropriée, quel que soit la bibliothèque que vous choisissez. Suivez ces étapes pour créer une base pour l'intégration soit d'IronPDF soit de PDFTron :
- Ouvrez Visual Studio 2022 ou une version ultérieure
- Cliquez sur "Créer un nouveau projet"
- Sélectionnez "Application Web ASP.NET Core" (.NET 6.0 ou plus recommandé)
- Choisissez votre nom de projet et l'emplacement
- Sélectionnez "Application Web (Modèle-Vue-Contrôleur)" ou "API Web" en fonction de vos besoins
- Assurez-vous que ".NET 8.0" ou une version ultérieure est sélectionnée pour une compatibilité optimale
Boîte de dialogue de Nouveau Projet de Visual Studio affichant les modèles de projet ASP.NET pour l'intégration de bibliothèque PDF
Pour les applications Web Forms :
- Sélectionnez "Application Web ASP.NET (.NET Framework)"
- Choisissez "Web Forms" dans les options de modèle
- Cliquez sur "Créer" pour générer la structure du projet
Sélection du modèle Web Forms pour les applications ASP.NET traditionnelles avec des capacités PDF
Comment installer IronPDF dans mon projet C# ?
IronPDF propose plusieurs méthodes d'installation pour s'adapter à différents flux de travail de développement. Dans Visual Studio, cliquez avec le bouton droit sur votre projet dans l'Explorateur de solutions et sélectionnez "Gérer les packages NuGet...". À partir de là, il vous suffit de rechercher IronPDF et d'installer la dernière version.
Méthode 1 : Utilisation du gestionnaire de packages Visual Studio
L'approche la plus simple utilise le gestionnaire de packages NuGet intégré de Visual Studio :
- Cliquez avec le bouton droit sur votre projet dans l'Explorateur de solutions
- Sélectionnez "Gérer les packages NuGet"
- Cliquez sur "Parcourir" et recherchez "IronPDF"
- Cliquez sur "Installer" sur le package IronPDF
Accès au gestionnaire de packages NuGet via l'Explorateur de solutions de Visual Studio pour l'installation d'IronPDF
Accès alternatif au gestionnaire de packages NuGet via le menu Projet de Visual Studio
Installation d'IronPDF via le gestionnaire de packages NuGet avec des informations sur les versions et les dépendances
Méthode 2 : Utilisation de la console du gestionnaire de packages
Pour les développeurs qui préfèrent les outils en ligne de commande :
# 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
Méthode 3 : Installation par téléchargement direct
Pour les environnements sans accès à NuGet :
- Téléchargez depuis le site officiel d'IronPDF
- Extrayez le fichier ZIP dans le répertoire de votre projet
- Dans Visual Studio, cliquez droit sur "Références" → "Ajouter une référence"
- Accédez à et sélectionnez
IronPdf.dll
Méthode 4 : Utilisation de .NET CLI
Pour les passionnés de ligne de commande et les pipelines 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
Comment installer le SDK PDFTron (Apryse) ?
L'installation de PDFTron implique plus d'étapes en raison de son architecture modulaire et de son orientation entreprise. Le processus varie en fonction de la plateforme cible et des fonctionnalités requises.
Prérequis
- Visual Studio 2019 ou ultérieur
- Charge de travail de développement pour bureau .NET
- Outils de développement .NET Framework 4.5.1+
- Téléchargement du SDK PDFTron
Étapes d'intégration manuelle
-
Extrayez le SDK
# Example extraction path PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/# Example extraction path PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/SHELL -
Initialisez avec la clé de licence
// 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 -
Copiez les bibliothèques requises
- Copiez le dossier
LibdepuisPDFNET_BASEvers votre répertoire de projet - Ajouter des références à la fois à
PDFNetLoader.dllet à la référence spécifique à la plateformePDFNet.dll
- Copiez le dossier
- Configurez la propriété Copier local
Définir la propriété Copier local de PDFNet.dll sur Faux pour un déploiement PDFTron approprié
-
Mettez à jour App.config
<configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration><configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration>XML -
Configurez les événements post-construction
xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Yxcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /YSHELL
Installation NuGet (Simplifié)
Pour une approche plus simplifiée :
- Ouvrez le gestionnaire de packages NuGet
- Recherchez "PDFTron.NET.x64" ou le package spécifique à la plateforme
- Installez le package approprié pour votre architecture
Installation de PDFTron via le gestionnaire de packages NuGet avec des packages spécifiques à la plateforme
PDFTron offre une plus large variété de plus de 30 types d'annotations comparé aux 10+ types de ComPDFKit. Cependant, cet ensemble de fonctionnalités étendu nécessite une sélection minutieuse des modules lors de l'installation.
Comment puis-je convertir une URL en PDF en utilisant ces bibliothèques ?
Les deux bibliothèques fournissent une conversion URL vers PDF, mais avec des approches et capacités différentes. Examinons les détails de l'implémentation et les caractéristiques de performance de chacune.
URL vers PDF avec IronPDF
Le moteur de rendu Chrome d'IronPDF offre un support exceptionnel pour les normes Web modernes :
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")
Le moteur Chrome dans IronPDF gère des scénarios complexes, y compris :
- Applications monopage (SPA) avec beaucoup de JavaScript
- Conceptions réactives avec des requêtes média
- Polices Web et feuilles de style externes
- Chargement de contenu AJAX
- Animations CSS et transitions
La branche principale d'IronPDF prend désormais tout cela en charge : nuget.org/packages/IronPdf. Des améliorations récentes de performance ont considérablement amélioré la vitesse de rendu, en particulier pour les applications Web complexes.
URL vers PDF avec PDFTron (Apryse)
PDFTron nécessite le module HTML2PDF pour la conversion de contenu Web :
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
Considérations importantes pour PDFTron HTML2PDF :
- Le SDK de PDFTron est coté en fonction de l'étendue de la technologie (API, fonctionnalités) et de l'étendue de la distribution (utilisateurs externes ou internes).
- Support JavaScript limité par rapport aux moteurs de navigateur
- Peut nécessiter des configurations supplémentaires pour les mises en page complexes
- Mieux adapté aux documents HTML simples
Comment créer des PDF à partir de chaînes HTML ?
Créer des PDF à partir de chaînes HTML est essentiel pour générer des rapports, factures et documents dynamiques. Les deux bibliothèques traitent cela différemment.
Chaîne HTML vers PDF avec IronPDF
IronPDF excelle dans le rendu de HTML complexe avec un support complet de CSS3 et 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
Principaux avantages du rendu HTML d'IronPDF :
- Support complet de CSS3, y compris les mises en page flexbox et grid
- Intégration des polices Google et polices Web
- Bibliothèques de graphiques JavaScript (Chart.js, D3.js) parfaitement rendues
- Support de conception réactive avec contrôle du viewport
- Intégration d'image Base64 pour des documents autonomes
Chaîne HTML vers PDF avec PDFTron (Apryse)
Approche de PDFTron pour la conversion de chaîne 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
Limitations de PDFTron HTML à considérer :
- Support CSS basique (pas de mises en page avancées)
- Exécution limitée de JavaScript
- L'intégration de polices nécessite des configurations supplémentaires
- Mieux adapté aux mises en page de documents simples
Comment puis-je convertir des pages ASPX en PDF ?
La conversion de pages ASPX en PDF est une exigence courante pour les applications ASP.NET. IronPDF fournit un support natif, tandis que PDFTron nécessite des solutions de contournement.
ASPX vers PDF avec IronPDF
IronPDF offre une conversion ASPX transparente avec une seule ligne de code :
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
Pour plus de contrôle sur le processus de rendu :
// 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
La fonctionnalité d'ASPX vers PDF d'IronPDF préserve :
ViewStateet valeurs de formulaire- Données d'état de session
- Style CSS et mises en page
- Contenu rendu par JavaScript
- Mises en page de la page maître
Alternative ASPX avec PDFTron
PDFTron n'offre pas de support direct ASPX, nécessitant des approches indirectes :
// 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
Comment puis-je convertir des images en PDF ?
La conversion d'images en PDF est essentielle pour l'archivage de documents et la création de portfolios. Les deux bibliothèques offrent cette fonctionnalité avec des approches différentes.
Image vers PDF avec IronPDF
IronPDF fournit une classe dédiée ImageToPdfConverter pour un traitement par lots efficace :
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
Fonctionnalités avancées de traitement d'image :
- Conversion SVG en PDF avec préservation de la qualité vectorielle
- Traitement par lots avec optimisation mémoire
- Options de dimensionnement et de positionnement personnalisées
- Préservation des données EXIF
Image vers PDF avec PDFTron (Apryse)
PDFTron utilise son API de conversion pour le traitement des images :
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
Quelles sont les options de licence et les coûts ?
Comprendre les licences est crucial pour la budgétisation et la conformité. Les deux bibliothèques ont des modèles de tarification très différents.
Licence IronPDF
IronPDF propose 3 éditions tarifaires, de $999 à $2,999. Un essai gratuit d'IronPDF est également disponible. IronPDF offre une tarification transparente, publiée (à partir de 2025) :
Niveaux de Licence :
-
Licence Lite : $999
- 1 développeur
- 1 emplacement
- 1 projet
- Idéal pour les développeurs individuels ou les petits projets
-
Licence Plus : $1,499
- 3 développeurs
- 3 emplacements
- 3 projets
- Parfait pour les petites équipes
- Licence Professional : $2,999
- 10 développeurs
- 10 emplacements
- 10 projets
- Meilleur pour les équipes en croissance
Licence illimitée : Tarification personnalisée
- Développeurs illimités
- Sites illimités
- Projets illimités
Options Supplémentaires :
- Redistribution libre de droits : +$2,999 (une seule fois)
- Licences SaaS/OEM disponibles
- Pack Iron Suite : Obtenez 10 produits pour le prix de 2
Toutes les licences d'équipe sont non transférables et le partage de licences en dehors d'une organisation ou d'une relation agence/client est interdit.
Licences PDFTron (Apryse)
Les licences de PDFTron sont basées sur un devis sans tarification publiée. D'après les retours des utilisateurs et les rapports de l'industrie :
Estimations de Tarifs :
- Petite Entreprise : 5 000 $ - 15 000 $ par an
- Entreprise : 30 000 $ - 100 000 $ + par an
- Les modules additionnels nécessitent des licences séparées
Le manque de transparence des tarifs est un gros inconvénient chez PDFTRON. Tout est un module complémentaire, nécessitant des termes de licence et des contrats spécifiques. Les utilisateurs rapportent :
- Après 6500$ investis dans PDFTRON, leur produit n'a tout simplement pas fonctionné comme annoncé, nous laissant les mains vides et tout un bazar à nettoyer dans notre produit.
- Négociations de licence complexes requises
- Le coût par module augmente le coût total
- Politiques de remboursement limitées
Différences Clés :
- IronPDF : Licences perpétuelles, paiement unique
- PDFTron : Souvent basées sur l'abonnement ou les frais annuels
- IronPDF : Toutes les fonctionnalités incluses dans la licence de base
- PDFTron : Fonctions de base avec modules payants
Comment se comparent les options de support ?
Le support développeur peut faire ou défaire les délais de projet. Voici comment chaque fournisseur aborde l'assistance clients.
Support IronPDF
IronPDF inclut une assistance professionnelle avec toutes les licences :
- Support ingénierie 24/5 par e-mail
- Accès direct à l'équipe de développement
- Temps de réponse typique : 24-48 heures
- Documentation complète
- Forums communautaires actifs
- Tutoriels vidéo et exemples de code
La bibliothèque IronPDF fonctionne dans Azure WebApps, Functions et WebJobs. Elle fonctionne à la fois dans les variantes Linux et Windows, bien que je recommande les Functions et WebApps variant Windows, car nettement mieux testées et plus faciles à installer.
Support PDFTron (Apryse)
Le support de PDFTron varie selon le niveau de licence :
- Le coût de PDFTron est élevé. L'importance pour notre entreprise justifie le coût, mais c'était certainement un obstacle pour nous lors de la comparaison de ce produit avec d'autres solutions PDF Web.
- Support basé sur forum pour les licences basiques
- Plans de support payants disponibles
- Parfois, le support peut être insuffisant et les développeurs doivent se débrouiller seuls.
- Les temps de réponse varient en fonction du niveau de support
Quelles sont les caractéristiques de performance ?
La performance impacte l'expérience utilisateur et les coûts de serveur. Examinons les données de performance réelles.
Performance d'IronPDF
Les améliorations récentes ont considérablement amélioré les performances d'IronPDF :
// 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
Métriques de performance à partir d'environnements de production :
- HTML simple : 200-400ms
- HTML complexe avec CSS/JS : 800-1200ms
- IronPDF a des variantes Async des méthodes de rendu comme documenté ici IronPDF.com/examples/async. L'utilisation de
Parallel.ForEachs'est avérée la stratégie la plus performante pour le rendu par lots de HTML en PDF dans mon cas d'utilisation.
Performance de PDFTron (Apryse)
PDFTron offre généralement des performances brutes plus rapides pour les conversions simples :
- HTML basique : 100-300ms
- Documents Office : 500-1000ms
- Moindre empreinte mémoire
- Meilleur pour les documents simples à fort volume
Cependant, les utilisateurs rapportent des problèmes avec des scénarios complexes :
- Des bugs apparaissent parfois. Parfois des bugs assez préjudiciables qui auraient probablement dû être vus lors des tests QA. Cela peut prendre un certain temps pour qu'ils finissent par être corrigés.
Support des cadres CSS modernes et Bootstrap
À mesure que les applications d'entreprise adoptent de plus en plus des cadres CSS modernes comme Bootstrap, Tailwind et Foundation, la capacité à convertir précisément ces cadres en PDF devient un critère de sélection critique pour les bibliothèques PDF.
IronPDF : Support Complet de Cadre Basé sur Chromium
Le moteur de rendu Chrome V8 d'IronPDF offre une prise en charge complète pour tous les cadres CSS modernes et normes Web :
Bootstrap 5 : Prise en charge complète de Flexbox et CSS Grid avec tous les utilitaires responsifs Bootstrap 4 : Compatibilité totale avec les composants de cartes, les systèmes de navigation et les mises en page de formulaires.
- Tailwind CSS : Toutes les classes utilitaires, les modificateurs de réactivité et les modèles de compilation JIT
- Fondation : Prise en charge complète du système de grille et de la bibliothèque de composants
- CSS3 moderne : Flexbox, CSS Grid, variables CSS, animations, transformations et transitions
- Frameworks JavaScript : React, Vue, Angular ; rendu de composants avec prise en charge complète de l'interactivité
Validation en production : La page d'accueil Bootstrap et les modèles officiels se convertissent avec une fidélité de 98 % ou plus par rapport au navigateur.
Exemple de Code : Tableau de Bord d'Entreprise avec Tables de Données
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")
Résultat : Un tableau de bord Entreprise Professional avec des cartes de métriques flexbox de Bootstrap, une mise en page en grille réactive et des tableaux de données stylisés, le tout rendu avec une fidélité parfaite dans le PDF.
PDFTron (Apryse) : Module HTML2PDF avec Limitations Cadre
La conversion HTML en PDF de PDFTron est fournie via le module HTML2PDF, qui utilise un moteur de rendu personnalisé avec des limitations spécifiques pour les cadres CSS modernes :
- Moteur personnalisé : non basé sur Chromium, ce qui signifie que la prise en charge de CSS3 est sélective et non exhaustive.
- Prise en charge de Flexbox : implémentation partielle, les mises en page Flexbox de Bootstrap 4/5 peuvent ne pas s'afficher correctement.
- CSS Grid : Prise en charge limitée des spécifications de mise en page CSS Grid
- Limitations JavaScript : Exécution JavaScript limitée par rapport aux moteurs de navigateur complets
- Bootstrap 3 : Fonctionne généralement mieux que Bootstrap 4/5 grâce à ses mises en page basées sur des tableaux.
- Tests du framework requis : les composants Bootstrap complexes nécessitent des tests approfondis et d'éventuelles solutions de contournement.
Selon les rapports des développeurs, les utilisateurs de PDFTron travaillant avec Bootstrap rencontrent :
- Barres de navigation basées sur flexbox avec des problèmes d'alignement
- Decks de cartes et systèmes de grille nécessitant des ajustements CSS
- Utilitaires réactifs non respectés dans le rendu PDF
- Besoin de simplifier les composants Bootstrap ou d'utiliser des CSS de secours
Considération Entreprise : Pour les applications construites sur des versions modernes de Bootstrap (4+), PDFTron peut nécessiter un effort de développement supplémentaire important pour gérer les conversions de mise en page, ce qui peut potentiellement compenser ses autres avantages en termes de performances. L'approche du moteur personnalisé signifie que vous n'obtenez pas la même fidélité de rendu qu'un véritable navigateur.
Pour un support complet du cadre Bootstrap et des conseils de test, voir le Guide de CSS Bootstrap & Flexbox.
Quand devrais-je choisir chaque bibliothèque ?
Faire le bon choix dépend de vos exigences et contraintes spécifiques.
Choisissez IronPDF lorsque :
La Fidélité HTML/CSS est Critique
- Applications Web modernes avec des mises en page complexes
- Contenu riche en JavaScript
- Conceptions réactives qui doivent être préservées
Le Développement Rapide est une Priorité
- API simple qui réduit le temps de développement
- Nombreux exemples de code
- Courbe d'apprentissage minimale
La Transparence Budgétaire Compte
- Tarification publiée permettant une budgétisation précise
- Aucun coût surprise ou frais cachés
- Inclut toutes les fonctionnalités dans la licence de base
Vous Avez Besoin de Fonctionnalités Spécifiques
- Conversion ASPX en PDF
- Optimisation Azure et cloud
- Support complet HTML/CSS/JS
Choisissez PDFTron (Apryse) Lorsque :
Flux de Travail Documentaire d'Entreprise
- Traitement de formulaires complexes avec support XFA
- Conversions de fichiers CAO (DWG, DXF)
- Gestion avancée des documents Office
Performance sur les Fonctionnalités
- Traitement de documents simples à fort volume
- Exigences en mémoire réduites
- Besoins de conversion HTML basiques
Exigences Spécialisées
- Composants de visionneuse de documents intégrés
- Types d'annotations étendus (30+)
- Intégration de systèmes hérités
Grand Environnement d'Entreprise
- Contrats de support dédiés
- Développement de fonctionnalités sur mesure
- Certifications de conformité
Résumé et Conclusion
IronPDF et PDFTron (Apryse) sont deux bibliothèques PDF capables, mais elles servent différents segments de marché et cas d'utilisation.
IronPDF excelle dans :
- Support des technologies Web modernes (HTML5, CSS3, JavaScript)
- Conception d'API conviviale pour les développeurs
- Tarification transparente et abordable
- Développement rapide d'applications
- Déploiements cloud et conteneurisés
Les points forts de PDFTron (Apryse) incluent :
- Flux de travail documentaire d'entreprise
- Support des formats spécialisés et CAO
- Consommation de ressources réduite
- Capacités d'annotation étendues
- Compatibilité avec les systèmes hérités
Pour la plupart des développeurs .NET construisant des applications modernes, IronPDF offre la meilleure combinaison de fonctionnalités, de facilité d'utilisation et de valeur. Son moteur de rendu basé sur Chrome assure une conversion HTML en PDF parfaite en pixels, tandis que l'API simple accélère le développement.
PDFTron demeure viable pour les entreprises avec des besoins spécifiques en matière de conversion de CAO, de traitement de formulaires complexes, ou lorsqu'ils travaillent avec des formats de documents hérités. Cependant, le manque de transparence tarifaire et la structure de licences modulaires peuvent augmenter considérablement les coûts totaux.
Démarrer
Essayez IronPDF :
Explorez PDFTron :
- Demander une évaluation
- Visitez le portail développeur
N'oubliez pas d'évaluer minutieusement les deux options avec vos cas d'utilisation spécifiques avant de prendre une décision. Considérez des facteurs comme les coûts à long terme, la qualité du support et les feuilles de route des fonctionnalités à côté des capacités techniques.
Questions Fréquemment Posées
Comment puis-je convertir HTML en PDF en C# ?
Vous pouvez utiliser la méthode RenderHtmlAsPdf d'IronPDF pour convertir des chaînes HTML en PDFs. Vous pouvez également convertir des fichiers HTML en PDFs en utilisant RenderHtmlFileAsPdf.
Quelles sont les différences de performance entre IronPDF et PDFTron pour la conversion de HTML en PDF ?
IronPDF offre un rendu supérieur pour le contenu web complexe avec son moteur basé sur Chrome, offrant un meilleur support for JavaScript et CSS3. PDFTron, bien que plus rapide pour le HTML simple, peut ne pas gérer le contenu complexe aussi efficacement.
Quelles sont les options de licence pour IronPDF et PDFTron ?
IronPDF propose des licences transparentes et perpétuelles avec toutes les fonctionnalités incluses à partir de 749 $. PDFTron, cependant, nécessite des devis personnalisés pour les licences, pouvant aller de 5 000 $ à 100 000 $+ par an.
Est-il possible de convertir des pages ASPX en PDF en utilisant ces bibliothèques ?
Oui, IronPDF peut convertir des pages ASPX en PDF en utilisant la méthode AspxToPdf.RenderThisPageAsPdf en une seule ligne de code. PDFTron ne prend pas directement en charge la conversion des pages ASPX.
Quelle bibliothèque est plus adaptée aux environnements cloud comme Azure ?
IronPDF est optimisé pour les environnements cloud, y compris Azure et AWS, et fonctionne parfaitement avec les Fonctions et WebApps. PDFTron peut nécessiter une configuration supplémentaire pour un déploiement cloud optimal.
Pouvez-vous créer des formulaires PDF remplissables avec IronPDF ou PDFTron ?
Oui, les deux bibliothèques prennent en charge la création de formulaires PDF remplissables. IronPDF utilise CreatePdfFormsFromHtml pour la conversion automatique des formulaires HTML. PDFTron propose de nombreux types de champs de formulaire mais nécessite une intégration plus complexe.
Quelles options de support sont disponibles pour les utilisateurs d'IronPDF et PDFTron ?
IronPDF offre un support technique 24/5 avec accès direct aux développeurs et un temps de réponse typique de 24 à 48 heures. Les options de support de PDFTron varient en fonction du niveau de licence, avec un support basique par forum et une assistance directe payante.
Comment IronPDF et PDFTron se comparent-ils dans la gestion des sites web protégés par mot de passe ?
IronPDF prend en charge l'authentification via ChromeHttpLoginCredentials pour la gestion des formulaires de connexion et l'authentification HTTP, tandis que PDFTron a un support limité pour cette fonctionnalité.



