Una Comparación entre IronPDF y PDFNet
1. Introducción
¿Buscas las herramientas PDF perfectas para el .NET Framework?
En este artículo, veremos cómo trabajar con archivos PDF en C# (uno de los lenguajes de programación más populares). Discutiremos dos herramientas PDF líderes en la industria para C# en el .NET Framework, usando muestras de código para compararlas en función de su rendimiento y características. Al final, examinaremos los detalles de sus licencias y aprenderemos cómo obtener claves de licencia.
Las dos bibliotecas PDF son:
- PDFNet
- IronPDF
2. IronPDF
IronPDF es una biblioteca C# .NET desarrollada por Iron Software para resolver todos los problemas de PDF para desarrolladores C# .NET usando una sola biblioteca. IronPDF está impulsado por un motor Chromium y tiene una variedad de capacidades útiles y poderosas, como la conversión de archivos HTML5, JavaScript, CSS e imágenes a PDF, creando encabezados y pies de página personalizados, y mostrando PDFs exactamente como aparecen en un navegador. IronPDF te permite leer datos de archivos PDF e insertarlos en tus aplicaciones .NET y sistemas de almacenamiento de datos automáticamente. Puedes importar, mover e indexar contenido de almacenamiento de documentos PDF antiguos en tus aplicaciones de gestión documental y empresariales.
2.1. Características de IronPDF
2.1.1. Conversiones PDF
Esta funcionalidad te permite generar archivos PDF desde varios formatos como HTML, vistas MVC, formularios web, cadenas HTML y URLs.
2.1.2. Extracción de contenido PDF
En muchas circunstancias, puedes fácilmente extraer texto incrustado de PDFs. Sin embargo, si eso falla, es probable que tu texto esté incrustado en una imagen. Para escanear documentos en busca de texto visual, en lugar de texto plano, utiliza la biblioteca IronOCR.
2.1.3 Encabezados y pie de página
Los encabezados y pies de página pueden añadirse al crear un PDF o a los PDFs existentes. Usando la propiedad Opciones de Impresión, puedes crear un encabezado y pie de página para cada página del documento. Estos parámetros están disponibles en el objeto ChromePdfRenderer. Este ejemplo se ejecuta dentro de una aplicación de consola .NET Core.
2.1.4. Procesamiento de imágenes PDF
Esto permite a los usuarios generar imágenes a partir de PDFs así como PDFs a partir de fotografías. Soporta extracción de imágenes, varias extensiones de imagen y impresión de PDF.
2.1.5. Documentos PDF IO
IronPDF también incluye encriptación PDF de 128 bits, protección de PDF con contraseña, y la firma digital de PDFs.
2.1.6. Edición de PDF
La herramienta IronPDF te permite añadir marcas de agua, añadir páginas, eliminar páginas, fondos, primeros planos, y mucho más a tus PDFs.
2.1.7. Compatibilidad
IronPDF soporta casi todos los sistemas operativos y marcos compatibles con C#, como:
- Windows
- .NET Core 2.1, 3.0, 3.1, .NET 6 & 5
- Cumplimiento de .NET Standard 2.0 para compatibilidad universal
- Azure
- AWS
- Docker
- Linux
3. PDFNet
PDFNet .NET SDK de PDFTron trae un procesamiento preciso de PDF, anotación, edición y creación a cualquier framework o aplicación en la web, móvil, escritorio o servidor. Gestiona todo el proceso de gestión de documentos e información con tu infraestructura y elimina la necesidad de dependencias de servidores de terceros. La plataforma web de PDFTron viene con una versión JS con la plataforma compatible y una clave de licencia de demostración para todos los SDKs de PDF.
Uno de los beneficios más significativos de PDFNet es que es verdaderamente multiplataforma, lo que permite a nuestros usuarios simplemente añadir compatibilidad con PDF y funciones comerciales relevantes a sus flujos de trabajo y aplicaciones en muchos contextos distintos de móvil y escritorio, todo mientras se utiliza prácticamente la misma interfaz.
3.1. Características de PDFNet SDK
3.1.1. Compatibilidad
El SDK de PDFNet es compatible con muchas plataformas y frameworks. Para asegurar la consistencia de la plataforma, se utiliza la API de JavaScript de la misma manera que la API de PDFNet. Las versiones de Node.js y Electron del SDK también están disponibles. Este paquete requiere binarios complementarios no administrados.
3.1.2. Edición y visualización
Brinda habilidades de lectura y edición para PDFs seguras, escalables y de alta calidad a los usuarios en todas las plataformas en línea, móviles y de escritorio.
3.1.3. Firma
Crea procedimientos de firma personalizados. Los documentos firmados digitalmente pueden ser certificados, validados y sellados.
3.1.4. Redacción real
Elimina datos sensibles de los documentos, como información personal o información personal de salud, mientras se deja el documento buscable.
3.1.5. Manipulación de la página
Se pueden añadir, eliminar o reordenar páginas. Los documentos pueden ser ensamblados, fusionados o divididos en partes. Ver varios documentos simultáneamente en el mismo lector o uno al lado del otro.
4. Creación de un nuevo proyecto en Visual Studio
En este artículo, vamos a usar una aplicación de consola para generar documentos PDF.
Abre el software Visual Studio y ve al menú de Archivo. Selecciona "nuevo proyecto" y luego selecciona aplicación de consola.
Introduce el nombre del proyecto y selecciona la ruta en el cuadro de texto correspondiente. Luego, haz clic en el botón de crear. Selecciona el framework .NET requerido, como en la captura de pantalla a continuación:

El proyecto de Visual Studio ahora generará la estructura para la aplicación de consola. Una vez terminado, abrirá el archivo Program.cs, en el cual se puede escribir y ejecutar código fuente.

Ahora podemos agregar la biblioteca y probar el programa.
5. Instalar la biblioteca IronPDF
La biblioteca IronPDF se puede descargar e instalar de cuatro maneras diferentes. Estas son:
- Usando el Administrador de Paquetes NuGet de Visual Studio
- Usando la Línea de Comandos de Visual Studio.
- Descarga Directa del Paquete IronPDF de la Galería NuGet.
- Descarga Directa de la Página de Descarga de IronPDF.
5.1 Uso del Administrador de paquetes NuGet de Visual Studio
El software Visual Studio proporciona la opción de Gestor de Paquetes NuGet para instalar el paquete directamente en la solución. La captura de pantalla a continuación muestra cómo abrir el Administrador de Paquetes NuGet.

Con la GUI del Administrador de Paquetes abierta, haz clic en la pestaña Explorar y busca "IronPDF:"

En la imagen de arriba, podemos ver la lista de paquetes relacionados de la búsqueda. Selecciona la opción IronPDF e instala el paquete en nuestra solución.
5.2 Uso de la línea de comandos de Visual Studio
- En el menú de Visual Studio, ve a Herramientas > Administrador de Paquetes NuGet > Consola del Administrador de Paquetes

- Ingresa la siguiente línea en la pestaña de consola del administrador de paquetes:
Install-Package IronPdf
El paquete IronPDF ahora estará instalado en el proyecto.

5.3 Descarga directa desde la página web de NuGet
La tercera forma es descargar el paquete NuGet directamente de la Galería NuGet del Paquete IronPDF.
- Seleccione la opción de descargar paquete desde el menú a la derecha.
- Haz doble click en el paquete descargado; se instalará automáticamente.
- Luego, recarga la solución y comienza a usarla en el proyecto.
5.4 Descarga directa desde la página web de IronPDF
Descarga el paquete más reciente directamente de la Página de Descarga de IronPDF. Después de la descarga, sigue los pasos a continuación para añadir el paquete al proyecto.
- Haga clic derecho en el proyecto desde la ventana de la solución.
- Luego, selecciona las opciones de referencia y navega a la ubicación de la referencia descargada.
- Haz clic en Aceptar para agregar la referencia.
6. Instalar PDFNet SDK
El SDK de PDFNet se puede descargar e instalar de cuatro maneras diferentes.
- Usando el Administrador de Paquetes NuGet de Visual Studio.
- Usando la Línea de Comandos de Visual Studio.
- Descarga Directa del Paquete PDFNet de la Galería NuGet.
- Usando PDFNetLoader.dll
6.1. Uso del Administrador de paquetes NuGet de Visual Studio
Como se explicó anteriormente, ve a herramientas en Visual Studio y abre el administrador de paquetes NuGet. Aparecerá una lista — haz clic en gestionar paquete NuGet para soluciones.

Aparecerá una ventana con una barra de búsqueda. Busca PDFNet e instálalo en el proyecto.
6.2. Uso de la línea de comandos de Visual Studio
- En el menú de Visual Studio, ve a Herramientas > Administrador de Paquetes NuGet > Consola del Administrador de Paquetes
- Ingresa la siguiente línea en la pestaña de consola del administrador de paquetes:
Install-Package PDFNet -Version 9.2.0

6.3. Descarga directa desde la página web de NuGet
La tercera forma es descargar el paquete NuGet directamente de la Galería NuGet del Paquete PDFNet.
- Elige la opción de descarga de paquetes desde el menú de la derecha.
- Haz doble clic en el paquete descargado para iniciar el proceso de instalación.
6.4. Uso de PDFNetLoader.dll
También puedes instalar la API de PDFNet usando el archivo PDFNetLoader.dll. Descárgalo desde Releases de GitHub para PDFNetLoader.dll.
Descarga el paquete, colócalo en el archivo bin del proyecto, y ejecútalo. En tu proyecto de Visual Studio, agrega PDFNetLoader.dll como referencia.
Traducción de Bootstrap y CSS Framework
Las aplicaciones web modernas dependen en gran medida de Bootstrap y los frameworks de CSS para un diseño consistente y responsivo. Al generar PDFs a partir de contenido web, la capacidad de representar con precisión estos frameworks sin modificación es esencial para mantener la consistencia del diseño y reducir el esfuerzo de desarrollo.
IronPDF: Soporte completo para el framework Bootstrap
- Bootstrap 5: sistema de diseño flexbox completo, CSS Grid, clases de utilidad y todas las bibliotecas de componentes
- Bootstrap 4: Componentes de tarjeta completos, navegación, utilidades flexibles y diseño responsivo
- Tailwind CSS: todas las clases que priorizan la utilidad se representan con precisión del navegador
- Fundación: Sistema de red completo y soporte de componentes
- CSS3 moderno: Flexbox, CSS Grid, propiedades personalizadas, animaciones, transiciones y transformaciones
Validación en el mundo real: IronPDF renderiza la página de inicio de Bootstrap y todos los ejemplos oficiales con fidelidad de píxel perfecta.
Ejemplo de Código: Panel de Control del Sistema de Gestión de Aprendizaje
using IronPdf;
// Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here";
var renderer = new ChromePdfRenderer();
string bootstrapLMS = @"
<!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'>
<div>
<h1 class='display-6 mb-1'>Student Learning Dashboard</h1>
<p class='text-muted mb-0'>Spring Semester 2025</p>
</div>
<span class='badge bg-success fs-5'>92% Overall Progress</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-primary'>
<div class='card-body'>
<div class='text-primary mb-2' style='font-size: 2rem;'>📚</div>
<h3 class='mb-1'>6/8</h3>
<p class='text-muted mb-0'>Courses Completed</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-success'>
<div class='card-body'>
<div class='text-success mb-2' style='font-size: 2rem;'>🎯</div>
<h3 class='mb-1'>24/28</h3>
<p class='text-muted mb-0'>Assignments Submitted</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-warning'>
<div class='card-body'>
<div class='text-warning mb-2' style='font-size: 2rem;'>⏱️</div>
<h3 class='mb-1'>48hrs</h3>
<p class='text-muted mb-0'>Study Time This Week</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-info'>
<div class='card-body'>
<div class='text-info mb-2' style='font-size: 2rem;'>⭐</div>
<h3 class='mb-1'>A- Average</h3>
<p class='text-muted mb-0'>Current GPA: 3.7</p>
</div>
</div>
</div>
</div>
<div class='row g-4'>
<div class='col-md-8'>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Current Courses</h5>
</div>
<div class='card-body p-0'>
<div class='list-group list-group-flush'>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Advanced Web Development</h6>
<small class='text-muted'>Prof. Johnson | Mondays & Wednesdays, 2:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 95%'></div>
</div>
<small class='text-muted'>95% Complete | Final Project Due: May 15</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Database Systems</h6>
<small class='text-muted'>Prof. Chen | Tuesdays & Thursdays, 10:00 AM</small>
</div>
<span class='badge bg-primary'>Grade: A-</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 88%'></div>
</div>
<small class='text-muted'>88% Complete | Midterm: April 28</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Artificial Intelligence Fundamentals</h6>
<small class='text-muted'>Prof. Martinez | Fridays, 1:00 PM</small>
</div>
<span class='badge bg-warning text-dark'>Grade: B+</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 75%'></div>
</div>
<small class='text-muted'>75% Complete | Research Paper Due: May 5</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Computer Networks</h6>
<small class='text-muted'>Prof. Davis | Mondays & Wednesdays, 4:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 92%'></div>
</div>
<small class='text-muted'>92% Complete | Lab Exam: April 30</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card shadow-sm mb-3'>
<div class='card-header bg-warning text-dark'>
<h5 class='mb-0'>Upcoming Deadlines</h5>
</div>
<div class='card-body p-0'>
<ul class='list-group list-group-flush'>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-danger me-2'>Today</span>
<div class='flex-grow-1'>
<small><strong>AI Assignment 4</strong></small>
<br><small class='text-muted'>Neural Networks Lab</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-warning text-dark me-2'>Apr 28</span>
<div class='flex-grow-1'>
<small><strong>Database Midterm</strong></small>
<br><small class='text-muted'>Chapters 1-8</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-info me-2'>Apr 30</span>
<div class='flex-grow-1'>
<small><strong>Networks Lab Exam</strong></small>
<br><small class='text-muted'>Practical Assessment</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-primary me-2'>May 5</span>
<div class='flex-grow-1'>
<small><strong>AI Research Paper</strong></small>
<br><small class='text-muted'>15-20 pages</small>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-info text-white'>
<h5 class='mb-0'>Study Resources</h5>
</div>
<div class='card-body'>
<div class='d-grid gap-2'>
<button class='btn btn-outline-primary btn-sm'>📖 Course Materials</button>
<button class='btn btn-outline-primary btn-sm'>💬 Discussion Forums</button>
<button class='btn btn-outline-primary btn-sm'>🎥 Recorded Lectures</button>
<button class='btn btn-outline-primary btn-sm'>📝 Practice Quizzes</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapLMS);
pdf.SaveAs("lms-dashboard.pdf");using IronPdf;
// Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here";
var renderer = new ChromePdfRenderer();
string bootstrapLMS = @"
<!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'>
<div>
<h1 class='display-6 mb-1'>Student Learning Dashboard</h1>
<p class='text-muted mb-0'>Spring Semester 2025</p>
</div>
<span class='badge bg-success fs-5'>92% Overall Progress</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-primary'>
<div class='card-body'>
<div class='text-primary mb-2' style='font-size: 2rem;'>📚</div>
<h3 class='mb-1'>6/8</h3>
<p class='text-muted mb-0'>Courses Completed</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-success'>
<div class='card-body'>
<div class='text-success mb-2' style='font-size: 2rem;'>🎯</div>
<h3 class='mb-1'>24/28</h3>
<p class='text-muted mb-0'>Assignments Submitted</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-warning'>
<div class='card-body'>
<div class='text-warning mb-2' style='font-size: 2rem;'>⏱️</div>
<h3 class='mb-1'>48hrs</h3>
<p class='text-muted mb-0'>Study Time This Week</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-info'>
<div class='card-body'>
<div class='text-info mb-2' style='font-size: 2rem;'>⭐</div>
<h3 class='mb-1'>A- Average</h3>
<p class='text-muted mb-0'>Current GPA: 3.7</p>
</div>
</div>
</div>
</div>
<div class='row g-4'>
<div class='col-md-8'>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Current Courses</h5>
</div>
<div class='card-body p-0'>
<div class='list-group list-group-flush'>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Advanced Web Development</h6>
<small class='text-muted'>Prof. Johnson | Mondays & Wednesdays, 2:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 95%'></div>
</div>
<small class='text-muted'>95% Complete | Final Project Due: May 15</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Database Systems</h6>
<small class='text-muted'>Prof. Chen | Tuesdays & Thursdays, 10:00 AM</small>
</div>
<span class='badge bg-primary'>Grade: A-</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 88%'></div>
</div>
<small class='text-muted'>88% Complete | Midterm: April 28</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Artificial Intelligence Fundamentals</h6>
<small class='text-muted'>Prof. Martinez | Fridays, 1:00 PM</small>
</div>
<span class='badge bg-warning text-dark'>Grade: B+</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 75%'></div>
</div>
<small class='text-muted'>75% Complete | Research Paper Due: May 5</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Computer Networks</h6>
<small class='text-muted'>Prof. Davis | Mondays & Wednesdays, 4:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 92%'></div>
</div>
<small class='text-muted'>92% Complete | Lab Exam: April 30</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card shadow-sm mb-3'>
<div class='card-header bg-warning text-dark'>
<h5 class='mb-0'>Upcoming Deadlines</h5>
</div>
<div class='card-body p-0'>
<ul class='list-group list-group-flush'>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-danger me-2'>Today</span>
<div class='flex-grow-1'>
<small><strong>AI Assignment 4</strong></small>
<br><small class='text-muted'>Neural Networks Lab</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-warning text-dark me-2'>Apr 28</span>
<div class='flex-grow-1'>
<small><strong>Database Midterm</strong></small>
<br><small class='text-muted'>Chapters 1-8</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-info me-2'>Apr 30</span>
<div class='flex-grow-1'>
<small><strong>Networks Lab Exam</strong></small>
<br><small class='text-muted'>Practical Assessment</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-primary me-2'>May 5</span>
<div class='flex-grow-1'>
<small><strong>AI Research Paper</strong></small>
<br><small class='text-muted'>15-20 pages</small>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-info text-white'>
<h5 class='mb-0'>Study Resources</h5>
</div>
<div class='card-body'>
<div class='d-grid gap-2'>
<button class='btn btn-outline-primary btn-sm'>📖 Course Materials</button>
<button class='btn btn-outline-primary btn-sm'>💬 Discussion Forums</button>
<button class='btn btn-outline-primary btn-sm'>🎥 Recorded Lectures</button>
<button class='btn btn-outline-primary btn-sm'>📝 Practice Quizzes</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapLMS);
pdf.SaveAs("lms-dashboard.pdf");Salida: Sistema de gestión de aprendizaje profesional en formato PDF con sistema de cuadrícula de Bootstrap 5, componentes de tarjeta, barras de progreso, insignias, diseños de flexbox y grupos de listas, todo ello renderizado con espaciado, tipografía y precisión de color perfectos.
PDFNet (Apryse): Compatibilidad parcial con CSS moderno
PDFNet utiliza un motor de renderizado HTML personalizado con soporte selectivo de CSS3:
- Implementación limitada de flexbox: los diseños basados en flex de Bootstrap 4/5 pueden renderizarse de manera inconsistente
- Compatibilidad parcial con CSS Grid: los diseños basados en cuadrículas a menudo requieren alternativas
- Restricciones de JavaScript: ejecución mínima en comparación con entornos de navegador completos
- Se requieren pruebas del marco: los componentes de Bootstrap necesitan validación antes de su uso en producción
Impacto en el desarrollo: los equipos deben probar cada componente de Bootstrap individualmente y, a menudo, crean diseños simplificados o CSS alternativos para PDFNet, lo que agrega complejidad y reduce la consistencia del diseño.
Para obtener orientación completa sobre el framework de Bootstrap y capacidades de renderizado del CSS moderno, consulta la Guía de CSS de Bootstrap & Flexbox.
7. Impresión de un archivo PDF (ejemplos de código)
Imprimir un archivo PDF es una función imprescindible para las aplicaciones modernas que manejan PDFs. Aquí, discutiremos cómo imprimir archivos PDF usando ambas herramientas.
7.1. Impresión de un archivo PDF utilizando IronPDF
IronPDF imprime un PDF enviándolo a la impresora predeterminada de la computadora. Esto abrirá la interfaz de impresión de Windows — solo haz clic en imprimir para que suceda.
using IronPdf;
class PrintPDF
{
static void Main(string[] args)
{
// Create a new PDF and print it
var Renderer = new IronPdf.ChromePdfRenderer();
PdfDocument Pdf = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Send the PDF to the default printer to print
Pdf.Print(300, false);
}
}using IronPdf;
class PrintPDF
{
static void Main(string[] args)
{
// Create a new PDF and print it
var Renderer = new IronPdf.ChromePdfRenderer();
PdfDocument Pdf = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Send the PDF to the default printer to print
Pdf.Print(300, false);
}
}7.2. Impresión de un archivo PDF mediante PDFNet
El SDK PDFNet de PDFTron también proporciona una función de impresión. A continuación se muestra el fragmento de código fuente para imprimir un archivo PDF en PDFNet.
using System;
using pdftron;
using pdftron.PDF;
using pdftron.Common;
using pdftron.Filters;
namespace PDFPrintTestCS
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Opening the input file...");
using (PDFDoc pdfdoc = new PDFDoc("tiger.pdf"))
{
pdfdoc.InitSecurityHandler();
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...");
PrinterMode printerMode = new PrinterMode();
printerMode.SetAutoCenter(true);
printerMode.SetAutoRotate(true);
printerMode.SetCollation(true);
printerMode.SetCopyCount(1);
printerMode.SetDPI(300); // Set print quality to 300 DPI
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto);
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom);
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait);
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations);
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale);
printerMode.SetOutputPageBorder(false);
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium);
printerMode.SetPaperSize(new Rect(0, 0, 612, 792));
PageSet pagesToPrint = new PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all);
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, null);
}
}
}
}using System;
using pdftron;
using pdftron.PDF;
using pdftron.Common;
using pdftron.Filters;
namespace PDFPrintTestCS
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Opening the input file...");
using (PDFDoc pdfdoc = new PDFDoc("tiger.pdf"))
{
pdfdoc.InitSecurityHandler();
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...");
PrinterMode printerMode = new PrinterMode();
printerMode.SetAutoCenter(true);
printerMode.SetAutoRotate(true);
printerMode.SetCollation(true);
printerMode.SetCopyCount(1);
printerMode.SetDPI(300); // Set print quality to 300 DPI
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto);
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom);
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait);
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations);
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale);
printerMode.SetOutputPageBorder(false);
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium);
printerMode.SetPaperSize(new Rect(0, 0, 612, 792));
PageSet pagesToPrint = new PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all);
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, null);
}
}
}
}8. Crear PDF a partir de HTML
Ambas bibliotecas poseen capacidades de conversión de HTML a PDF, pero los métodos son ligeramente diferentes.
8.1. Hacer PDFs a partir de HTML usando IronPDF
IronPDF no requiere el uso de JSON o mecanismos de encriptación. IronPDF soporta una amplia gama de métodos. Por ejemplo:
Archivos HTML a PDF
using IronPdf;
class HtmlToPdf
{
static void Main(string[] args)
{
var Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf");
}
}using IronPdf;
class HtmlToPdf
{
static void Main(string[] args)
{
var Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf");
}
}URL a PDF
using IronPdf;
class UrlToPdf
{
static void Main(string[] args)
{
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
}
}using IronPdf;
class UrlToPdf
{
static void Main(string[] args)
{
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
}
}
8.2. Crear PDF a partir de HTML con PDFNet
PDFNet también proporciona características de conversión de HTML a PDF usando tanto la conversión de página como la conversión de URL. Debido al código extenso, solo te daremos un ejemplo aquí.
class HTML2PDFSample
{
private static pdftron.PDFNetLoader pdfNetLoader = pdftron.PDFNetLoader.Instance();
static HTML2PDFSample() {}
static void Main(string[] args)
{
string output_path = "../../../../TestFiles/Output/html2pdf_example";
string host = "https://www.pdftron.com";
HTML2PDF.SetModulePath("../../../../../Lib");
if (!HTML2PDF.IsModuleAvailable())
{
Console.WriteLine();
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.");
return;
}
try
{
using (PDFDoc doc = new PDFDoc())
{
if (HTML2PDF.Convert(doc, host + "/"))
doc.Save(output_path + "_01.pdf", SDFDoc.SaveOptions.e_linearized);
else
Console.WriteLine("Conversion failed.");
}
}
catch (PDFNetException e)
{
Console.WriteLine(e.Message);
}
}
}class HTML2PDFSample
{
private static pdftron.PDFNetLoader pdfNetLoader = pdftron.PDFNetLoader.Instance();
static HTML2PDFSample() {}
static void Main(string[] args)
{
string output_path = "../../../../TestFiles/Output/html2pdf_example";
string host = "https://www.pdftron.com";
HTML2PDF.SetModulePath("../../../../../Lib");
if (!HTML2PDF.IsModuleAvailable())
{
Console.WriteLine();
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.");
return;
}
try
{
using (PDFDoc doc = new PDFDoc())
{
if (HTML2PDF.Convert(doc, host + "/"))
doc.Save(output_path + "_01.pdf", SDFDoc.SaveOptions.e_linearized);
else
Console.WriteLine("Conversion failed.");
}
}
catch (PDFNetException e)
{
Console.WriteLine(e.Message);
}
}
}
9. Licencias
IronPDF es una biblioteca que ofrece una licencia de desarrollador gratuita. IronPDF también ofrece una estructura de precios especial: el paquete ligero comienza en $799 sin costos ocultos. También es posible redistribuir productos SaaS y OEM. Todas las licencias incluyen una garantía de devolución de dinero de 30 días, un año de soporte y actualizaciones de software, validez para desarrollo/pruebas/piloto/producción, y una licencia perpetua (compra única). Las licencias de IronPDF maximizan el rendimiento para los usuarios. Ve a esta Página de Licencias de IronPDF para ver la estructura de precios y licencias completas de IronPDF.

El SDK PDFTron PDFNet viene con varias opciones de licencia que se adaptan a tus necesidades comerciales. Tres tipos de licencias vienen con redistribuciones empresariales y OEM. Las licencias empresariales son solo para uso organizacional y no pueden usarse en la distribución de aplicaciones. APIs adicionales que requieren acceso al sistema de archivos también están incluidas con las licencias. Todas las licencias vienen con una clave de licencia. Los tres tipos de licencias son:
- Visor
- Visor y Anotación
- SDK Core
Para obtener más información sobre sus estructuras de licencia, visita esta Página de Información de Licencias de PDFTron.
10. Conclusión
IronPDF ofrece muchas características y funcionalidades para procesar archivos PDF y convertirlos a diferentes formatos. Las conversiones de HTML a PDF se producen en un formato vectorial que es apropiado para impresiones comerciales de alta calidad. Como resultado, recibirás un PDF claro y de alta calidad. La información sobre licencias y precios se puede encontrar en el sitio web.
Similar a IronPDF, PDFNet ayuda con la transición, anotación, firma, relleno, conversión y edición de archivos PDF. Admite múltiples plataformas, incluidas Windows, iOS, Android, WEB y Linux. Para producción, los SDKs de PDFNet requieren una clave de producto.
Las licencias de IronPDF están centradas en el desarrollador, lo que significa que debes obtener una licencia basada en cuántos desarrolladores van a usar el producto. Por otro lado, las licencias de PDFNet no funcionan de la misma manera, operando en su lugar con una licencia basada en características. Esto significa que tienes que obtener la licencia que soporte las características que se requieren. Las licencias de IronPDF incluyen todas las funcionalidades desde el inicio. Con PDFNet, algunas características, como la conversión de documentos, necesitan ser compradas como complementos.
La biblioteca IronPDF ofrece funcionalidades de manera organizada, lo que facilita escribir código que realiza grandes tareas usando pocas líneas de código. Iron Software actualmente ofrece un paquete de cinco herramientas por el precio de solo dos. Las herramientas incluidas en el Iron Suite son:
Por favor visita esta Página de Información del Iron Suite para Explorar Iron Suite.
Preguntas Frecuentes
¿Cuáles son las principales bibliotecas PDF comparadas en el artículo?
El artículo compara IronPDF, desarrollado por Iron Software, y PDFNet de PDFTron, centrándose en sus capacidades para desarrolladores de C# dentro del .NET Framework.
¿Cómo puedo convertir HTML a PDF en C#?
Puede usar el método RenderHtmlAsPdf de IronPDF para convertir cadenas HTML en PDF. Además, puede convertir archivos HTML y URLs a PDF utilizando el robusto motor Chromium de IronPDF.
¿Qué sistemas operativos son compatibles con IronPDF?
IronPDF es compatible con múltiples sistemas operativos, incluidos Windows, Azure y Docker, lo que permite una integración sin problemas en diversos entornos de desarrollo.
¿Cómo maneja IronPDF la extracción de datos de PDF?
IronPDF permite una extracción eficiente de datos de PDF, lo que permite a los desarrolladores recuperar fácilmente texto e imágenes de documentos PDF para su posterior procesamiento.
¿Cuáles son las opciones de instalación para IronPDF?
IronPDF se puede instalar a través del Administrador de Paquetes NuGet de Visual Studio, la Línea de Comandos de Visual Studio o directamente desde la Galería NuGet, asegurando una configuración fácil para los desarrolladores.
¿Cuáles son las diferencias de licencia entre IronPDF y PDFNet?
IronPDF ofrece licencias centradas en el desarrollador que incluyen todas las características, mientras que las licencias de PDFNet son basadas en características y pueden requerir compras adicionales para funcionalidades específicas.
¿Es IronPDF adecuado para tareas PDF grandes?
Sí, IronPDF es elogiado por su facilidad de uso y requisitos mínimos de código, lo que lo hace adecuado para manejar grandes tareas PDF de manera eficiente.
¿Qué herramientas adicionales se incluyen en el paquete de Iron Software?
El paquete de Iron Software incluye IronBarcode, IronXL, IronOCR, IronPDF e IronWebscraper, disponibles como un paquete conjunto, lo que aumenta su atractivo para los desarrolladores.






