IronPDF vs PDFTron (Apryse): La Comparación Completa de Bibliotecas PDF C# para 2025
¿Buscando la biblioteca PDF adecuada para tu proyecto .NET? Esta comparación exhaustiva entre IronPDF y PDFTron (ahora Apryse) analiza características, precios, rendimiento y experiencia del desarrollador para ayudarte a tomar una decisión informada. Ya sea que estés construyendo aplicaciones web, software de escritorio o servicios en la nube, elegir el kit de herramientas PDF adecuado puede impactar significativamente en la velocidad de desarrollo y el éxito del proyecto.
Resumen de la comparación
| **Categoría** | **Característica/Aspecto** | **IronPDF** | **PDFTron (Apryse)** | **Ventaja clave** |
|---|---|---|---|---|
| **Arquitectura básica** | Filosofía de diseño | Motor Chrome V8 que prima la sencillez | Motor personalizado centrado en la empresa | IronPDF: Desarrollo más rápido |
| Complejidad de la API | Métodos sencillos como RenderHtmlAsPdf() | IronPDF: 70% menos de código | ||
| Curva de aprendizaje | 1-2 días típicos | 1-2 semanas típicas | IronPDF: Adopción más rápida | |
| **Soporte de plataforma** | Multiplataforma | Soporte nativo, paquete único | Se necesitan varios paquetes/módulos | IronPDF: Despliegue más sencillo |
| Versiones .NET | .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ | Soporte similar con configuración adicional | Ambos: Compatibilidad con marcos de trabajo modernos | |
| **HTML a PDF** | Motor de renderizado | Motor Chrome V8 completo | Motor personalizado (a través del módulo HTML2PDF) | IronPDF: 98%+ de fidelidad del navegador |
| Soporte for JavaScript | Soporte completo con retrasos de renderización | Asistencia limitada | IronPDF: Preparado para contenido dinámico | |
| **Soporte para MS Office** | DOCX a PDF | DocxToPdfRenderer integrado | PDFTron: mejor fidelidad de Office | |
| Soporte CAD | No disponible | DWG, DXF, DGN a PDF | PDFTron: flujos de trabajo CAD | |
| **Realización** | Velocidad de renderizado HTML | 0.8-1.2s típico (motor Chrome) | 0.3-0,5s típico (HTML simple) | PDFTron: más rápido para HTML básico |
| Uso de la memoria | 150-200 MB (proceso Chrome) | 80-120 MB típicos | PDFTron: Menor huella de memoria | |
| **Licensing & Pricing** | Nivel inicial | Lite: $999 (1 dev, 1 project) | Presupuesto personalizado (est. $5.000-$10.000+) | IronPDF: Precios transparentes |
| Empresa | Professional: $2,999 (10 devs) | Presupuesto personalizado (est. $30.000+) | IronPDF: Hasta un 90% de ahorro | |
| **Soporte** | Soporte incluido | Sí, asistencia técnica 24/5 | Varía según el nivel de licencia | IronPDF: Soporte incluido |
| **Mejor para** | Casos de Uso | Aplicaciones web modernas, informes HTML, desarrollo rápido | Flujos de trabajo con muchos documentos, conversión CAD/Office | Depende del contexto |
¿Qué son IronPDF y PDFTron (Apryse)?
Descripción general de IronPDF
IronPDF es una biblioteca integral de PDF para .NET que simplifica la creación, edición y manipulación de PDFs para desarrolladores. Construida sobre un motor de renderizado de Chrome, destaca en la conversión de HTML, CSS y JavaScript en documentos PDF impecables. El diseño de la API de la biblioteca permite a los desarrolladores integrar la funcionalidad de PDF con código mínimo, lo que la hace ideal para aplicaciones web, sistemas de informes y automatización de documentos.
Descripción general de PDFron (Apryse)
PDFTron, renombrado como Apryse en febrero de 2023, es un SDK de PDF centrado en empresas que proporciona amplias capacidades de procesamiento de documentos. Originalmente desarrollado para flujos de trabajo de documentos complejos, ofrece un soporte robusto para varios formatos de archivo, incluidos Microsoft Office, dibujos CAD y tipos de documentos especializados. PDFTron Systems Inc., un líder mundial en tecnología de procesamiento de documentos, anunció su cambio de marca como Apryse; uniendo 13 empresas, incluidas iText, Windward, Eversign, y más.
¿Cómo crear un proyecto ASP.NET para la generación de PDF?
Configurar un proyecto de ASP.NET para la generación de PDF requiere la configuración adecuada independientemente de la biblioteca que elijas. Sigue estos pasos para crear una base para la integración ya sea de IronPDF o PDFTron:
- Abre Visual Studio 2022 o posterior
- Haz clic en 'Crear un nuevo proyecto'
- Selecciona 'ASP.NET Core Web App' (se recomienda .NET 6.0 o posterior)
- Elige el nombre y la ubicación de tu proyecto
- Selecciona 'Aplicación Web (Modelo-Vista-Controlador)' o 'API Web' según tus necesidades
- Asegúrate de que se seleccione '.NET 8.0' o posterior para compatibilidad óptima
Cuadro de diálogo de Nuevo Proyecto de Visual Studio mostrando plantillas de proyectos ASP.NET para la integración de bibliotecas PDF
Para aplicaciones Web Forms:
- Selecciona 'Aplicación Web ASP.NET (.NET Framework)'
- Elige 'Formularios Web' de las opciones de plantilla
- Haz clic en 'Crear' para generar la estructura del proyecto
Seleccionando la plantilla Web Forms para aplicaciones ASP.NET tradicionales con capacidades PDF
¿Cómo instalo IronPDF en mi proyecto de C#?
IronPDF ofrece múltiples métodos de instalación para adaptarse a diferentes flujos de trabajo de desarrollo. En Visual Studio, haz clic derecho en tu proyecto en el Explorador de Soluciones y selecciona 'Administrar paquetes NuGet...'. Desde allí, simplemente busca IronPDF e instala la última versión.
Método 1: Uso del gestor de paquetes de Visual Studio
El enfoque más sencillo utiliza el Administrador de Paquetes NuGet integrado en Visual Studio:
- Haz clic derecho en tu proyecto en el Explorador de Soluciones
- Selecciona "Administrar Paquetes NuGet"
- Haz clic en "Explorar" y busca "IronPDF"
- Haz clic en 'Instalar' en el paquete IronPDF
Accediendo al Gestor de Paquetes NuGet a través del Explorador de Soluciones de Visual Studio para la instalación de IronPDF
Acceso alternativo al Gestor de Paquetes NuGet a través del menú de Proyectos de Visual Studio
Instalación de IronPDF a través del Gestor de Paquetes NuGet con información de versión y dependencias
Método 2: Uso de la consola del gestor de paquetes
Para desarrolladores que prefieren herramientas de línea de comandos:
# 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étodo 3: Instalación mediante descarga directa
Para entornos sin acceso a NuGet:
- Descarga desde el sitio oficial de IronPDF
- Extrae el archivo ZIP en tu directorio de proyecto
- En Visual Studio, haz clic derecho en 'Referencias' → 'Agregar Referencia'
- Busque y seleccione
IronPdf.dll
Método 4: Uso de .NET CLI
Para entusiastas de la línea de comandos y tuberías 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
¿Cómo instalar PDFTron (Apryse) SDK?
La instalación de PDFTron implica más pasos debido a su arquitectura modular y enfoque empresarial. El proceso varía dependiendo de tu plataforma objetivo y las características requeridas.
Prerrequisitos
- Visual Studio 2019 o posterior
- Carga de trabajo de Desarrollo de Escritorio .NET
- Herramientas de desarrollo de .NET Framework 4.5.1+
- Descarga del SDK de PDFTron
Pasos de la integración manual
-
Extraer el SDK
# Example extraction path PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/# Example extraction path PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/SHELL -
Inicializar con clave de licencia
// 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 -
Copiar las bibliotecas necesarias
- Copie la carpeta
LibdePDFNET_BASEal directorio de su proyecto - Agregue referencias tanto a
PDFNetLoader.dllcomo aPDFNet.dllespecíficos de la plataforma
- Copie la carpeta
- Configurar la propiedad Copia Local
Configurando la propiedad Copia Local de PDFNet.dll a Falso para una implementación adecuada de PDFTron
-
Actualizar App.config
<configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration><configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration>XML -
Configurar los Eventos de Post-Build
xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Yxcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /YSHELL
Instalación de NuGet (simplificada)
Para un enfoque más simplificado:
- Abre el Gestor de Paquetes NuGet
- Busca 'PDFTron.NET.x64' o paquete específico de la plataforma
- Instala el paquete apropiado para tu arquitectura
Instalando PDFTron a través del Gestor de Paquetes NuGet con paquetes específicos de la plataforma
PDFTron ofrece una mayor variedad de más de 30 tipos de anotación en comparación con los más de 10 tipos de ComPDFKit. Sin embargo, este conjunto de características extensas requiere una selección cuidadosa de módulos durante la instalación.
¿Cómo convierto una URL a PDF utilizando estas bibliotecas?
Ambas bibliotecas proporcionan conversión de URL a PDF, pero con diferentes enfoques y capacidades. Examinemos los detalles de implementación y características de rendimiento de cada una.
URL a PDF con IronPDF
El motor de renderizado de Chrome de IronPDF proporciona un soporte excepcional para estándares web modernos:
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")
El renderizador de Chrome en IronPDF maneja escenarios complejos, incluyendo:
- Aplicaciones de una sola página (SPAs) con JavaScript intenso
- Diseños responsivos con consultas de medios
- Fuentes web y hojas de estilo externas
- Carga de contenido AJAX
- Animaciones y transiciones CSS
La rama principal de IronPDF ahora soporta todo esto: nuget.org/packages/IronPdf. Mejoras recientes en el rendimiento han mejorado significativamente la velocidad de renderizado, especialmente para aplicaciones web complejas.
URL a PDF con PDFTron (Apryse)
PDFTron requiere el módulo HTML2PDF para la conversión de contenido 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
Consideraciones importantes para PDFTron HTML2PDF:
- El SDK de PDFTron se cotiza en función de la amplitud de la tecnología (APIs, características) y el alcance de distribución (usuarios externos o internos).
- Soporte limitado de JavaScript en comparación con los motores de navegadores
- Puede requerir configuración adicional para diseños complejos
- Mejor adaptado para documentos HTML simples
¿Cómo crear archivos PDF a partir de cadenas HTML?
Crear PDFs a partir de cadenas HTML es esencial para generar informes dinámicos, facturas y documentos. Ambas bibliotecas manejan esto de manera diferente.
Cadena HTML a PDF con IronPDF
IronPDF destaca en el renderizado de HTML complejo con soporte completo de CSS3 y 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
Ventajas clave del renderizado HTML de IronPDF:
- Soporte completo de CSS3, incluidos diseños flexbox y grid
- Integración de Google Fonts y de fuentes web
- Las bibliotecas de gráficos JavaScript (Chart.js, D3.js) se renderizan perfectamente
- Soporte de diseño responsivo con control de viewport
- Incorporación de imágenes en Base64 para documentos autocontenidos
Cadena HTML a PDF con PDFTron (Apryse)
El enfoque de PDFTron para la conversión de cadenas 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
Limitaciones HTML de PDFTron a considerar:
- Soporte básico de CSS (sin diseños avanzados)
- Ejecución limitada de JavaScript
- La incrustación de fuentes requiere configuración adicional
- Mejor adaptado para diseños de documentos simples
¿Cómo puedo convertir páginas ASPX a PDF?
Convertir páginas ASPX a PDF es un requisito común para aplicaciones ASP.NET. IronPDF ofrece soporte nativo, mientras que PDFTron requiere soluciones alternativas.
ASPX a PDF con IronPDF
IronPDF ofrece una conversión de ASPX sin problemas con una sola línea de código:
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
Para tener un mayor control sobre el proceso de renderizado:
// 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 función ASPX a PDF de IronPDF preserva:
ViewStatey valores de formulario- Datos de estado de sesión
- Estilos y diseños CSS
- Contenido renderizado por JavaScript
- Diseños de páginas maestras
Alternativa ASPX con PDFTron
PDFTron no ofrece soporte directo de ASPX, requiriendo enfoques indirectos:
// 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
¿Cómo convierto imágenes a PDF?
La conversión de imágenes a PDF es esencial para el archivado de documentos y la creación de carteras. Ambas bibliotecas ofrecen esta funcionalidad con diferentes enfoques.
Imagen a PDF con IronPDF
IronPDF proporciona una clase ImageToPdfConverter dedicada para el procesamiento por lotes eficiente:
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
Características avanzadas de manejo de imágenes:
- Conversión de SVG a PDF con preservación de calidad vectorial
- Procesamiento por lotes con optimización de memoria
- Opciones de tamaño y posicionamiento personalizados
- Preservación de datos EXIF
Imagen a PDF con PDFTron (Apryse)
PDFTron utiliza su API de conversión para el manejo de imágenes:
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
¿Cuáles son las opciones de licencia y los costes?
Entender el licenciamiento es crucial para la presupuestación y el cumplimiento. Las dos bibliotecas tienen modelos de precios muy diferentes.
Licencias de IronPDF
IronPDF tiene 3 ediciones de precios, desde $999 hasta $2,999. También está disponible una prueba gratuita de IronPDF. IronPDF ofrece precios transparentes y publicados (al 2025):
Niveles de Licencia:
-
Licencia Lite: $999
- 1 desarrollador
- 1 ubicación
- 1 proyecto
- Ideal para desarrolladores individuales o proyectos pequeños
-
Licencia Plus: $1,499
- 3 desarrolladores
- 3 ubicaciones
- 3 proyectos
- Perfecto para equipos pequeños
-
Licencia Profesional: $2,999
- 10 desarrolladores
- 10 ubicaciones
- 10 proyectos
- Mejor para equipos en crecimiento
- Licencia ilimitada: precios personalizados
- Desarrolladores ilimitados
- Ubicaciones ilimitadas
- Proyectos ilimitados
Opciones Adicionales:
- Redistribución libre de regalías: +$2,999 (una sola vez)
- Licenciamiento para SaaS/OEM disponible
- Paquete Iron Suite: Obtén 10 productos por el precio de 2
Todas las Licencias de Equipo no son transferibles y está prohibido compartir licencias fuera de una organización o relación de agencia/cliente.
PDFTron (Apryse) Licencias
El licenciamiento de PDFTron es basado en cotizaciones sin precios publicados. Según los comentarios de los usuarios y los informes de la industria:
Rangos de Precios Estimados:
- Pequeña Empresa: $5,000 - $15,000 anualmente
- Empresarial: $30,000 - $100,000+ anualmente
- Los módulos adicionales requieren licencias separadas
La transparencia en precios es una gran desventaja en PDFTRON. Todo es un añadido, requiriendo términos de licenciamiento específicos y contratos. Los usuarios informan:
- Después de invertir $6500 en PDFTRON, su producto simplemente no funcionó como se anunciaba, dejándonos con las manos vacías y con un gran desastre por limpiar en nuestro producto.
- Negociaciones complejas de licenciamiento requeridas
- Precios por módulo incrementan el costo total
- Políticas de reembolso limitadas
Diferencias Clave:
- IronPDF: Licencias perpetuas, pago único
- PDFTron: A menudo basado en suscripción o tarifas anuales
- IronPDF: Todas las características incluidas en la licencia base
- PDFTron: Características principales con complementos pagados
¿Cómo se comparan las opciones de asistencia técnica?
El soporte al desarrollador puede hacer o romper los plazos del proyecto. Así es como cada proveedor aborda la asistencia al cliente.
Soporte IronPDF
IronPDF incluye soporte profesional con todas las licencias:
- Soporte de ingeniería 24/5 por correo electrónico
- Acceso directo al equipo de desarrollo
- Tiempo típico de respuesta: 24-48 horas
- Documentación completa
- Foros comunitarios activos
- Tutoriales en video y ejemplos de código
La biblioteca IronPDF funciona en Azure WebApps, Functions y WebJobs. Funciona en variantes tanto de Linux como de Windows, aunque recomendaría las Functions y WebApps en la variante Windows, ya que están mucho mejor probadas y son más fáciles de instalar.
Soporte para PDFTron (Apryse)
El soporte de PDFTron varía según el nivel de licencia:
- El costo de PDFTron es alto. La importancia para nuestro negocio justifica el costo, pero definitivamente fue un obstáculo para nosotros al comparar este producto con otras soluciones PDF web.
- Soporte basado en foros para licencias básicas
- Planes de soporte pagados disponibles
- Ocasionalmente el soporte puede faltar y los desarrolladores quedan luchando por resolverlo ellos mismos.
- Los tiempos de respuesta varían por nivel de soporte.
¿Cuáles son las características de rendimiento?
El rendimiento impacta la experiencia del usuario y los costos del servidor. Examinemos datos de rendimiento del mundo real.
Rendimiento de IronPDF
Las mejoras recientes han mejorado significativamente el rendimiento de 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étricas de rendimiento de entornos de producción:
- HTML simple: 200-400ms
- HTML complejo con CSS/JS: 800-1200ms
- IronPDF tiene variantes Async de métodos de renderizado como se documenta aquí IronPDF.com/examples/async. El uso de
Parallel.ForEachfue la estrategia de mayor rendimiento para la representación por lotes de HTML a PDF para mi caso de uso.
PDFTron (Apryse) Rendimiento
PDFTron generalmente ofrece una mayor velocidad de rendimiento bruto para conversiones simples:
- HTML básico: 100-300ms
- Documentos de Office: 500-1000ms
- Huella de memoria más baja
- Mejor para documentos simples de alto volumen
Sin embargo, los usuarios reportan problemas con escenarios complejos:
- Se presentan errores de vez en cuando. A veces errores bastante perjudiciales que probablemente deberían haber sido vistos en pruebas de QA. Puede tardar un tiempo en solucionarse.
Marco CSS moderno y compatibilidad con Bootstrap
A medida que las aplicaciones empresariales adoptan cada vez más frameworks CSS modernos como Bootstrap, Tailwind y Foundation, la capacidad de convertir con precisión estos frameworks a PDF se convierte en un criterio crítico de selección para bibliotecas PDF.
IronPDF: Compatibilidad total con marcos basados en Chromium
El motor de renderizado Chrome V8 de IronPDF proporciona un soporte integral para todos los frameworks CSS modernos y estándares web:
- Bootstrap 5: Compatibilidad completa con flexbox y CSS Grid con todas las utilidades responsivas
- Bootstrap 4: compatibilidad total con componentes de tarjetas, sistemas de navegación y diseños de formularios
- Tailwind CSS: todas las clases de utilidad, modificadores responsivos y patrones de compilación JIT
- Fundación: Soporte completo para sistemas de cuadrícula y bibliotecas de componentes
- CSS3 moderno: Flexbox, CSS Grid, variables CSS, animaciones, transformaciones y transiciones
- Frameworks de JavaScript : React, Vue, renderizado de componentes Angular con soporte completo de interactividad
Validación de producción: La página de inicio de Bootstrap y plantillas oficiales se convierten con un 98% + de fidelidad al navegador.
Ejemplo de Código: Panel de Control Empresarial con Tablas de Datos
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")
Resultado: Un panel empresarial profesional con tarjetas de métricas flexbox de Bootstrap, diseño de cuadrícula adaptable y tablas de datos con estilo, todo representado con perfecta fidelidad en el PDF.
PDFTron (Apryse): Módulo HTML2PDF con limitaciones del framework
La conversión de HTML a PDF de PDFTron se proporciona a través del módulo HTML2PDF, que utiliza un motor de renderizado personalizado con limitaciones específicas para los frameworks CSS modernos:
- Motor personalizado: no está basado en Chromium, lo que significa que la compatibilidad con CSS3 es selectiva en lugar de integral.
- Compatibilidad con Flexbox: implementación parcial, es posible que los diseños de Flexbox de Bootstrap 4/5 no se representen correctamente
- CSS Grid: compatibilidad limitada con las especificaciones de diseño de CSS Grid
- Limitaciones de JavaScript : Ejecución de JavaScript limitada en comparación con los motores de navegador completos
- Bootstrap 3: generalmente funciona mejor que Bootstrap 4/5 debido a los diseños basados en tablas
- Se requieren pruebas del marco: los componentes Bootstrap complejos necesitan pruebas exhaustivas y posibles soluciones alternativas
Según informes de desarrolladores, los usuarios de PDFTron que trabajan con Bootstrap encuentran:
- Barras de navegación basadas en Flexbox que se renderizan con problemas de alineación
- Barajas de tarjetas y sistemas de grid que requieren ajustes CSS
- Las utilidades responsivas no se respetan en la salida en PDF
- Necesidad de simplificar componentes Bootstrap o utilizar CSS de reserva
Consideración empresarial: para las aplicaciones creadas en versiones modernas de Bootstrap (4+), PDFTron puede requerir un esfuerzo de desarrollo adicional significativo para manejar las conversiones de diseño, lo que potencialmente compensaría sus otras ventajas de rendimiento. El enfoque de motor personalizado significa que no se obtiene la misma fidelidad de renderizado que en un navegador real.
Para soporte y orientación de pruebas integrales de frameworks Bootstrap, consulta la Guía Bootstrap & Flexbox CSS.
¿Cuándo debo elegir cada biblioteca?
Tomar la decisión correcta depende de tus requisitos específicos y restricciones.
Elija IronPDF cuando:
La fidelidad HTML/CSS es fundamental
- Aplicaciones web modernas con layouts complejos
- Contenido intensivo en JavaScript
- Diseños responsivos que necesitan preservación
El desarrollo rápido es prioritario
- La API simple reduce el tiempo de desarrollo
- Extensos ejemplos de código
- Curva de aprendizaje mínima
La transparencia presupuestaria es importante
- Los precios publicados permiten un presupuesto preciso
- Sin costos sorpresa ni tarifas ocultas
- Incluye todas las características en la licencia base
Necesita características específicas
- Conversión de ASPX a PDF
- Optimización de Azure y la nube
- Soporte integral de HTML/CSS/JS
Elija PDFTron (Apryse) cuando:
Flujos de trabajo de documentos empresariales
- Procesamiento de formularios complejos con soporte XFA
- Conversiones de archivos CAD (DWG, DXF)
- Manejo avanzado de documentos de Office
El rendimiento por encima de las características
- Procesamiento de documentos simples de alto volumen
- Menores requerimientos de memoria
- Necesidades básicas de conversión HTML
Requisitos de especialización
- Componentes de visor de documentos integrados
- Extensas capacidades de anotación (30+)
- Integración de sistemas heredados
Entorno de gran empresa
- Contratos de soporte dedicados
- Desarrollo personalizado de características
- Certificaciones de cumplimiento
Resumen y conclusión
Tanto IronPDF como PDFTron (Apryse) son bibliotecas de PDF capaces, pero atienden segmentos de mercado y casos de uso diferentes.
IronPDF destaca en:
- Soporte de tecnología web moderna (HTML5, CSS3, JavaScript)
- Diseño de API amigable para desarrolladores
- Precios transparentes y asequibles
- Desarrollo rápido de aplicaciones
- Implementaciones en nube y contenedor
PDFTron (Apryse) tiene fortalezas que incluyen:
- Flujos de trabajo de documentos empresariales
- Soporte de CAD y formatos especializados
- Menor consumo de recursos
- Amplias capacidades de anotación
- Compatibilidad con sistemas legados
Para la mayoría de los desarrolladores .NET que construyen aplicaciones modernas, IronPDF ofrece la mejor combinación de características, facilidad de uso y valor. Su motor de renderizado basado en Chrome asegura una conversión HTML a PDF impecable, mientras que la API simplificada acelera el desarrollo.
PDFTron sigue siendo viable para empresas con requisitos específicos alrededor de la conversión CAD, procesamiento de formularios complejos, o cuando se trabaja con formatos de documentos heredados. Sin embargo, la falta de transparencia en precios y la estructura de licenciamiento modular pueden aumentar significativamente los costos totales.
Para empezar
Prueba IronPDF:
Explora PDFTron:
Recuerda evaluar a fondo ambas opciones con tus casos de uso específicos antes de tomar una decisión. Considera factores como los costos a largo plazo, la calidad del soporte, y las hojas de ruta de características junto con las capacidades técnicas.
Preguntas Frecuentes
¿Cómo puedo convertir HTML a PDF en C#?
Puedes usar el método RenderHtmlAsPdf de IronPDF para convertir cadenas de HTML en PDFs. También puedes convertir archivos HTML a PDFs usando RenderHtmlFileAsPdf.
¿Cuáles son las diferencias de rendimiento entre IronPDF y PDFTron para la conversión de HTML a PDF?
IronPDF proporciona un renderizado superior para contenido web complejo con su motor basado en Chrome, ofreciendo mejor soporte for JavaScript y CSS3. PDFTron, aunque más rápido para HTML simple, puede no manejar contenido complejo tan efectivamente.
¿Cuáles son las opciones de licenciamiento para IronPDF y PDFTron?
IronPDF ofrece licencias transparentes y perpetuas con todas las funcionalidades incluidas a partir de $749. Sin embargo, PDFTron requiere cotizaciones personalizadas para el licenciamiento, que pueden variar de $5,000 a más de $100,000 anuales.
¿Es posible convertir páginas ASPX a PDF usando estas bibliotecas?
Sí, IronPDF puede convertir páginas ASPX a PDF usando el método AspxToPdf.RenderThisPageAsPdf en una sola línea de código. PDFTron no soporta directamente la conversión de páginas ASPX.
¿Qué biblioteca es más adecuada para entornos en la nube como Azure?
IronPDF está optimizado para entornos en la nube, incluyendo Azure y AWS, y funciona perfectamente con Functions y WebApps. PDFTron puede requerir configuraciones adicionales para un despliegue en la nube óptimo.
¿Puedes crear formularios PDF rellenables con IronPDF o PDFTron?
Sí, ambas bibliotecas soportan la creación de formularios PDF rellenables. IronPDF utiliza CreatePdfFormsFromHtml para la conversión automática de formularios HTML. PDFTron proporciona extensivos tipos de campos de formulario pero requiere una integración más compleja.
¿Qué opciones de soporte están disponibles para los usuarios de IronPDF y PDFTron?
IronPDF ofrece soporte de ingeniería 24/5 con acceso directo a desarrolladores y un tiempo de respuesta típico de 24-48 horas. Las opciones de soporte de PDFTron varían según el nivel de licencia, con soporte básico en foros y asistencia directa pagada.
¿Cómo comparan IronPDF y PDFTron en el manejo de sitios web protegidos con contraseña?
IronPDF soporta autenticación a través de ChromeHttpLoginCredentials para el manejo de formularios de inicio de sesión y autenticación HTTP, mientras que PDFTron tiene soporte limitado para esta función.



