# HTML a PDF en C# .NET
Como desarrolladores de IronPDF, sabemos lo importante que es para la conversión de HTML a PDF producir resultados precisos y de alta calidad que cumplan con las expectativas del cliente. Este tutorial de C# te guiará a través de la construcción de un convertidor de HTML a PDF para tus aplicaciones, proyectos y sitios web. Desarrollaremos un convertidor de HTML a PDF en C#, y los documentos PDF de salida de IronPDF serán idénticos a los PDFs generados por el navegador web Google Chrome.
```cs
:title=Get started making PDFs now!
IronPdf.ChromePdfRenderer
.StaticRenderHtmlAsPdf("<p>Hello World</p>")
.SaveAs("pixelperfect.pdf");
```
<hr class="separator" />
<p class="main-content__segment-title">Visión General</p>
<div class="hsg-featured-snippet">
<h2>Cómo Convertir HTML a PDF en C#</h2>
<img class="featured-snippet__image featured-snippet__image--float-right featured-snippet__image--html-pdf" src="/static-assets/pdf/images/html-to-pdf-converter-in-csharp.png" alt="Cómo Convertir HTML a PDF en C#" />
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronPdf/">Descargar e instalar la biblioteca de HTML a PDF en C#</a></li>
<li><a href="#anchor-create-a-pdf-with-an-html-string-in-c-net">Crear un PDF con una Cadena HTML</a></li>
<li><a href="#anchor-create-a-pdf-with-an-html-string-in-c-net">Usar el método RenderHtmlAsPdf para convertir una Cadena HTML a un PDF</a></li>
<li><a href="#anchor-export-a-pdf-using-existing-url">Exportar un PDF usando una URL existente</a></li>
<li><a href="#anchor-generate-a-pdf-from-a-html-page">Generar un PDF desde una página HTML</a></li>
<li><a href="#anchor-add-custom-headers-and-footers">Agregar Encabezados y Pies de Página Personalizados</a></li>
<li>Llamar a SaveAs para guardar el archivo PDF en la computadora</li>
<li><a href="#anchor-c-html-to-pdf-conversion-settings">Más</a></li>
</ol>
</div>
<br class="main-article__clear-both" />
## Convertidor de HTML a PDF para C# y VB.NET
Crear archivos PDF programáticamente en .NET puede ser una tarea frustrante. El formato de archivo de documento PDF fue diseñado más para impresoras que para desarrolladores. Y C# no tiene muchas bibliotecas o características adecuadas para la generación de PDF integradas, muchas bibliotecas necesitan configuración adicional, y causan más frustración cuando requieren múltiples líneas de código para lograr una tarea simple.
La herramienta de conversión de HTML a PDF en C# que usaremos en este tutorial es IronPDF de Iron Software, una biblioteca de generación y edición de PDF en C# altamente popular. Esta biblioteca tiene funcionalidad completa de edición y generación de PDF, funciona de inmediato, hace exactamente lo que necesitas con la menor cantidad de líneas, y tiene [documentación sobresaliente de sus más de 50 características](/features/). IronPDF se destaca en que soporta **.NET 10, .NET 9, .NET 8, .NET 7, .NET 6, y .NET 5**, .NET Core, .NET Standard, y .NET Framework en Windows, macOS, Linux, Docker, Azure, y AWS.
Con C# e IronPDF, la lógica para "<a href="/how-to/create-new-pdfs/">generar un documento PDF</a>" o "<a href="/examples/using-html-to-create-a-pdf/">conversión de HTML a PDF</a>" es sencilla. Debido al avanzado Chrome Renderer de IronPDF, la mayoría o todo el diseño y la disposición del documento PDF utilizarán activos HTML existentes.
Este método de generación dinámica de PDF en .NET con HTML5 funciona igualmente bien en aplicaciones de consola, aplicaciones de Windows Forms, WPF, así como en sitios web y MVC.
**IronPDF también soporta la depuración de tu HTML con Chrome para PDFs Perfectos en Píxeles. Un tutorial para configurar esto se puede encontrar <a href="/how-to/pixel-perfect-html-to-pdf/">aquí</a>.**
IronPDF está disponible en varios idiomas, tanto dentro como fuera del ecosistema .NET.
- [Guía de F#](/get-started/fsharp-pdf-library-html-to-pdf/)
- [Guía de VB.NET](/get-started/vb-net-pdf/)
- [Python](/python/tutorials/html-to-pdf/)
- [Java](/java/tutorials/html-to-pdf/)
- [Node.js](/nodejs/tutorials/html-to-pdf/)
IronPDF es gratuito para desarrollo; se necesita una clave de licencia para desplegar en vivo y para eliminar la marca de agua de prueba. Puedes [comprar una licencia aquí](/licensing/) o registrarte para una <a class='js-modal-open' data-modal-id='trial-license'>clave de prueba gratuita de 30 días aquí</a>.
<hr class="separator" />
<p class="main-content__segment-title">Paso 1</p>
## Descargar e Instalar la Biblioteca de HTML a PDF en C#
### Visual Studio - Administrador de Paquetes NuGet
En Visual Studio, haz clic derecho en tu explorador de soluciones del proyecto y selecciona "Administrar Paquetes NuGet...". Desde allí simplemente busca IronPDF e instala la última versión en tu solución... haz clic en OK en cualquier cuadro de diálogo que aparezca. Esto también funcionará igual de bien en proyectos de VB.NET.
```shell
:ProductInstall
```
### IronPDF en el Sitio Web de NuGet
Para una descripción completa de las características, compatibilidad y descargas de IronPDF, por favor revisa IronPDF en el sitio web oficial de NuGet: <a class="js-modal-open" href="https://www.nuget.org/packages/IronPdf" target="_blank" data-modal-id="trial-license-after-download">https://www.nuget.org/packages/IronPdf</a>
### Instalación vía DLL
Otra opción es instalar el DLL de IronPDF directamente. IronPDF se puede descargar e instalar manualmente en el proyecto o GAC desde <a class="js-modal-open" href="/packages/IronPdf.zip" data-modal-id="trial-license-after-download">https://ironpdf.com/packages/IronPdf.zip</a>
<hr class="separator" />
<p class="main-content__segment-title">Tutoriales</p>
## Crear un PDF con una Cadena HTML en C# .NET
**¿Cómo: Convertir una Cadena HTML a PDF?** Es una habilidad muy eficiente y gratificante *crear un nuevo archivo PDF en C#*.
Podemos simplemente usar el método [ChromePdfRenderer.RenderHtmlAsPdf](/object-reference/api/IronPdf.ChromePdfRenderer.html) para convertir cualquier cadena HTML (HTML5) en un PDF. **La renderización de HTML a PDF en C#** se realiza mediante una versión completamente funcional del motor Google Chromium que se incluye con el paquete NuGet de IronPDF.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-1.cs
```
`RenderHtmlAsPdf` soporta completamente HTML5, CSS3, JavaScript e imágenes. Si estos activos están en un disco duro, es posible que queramos establecer el segundo parámetro de `RenderHtmlAsPdf` en el directorio que contiene los activos. Este método devuelve un objeto **PdfDocument**, que es una clase utilizada para contener información de PDF.
### IronPDF renderizará tu HTML exactamente como aparece en Chrome
Tenemos un tutorial completo dedicado a permitirte configurar Chrome para una depuración completa de HTML para asegurarte de que los cambios que ves allí al editar tu HTML, CSS y JavaScript sean exactamente iguales al PDF de salida de IronPDF cuando elijas renderizar. Por favor, encuentra el tutorial aquí: [Cómo Depurar HTML en Chrome para Crear PDFs Perfectos en Píxeles](/how-to/pixel-perfect-html-to-pdf/).
**Ruta URL base** (el argumento `BaseUrlOrPath`):
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-2.cs
```
Todos los estilos CSS, imágenes y archivos JavaScript referenciados serán relativos a esa ruta base y pueden mantenerse en una estructura ordenada y lógica. También puedes, por supuesto, optar por referenciar imágenes, hojas de estilo y activos en línea, incluyendo fuentes web como Google Fonts e incluso jQuery.
<hr class="separator" />
## Exportar un PDF Usando una URL Existente | URL a PDF
Renderizar URLs existentes como PDFs con C# es muy eficiente e intuitivo. Esto también permite a los equipos dividir el diseño de PDF y el trabajo de renderización de PDF en el back-end entre múltiples equipos.
Vamos a renderizar una página de Wikipedia.com en el siguiente ejemplo:
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-3.cs
```
Notarás que los hipervínculos e incluso los formularios HTML se conservan dentro del PDF generado por nuestro código C#.
Al renderizar páginas web existentes, tenemos algunos trucos que podemos desear aplicar:
### CSS de Impresión y Pantalla
Los tipos de medios CSS permiten que una página lleve estilos separados para impresión y pantalla. Podemos instruir a IronPDF para que renderice el CSS de "Impresión", que a menudo es más simple. Por defecto, se renderizarán los estilos CSS de "Pantalla", que coinciden con lo que ves en el navegador.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-4.cs
```
Artículo Principal: [Comparación de HTML a PDF Perfecto en Píxeles](/how-to/pixel-perfect-html-to-pdf/#decide-to-use-css-media-type-print-or-screen).
### JavaScript
IronPDF soporta JavaScript, jQuery e incluso AJAX. Podemos necesitar instruir a [IronPDF para que **espere** a que JS o ajax](/how-to/javascript-to-pdf/) terminen de ejecutarse antes de renderizar una instantánea de nuestra página web.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-5.cs
```
Podemos demostrar el soporte de JavaScript renderizando la [página de documentación del diagrama de acordes de d3.js](https://d3js.org/d3-chord), cuyos gráficos son dibujados por JavaScript cuando la página se carga:
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-6.cs
```
### CSS Responsivo
¡HTML a PDF usando CSS responsivo en .NET! [Las páginas web responsivas](/how-to/html-to-pdf-responsive-css/) están diseñadas para ser vistas en un navegador. IronPDF no abre una ventana de navegador real dentro del sistema operativo de tu servidor. Sin una ventana de visualización del navegador, los diseños responsivos pueden retroceder a su punto de interrupción más estrecho.
Recomendamos usar tipos de medios CSS de **Impresión** para navegar este problema. El CSS de impresión normalmente no debería ser responsivo.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-7.cs
```
<hr class="separator" />
## Generar un PDF desde una Página HTML
También podemos renderizar cualquier página HTML a PDF en nuestro disco duro. Todos los activos relativos como CSS, imágenes y js se renderizarán como si el archivo se hubiera abierto usando el protocolo **file://**.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-8.cs
```
Este método tiene la ventaja de permitir al desarrollador la oportunidad de probar el contenido HTML en un navegador durante el desarrollo. Recomendamos Chrome ya que es el navegador web en el que se basa el motor de renderización de IronPDF.
Para convertir [XML a PDF puedes usar plantillas XSLT para imprimir tu contenido XML a PDF](/how-to/xml-to-pdf/).
<hr class="separator" />
## Agregar Encabezados y Pies de Página Personalizados
Los encabezados y pies de página se pueden agregar a los PDFs cuando se renderizan, o a archivos PDF existentes usando IronPDF.
Con IronPDF, los encabezados y pies de página pueden contener contenido simple basado en texto usando la clase *`TextHeaderFooter`* - o con imágenes y contenido HTML enriquecido usando la clase *`HtmlHeaderFooter`*.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-9.cs
```
Explora todas las opciones de renderización en el siguiente artículo de cómo hacer: [Cómo Usar las Opciones de Renderización](/how-to/rendering-options/).
### Encabezados y Pies de Página HTML
La clase `HtmlHeaderFooter` permite que se generen encabezados y pies de página enriquecidos usando contenido HTML5 que incluso puede incluir imágenes y hojas de estilo.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-10.cs
```
### Datos Dinámicos en Encabezados y Pies de Página de PDF
Podemos "fusionar" contenido en el texto e incluso HTML de encabezados y pies de página usando marcadores de posición como:
- `{page}` para el número de página actual
- `{total-pages}` para el total de páginas en el PDF
- `{url}` para la URL del PDF renderizado si se renderizó desde una página web
- `{date}` para la fecha de hoy
- `{time}` para la hora actual
- `{html-title}` para el `<title>` del documento HTML renderizado
- `{pdf-title}` para el título del documento, que puede establecerse a través de ChromePdfRenderOptions
<hr class="separator" />
## Configuración de Conversión de HTML a PDF en C#
Hay muchas sutilezas en cómo nuestros usuarios y clientes pueden esperar que se renderice el contenido PDF.
La clase `ChromePdfRenderer` contiene una propiedad **RenderingOptions** que se puede usar para establecer estas opciones.
Por ejemplo, podemos desear elegir aceptar solo directivas CSS3 de "`print`":
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-11.cs
```
También podemos desear cambiar el tamaño de nuestros márgenes de impresión para crear más espacio en blanco en la página, para hacer espacio para encabezados o pies de página grandes, o incluso establecer márgenes cero para la impresión comercial de folletos o carteles:
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-12.cs
```
Podemos desear activar o desactivar imágenes de fondo de elementos HTML:
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-13.cs
```
También es posible establecer que nuestros PDFs de salida se rendericen en cualquier tamaño de papel virtual, incluyendo tamaños de retrato y paisaje e incluso tamaños personalizados que pueden establecerse en milímetros o pulgadas.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-14.cs
```
Explora todas las opciones de renderización en el siguiente artículo de cómo hacer: "[Cómo Usar las Opciones de Renderización](/how-to/rendering-options/)."
<hr class="separator" />
## Aplicar Plantillas HTML
Plantillar o "crear en lote" PDFs es un requisito común para desarrolladores de Internet y sitios web.
En lugar de plantillar un documento PDF en sí, con IronPDF podemos plantillar nuestro HTML usando tecnologías existentes y bien probadas. Cuando la plantilla HTML se combina con datos de una cadena de consulta o base de datos, terminamos con un documento PDF generado dinámicamente.
En el caso más simple, usar el método C# String.Format es efectivo para un ejemplo básico.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-15.cs
```
Si el archivo HTML es más largo, a menudo podemos usar marcadores de posición arbitrarios como `[[NAME]]` y reemplazarlos con datos reales más tarde.
El siguiente ejemplo creará 3 PDFs, cada uno personalizado para un usuario.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-16.cs
```
### Plantillado Avanzado Con Handlebars.NET
Un método sofisticado para fusionar datos de C# con HTML para la generación de PDF es usar el lenguaje de plantillas Handlebars.
Handlebars hace posible crear HTML dinámico a partir de objetos y instancias de clase de C#, incluyendo registros de base de datos. Handlebars es particularmente efectivo donde una consulta puede devolver un número desconocido de filas, como en la generación de una factura.
Primero debemos agregar un paquete NuGet adicional a nuestro proyecto: [https://www.nuget.org/packages/Handlebars.NET/](https://www.nuget.org/packages/Handlebars.NET/)
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-17.cs
```
Para renderizar este HTML podemos simplemente usar el método `RenderHtmlAsPdf`.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-18.cs
```
Puedes aprender más sobre el lenguaje de plantillas Handlebars y su implementación en C# desde [GitHub](https://github.com/Handlebars-Net/Handlebars.Net).
### Agregar Saltos de Página usando HTML5
Un requisito común en un documento PDF es la paginación. Los desarrolladores necesitan controlar dónde comienzan y terminan las páginas PDF para un diseño limpio y legible.
La forma más fácil de hacer esto es con un truco de CSS poco conocido que renderizará un salto de página en cualquier documento HTML impreso.
```html
<div style='page-break-after: always;'> </div>
```
El HTML proporcionado funciona, pero difícilmente es una buena práctica. Aconsejamos ajustar el atributo de medios como el siguiente ejemplo. Una forma tan ordenada y limpia de organizar contenido HTML de varias páginas. Debido a que IronPDF renderiza con el tipo de medios `screen` por defecto, una hoja de estilo `media="print"` solo se aplica cuando `RenderingOptions.CssMediaType` se establece en `PdfCssMediaType.Print` (ver [Configuración de Conversión](#anchor-c-html-to-pdf-conversion-settings) arriba).
```html
<!DOCTYPE html>
<html>
<head>
<style type="text/css" media="print">
.page {
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>This is Page 1</h1>
</div>
<div class="page">
<h1>This is Page 2</h1>
</div>
<div class="page">
<h1>This is Page 3</h1>
</div>
</body>
</html>
```
El Cómo Hacer detalla más [consejos y trucos con Saltos de Página](/how-to/html-to-pdf-page-breaks/).
<hr class="separator" />
## Adjuntar una Página de Portada a un PDF
IronPDF facilita la fusión de documentos PDF. El uso más común de esta técnica es agregar una página de portada o una página final a un documento PDF renderizado existente.
Para hacerlo, primero renderizamos una página de portada y luego usamos el método estático `PdfDocument.Merge()` para combinar los dos documentos.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-19.cs
```
Un ejemplo de código completo se puede encontrar aquí: [Ejemplo de Código de Página de Portada de PDF](/examples/pdf-cover-page/).
<hr class="separator" />
## Agregar una Marca de Agua
Una característica final de [C# PDF](/use-case/csharp-pdf/) que IronPDF soporta es agregar una marca de agua a los documentos. Esto se puede usar para agregar un aviso a cada página de que un documento es "confidencial" o una "muestra".
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-20.cs
```
Un ejemplo de código completo se puede encontrar aquí: [Ejemplo de Código de Marca de Agua de PDF](/examples/pdf-watermarking/).
<hr class="separator" />
## Descargar Código Fuente en C#
El **código fuente gratuito del convertidor de HTML a PDF en C#** completo para este tutorial está disponible para descargar como un archivo de proyecto de Visual Studio 2022 comprimido. Usará su motor de renderización para generar objetos de documentos PDF en C#.
[Descarga este tutorial como un proyecto de Visual Studio](/tutorials/html-to-pdf/downloads/CSharp-Html-To-Pdf-Tutorial.zip)
La descarga gratuita contiene todo lo que necesitas para crear un PDF desde HTML, incluyendo ejemplos de código de PDF en C# que funcionan para:
1. Convertir una Cadena HTML a PDF usando C#
2. Archivo HTML a PDF en C# (soportando CSS, JavaScript e imágenes)
3. HTML a PDF en C# usando una URL ("URL a PDF")
4. Ejemplos de edición y configuración de PDF en C#
5. Renderización de gráficos de lienzo JavaScript como d3.js a un PDF
6. La Biblioteca de PDF para C#
### Referencia de Clase
Los desarrolladores también pueden estar interesados en la referencia de la Clase `IronPdf.PdfDocument`:
[https://ironpdf.com/object-reference/api/IronPdf.PdfDocument.html](https://ironpdf.com/object-reference/api/IronPdf.PdfDocument.html)
Este modelo de objeto muestra cómo los documentos PDF pueden ser:
- Encriptados y protegidos con contraseña
- Editados o 'sellados' con nuevo contenido HTML
- Mejorados con imágenes de fondo y primer plano
- Fusionados, unidos, truncados y empalmados a nivel de página o documento
- Analizados para extraer texto plano e imágenes, o procesados con OCR con el paquete IronOCR
<hr class="separator" />
## HTML a PDF en Blazor
Agregar funcionalidad de HTML a PDF a tu servidor Blazor es fácil, simplemente:
1. Crea un nuevo proyecto de servidor Blazor o usa uno existente
2. Agrega la biblioteca IronPDF a tu proyecto usando NuGet
3. Agrega un nuevo Componente Razor o usa uno existente
4. Agrega un `InputTextArea` y enlázalo a IronPDF
5. Deja que IronPDF se encargue del resto y despliega
Para más información, continúa con la [guía paso a paso completa](/how-to/blazor-tutorial/) para [convertir HTML a PDF en aplicaciones Blazor](/how-to/blazor-tutorial/).
<img src="/static-assets/pdf/tutorials/blazor-tutorial/blazor-tutorial-3.webp" alt="PDF generado desde una página del Servidor Blazor con IronPDF" />
<hr class="separator" />
## Comparar con Otras Bibliotecas de PDF
IronPDF es una biblioteca de PDF poderosa y completa diseñada para desarrolladores modernos de .NET. Con conversión nativa de HTML a PDF impulsada por un motor Chromium avanzado, una API intuitiva y actualizaciones regulares, simplifica el desarrollo mientras asegura resultados de alta calidad. Veamos más de cerca cómo se compara con otras herramientas:
### PDFSharp
- **Características Principales**: PDFsharp es una biblioteca de código abierto (MIT) para crear y editar documentos PDF en código administrado. No tiene motor de renderización HTML, por lo que convertir contenido web a PDF necesita un renderizador de terceros separado.
- **Estándares Modernos**: IronPDF aprovecha las tecnologías web modernas, incluyendo HTML, CSS y JavaScript, a través de su motor basado en Chromium, asegurando que los PDFs mantengan un aspecto y sensación contemporáneos.
- **Soporte y Actualizaciones**: PDFsharp es de código abierto y lanza una versión cada pocos meses, con soporte comercial vendido por separado por su mantenedor. IronPDF lanza actualizaciones mensuales y parches de seguridad, y cada licencia incluye soporte profesional de ingeniería, lo cual es importante para aplicaciones empresariales.
### wkhtmltopdf
- **Facilidad de Integración**: wkhtmltopdf es una herramienta de línea de comandos con una biblioteca C; no hay un paquete oficial de .NET, por lo que usarlo desde .NET significa lanzar el binario nativo (o llamarlo a través de un envoltorio de terceros como DinkToPdf) y enviar ese binario para cada plataforma a la que despliegues.
- **Tecnología de Renderización**: wkhtmltopdf renderiza con QtWebKit, un fork de WebKit que Qt descontinuó en 2015 y eliminó en Qt 5.6, por lo que las características modernas de JavaScript y CSS no son compatibles, especialmente en sitios web dinámicos y ricos en contenido. El motor Chromium de IronPDF renderiza estándares web actuales.
- **Desarrollo Continuo**: La última versión de wkhtmltopdf fue la 0.12.6 en junio de 2020 y su repositorio de GitHub fue archivado en enero de 2023, por lo que no hay soporte del proveedor. IronPDF continúa evolucionando con actualizaciones mensuales y servicio al cliente dedicado.
### iTextSharp
- **Renderización de HTML a PDF**: iText convierte HTML a través de su complemento separado pdfHTML, un motor de diseño CSS en lugar de un navegador, y la línea heredada iTextSharp 5 ahora solo recibe correcciones de seguridad. IronPDF renderiza HTML con un motor Chromium incrustado en el paquete principal, sin necesidad de complemento.
- **Experiencia del Desarrollador**: La API de iText funciona a nivel de objetos PDF y elementos de diseño, lo cual es poderoso pero significa más código para tareas cotidianas. IronPDF ofrece una API C# limpia e intuitiva, simplificando la codificación y acelerando la entrega de proyectos.
- **Mantenimiento y Soporte**: El uso gratuito de iText está bajo la AGPL, con soporte del proveedor reservado para licencias comerciales, y iTextSharp 5.x está en fin de vida aparte de las correcciones de seguridad. IronPDF incluye soporte profesional y actualizaciones mensuales con cada licencia.
### Aspose.PDF
- **Calidad de Conversión**: Aspose.PDF convierte HTML con su propio motor de diseño en lugar de un navegador. Su documentación convierte una página web primero obteniendo el HTML con `HttpClient` en un flujo y pasándolo a `Document` con `HtmlLoadOptions`, en lugar de renderizar directamente desde una URL. En nuestra prueba r/nfl a continuación, la salida fue casi vacía: el logo de la comunidad, un titular y algunas cajas vacías. El motor Chromium de IronPDF renderiza una URL directamente, incluido JavaScript.
- **Usabilidad de la API**: La API de Aspose.PDF puede ser verbosa, mientras que IronPDF se enfoca en una experiencia amigable para el desarrollador que minimiza el tiempo de configuración y mejora la productividad.
- **Fidelidad de Salida**: Debido a que IronPDF renderiza con Chromium, el PDF coincide con lo que Chrome muestra para el mismo HTML, lo que hace que el diseño y la depuración sean predecibles para la generación de PDF de alto volumen.
### Syncfusion PDF
- **Complejidad de la API**: Syncfusion PDF es una biblioteca capaz con una superficie de API más grande para aprender. IronPDF, por el contrario, proporciona una API sencilla para una integración rápida.
- **Motor de Renderización**: El convertidor HTML de Syncfusion ahora usa el motor Chromium Blink; sus motores WebKit e Internet Explorer más antiguos fueron marcados como obsoletos en Essential Studio 2022 Volume 3. En nuestra prueba r/nfl a continuación, la salida de Syncfusion mantuvo el feed principal pero eliminó los paneles de navegación y comunidad, mientras que el motor Chromium de IronPDF renderizó toda la página.
- **Más Allá de la Conversión**: El paquete de IronPDF también cubre firmas digitales, anotaciones, llenado de formularios y estampado de códigos de barras, por lo que la misma biblioteca maneja el resto del flujo de trabajo del documento.
### Comparación de Renderización
Para comparar la calidad de conversión de HTML a PDF de estas bibliotecas, usamos una página de la comunidad de Reddit, r/nfl, que contiene contenido dinámico, actualizaciones en vivo, CSS moderno y elementos basados en JavaScript:
`https://www.reddit.com/r/nfl/`

Aquí están los resultados de una sola ejecución con la configuración predeterminada de cada biblioteca. Syncfusion y Aspose.PDF se ejecutaron como compilaciones de evaluación, por lo que su salida lleva marcas de agua de evaluación (*haz clic en cada imagen para verla ampliada*):
<div class="competitors-section__wrapper">
<div class="competitors__card half">
<p class="competitors__header">IronPDF</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-2.webp"
alt="Salida de la conversión de IronPDF de la página r/nfl de Reddit de HTML a PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-2.webp" />
<small><strong>PDF bien formateado y visualmente preciso, preservando contenido dinámico y estilo moderno.</strong></small>
</div>
<div class="competitors__card half">
<p class="competitors__header">SyncFusion</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-3.webp"
alt="Salida de la conversión de Syncfusion de la página r/nfl de Reddit de HTML a PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-3.webp" />
<small><strong>Convertido con una compilación de prueba. El feed principal, el contenido de las publicaciones y el estilo se mantuvieron en un diseño de columna única estrecha, pero se eliminaron la navegación izquierda y el panel de comunidad a la derecha.</strong></small>
</div>
</div>
<div class="competitors-section__wrapper">
<div class="competitors__card half">
<p class="competitors__header">Aspose.PDF</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-4.webp"
alt="Salida de la conversión de Aspose.PDF de la página r/nfl de Reddit de HTML a PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-4.webp" />
<small><strong>Compilación de evaluación; requirió descargar el HTML primero (Aspose.PDF carga HTML desde un flujo en lugar de una URL). La salida fue casi vacía: el logo de la comunidad, un titular y algunas cajas vacías.</strong></small>
</div>
<div class="competitors__card half">
<p class="competitors__header">Wkhtmltopdf</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-5.webp"
alt="Salida de la conversión de wkhtmltopdf de la página r/nfl de Reddit de HTML a PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-5.webp" />
<small><strong>wkhtmltopdf completó la conversión, pero el resultado es el texto y las imágenes de la página sin ninguno de sus diseños, estilos, elementos dinámicos o interactividad. Esto hace que wkhtmltopdf no sea adecuado para páginas web modernas y dinámicas.</strong></small>
</div>
</div>
[{i:(PDFsharp no tiene motor de renderización HTML, e iText convierte HTML solo a través de su complemento separado pdfHTML, por lo que ninguno fue incluido en esta prueba de renderización de navegador.)}]
### Conclusión
Para los desarrolladores de .NET que buscan una solución PDF moderna y confiable, IronPDF es una opción sólida. Su conversión de HTML a PDF basada en Chromium, facilidad de uso, actualizaciones regulares y amplio conjunto de características lo convierten en una opción destacada. Ya sea que estés trabajando en un proyecto pequeño o en una aplicación empresarial a gran escala, IronPDF mejora la productividad mientras evita los riesgos asociados con bibliotecas obsoletas o no soportadas. Diseñado para aplicaciones comerciales, IronPDF mantiene tus proyectos en una biblioteca mantenida y soportada.
En nuestra prueba con una página web dinámica del mundo real, IronPDF produjo la renderización más completa y precisa. Syncfusion eliminó los paneles de navegación y comunidad. Aspose.PDF requirió descargar el HTML primero y aún así casi no renderizó la página. wkhtmltopdf produjo el texto y las imágenes sin el estilo de la página, una mala opción para sitios modernos.
Para flujos de trabajo modernos de HTML a PDF, esa combinación de precisión de renderización y una API pequeña y legible es lo que distingue a IronPDF.
**Experimenta la suite completa de características de IronPDF que convierte HTML dinámico y con CSS pesado a PDF con facilidad. Pruébalo ahora con nuestra [prueba gratuita](trial-license).**
<hr class="separator" />
## Ver Video Tutorial de HTML a PDF en C#
<a name="video"></a>
Con el documento PDF, puedes visitar el siguiente enlace para aprender cómo [configurar Chrome para abrir PDFs en el navegador en lugar de descargarlos](https://support.google.com/chrome/answer/114662).
!!!--LIBRARY_GET_STARTED_WITH_PRODUCT_TRIAL_EXTENDED_BLOCK--!!!
Como desarrolladores de IronPDF, sabemos lo importante que es para la conversión de HTML a PDF producir resultados precisos y de alta calidad que cumplan con las expectativas del cliente. Este tutorial de C# te guiará a través de la construcción de un convertidor de HTML a PDF para tus aplicaciones, proyectos y sitios web. Desarrollaremos un convertidor de HTML a PDF en C#, y los documentos PDF de salida de IronPDF serán idénticos a los PDFs generados por el navegador web Google Chrome.
Crear archivos PDF programáticamente en .NET puede ser una tarea frustrante. El formato de archivo de documento PDF fue diseñado más para impresoras que para desarrolladores. Y C# no tiene muchas bibliotecas o características adecuadas para la generación de PDF integradas, muchas bibliotecas necesitan configuración adicional, y causan más frustración cuando requieren múltiples líneas de código para lograr una tarea simple.
La herramienta de conversión de HTML a PDF en C# que usaremos en este tutorial es IronPDF de Iron Software, una biblioteca de generación y edición de PDF en C# altamente popular. Esta biblioteca tiene funcionalidad completa de edición y generación de PDF, funciona de inmediato, hace exactamente lo que necesitas con la menor cantidad de líneas, y tiene documentación sobresaliente de sus más de 50 características. IronPDF se destaca en que soporta .NET 10, .NET 9, .NET 8, .NET 7, .NET 6, y .NET 5, .NET Core, .NET Standard, y .NET Framework en Windows, macOS, Linux, Docker, Azure, y AWS.
Con C# e IronPDF, la lógica para "generar un documento PDF" o "conversión de HTML a PDF" es sencilla. Debido al avanzado Chrome Renderer de IronPDF, la mayoría o todo el diseño y la disposición del documento PDF utilizarán activos HTML existentes.
Este método de generación dinámica de PDF en .NET con HTML5 funciona igualmente bien en aplicaciones de consola, aplicaciones de Windows Forms, WPF, así como en sitios web y MVC.
IronPDF también soporta la depuración de tu HTML con Chrome para PDFs Perfectos en Píxeles. Un tutorial para configurar esto se puede encontrar aquí.
IronPDF está disponible en varios idiomas, tanto dentro como fuera del ecosistema .NET.
Descargar e Instalar la Biblioteca de HTML a PDF en C#
Visual Studio - Administrador de Paquetes NuGet
En Visual Studio, haz clic derecho en tu explorador de soluciones del proyecto y selecciona "Administrar Paquetes NuGet...". Desde allí simplemente busca IronPDF e instala la última versión en tu solución... haz clic en OK en cualquier cuadro de diálogo que aparezca. Esto también funcionará igual de bien en proyectos de VB.NET.
PM > Install-Package IronPdf
Install-Package IronPdf
IronPDF en el Sitio Web de NuGet
Para una descripción completa de las características, compatibilidad y descargas de IronPDF, por favor revisa IronPDF en el sitio web oficial de NuGet: https://www.nuget.org/packages/IronPdf
Instalación vía DLL
Otra opción es instalar el DLL de IronPDF directamente. IronPDF se puede descargar e instalar manualmente en el proyecto o GAC desde https://ironpdf.com/packages/IronPdf.zip
Tutoriales
Crear un PDF con una Cadena HTML en C# .NET
¿Cómo: Convertir una Cadena HTML a PDF? Es una habilidad muy eficiente y gratificante crear un nuevo archivo PDF en C#.
Podemos simplemente usar el método ChromePdfRenderer.RenderHtmlAsPdf para convertir cualquier cadena HTML (HTML5) en un PDF. La renderización de HTML a PDF en C# se realiza mediante una versión completamente funcional del motor Google Chromium que se incluye con el paquete NuGet de IronPDF.
using IronPdf;// ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome enginevar renderer = new ChromePdfRenderer();// Render an HTML string. The result is a PdfDocument held in memoryvar pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");// Write the PDF to diskpdf.SaveAs("pixel-perfect.pdf");
using IronPdf;
// ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engine
var renderer = new ChromePdfRenderer();
// Render an HTML string. The result is a PdfDocument held in memory
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Write the PDF to disk
pdf.SaveAs("pixel-perfect.pdf");
ImportsIronPdf' ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engineDim renderer = New ChromePdfRenderer()' Render an HTML string. The result is a PdfDocument held in memoryDim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")' Write the PDF to diskpdf.SaveAs("pixel-perfect.pdf")
Imports IronPdf
' ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engine
Dim renderer = New ChromePdfRenderer()
' Render an HTML string. The result is a PdfDocument held in memory
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")
' Write the PDF to disk
pdf.SaveAs("pixel-perfect.pdf")
RenderHtmlAsPdf soporta completamente HTML5, CSS3, JavaScript e imágenes. Si estos activos están en un disco duro, es posible que queramos establecer el segundo parámetro de RenderHtmlAsPdf en el directorio que contiene los activos. Este método devuelve un objeto PdfDocument, que es una clase utilizada para contener información de PDF.
IronPDF renderizará tu HTML exactamente como aparece en Chrome
Tenemos un tutorial completo dedicado a permitirte configurar Chrome para una depuración completa de HTML para asegurarte de que los cambios que ves allí al editar tu HTML, CSS y JavaScript sean exactamente iguales al PDF de salida de IronPDF cuando elijas renderizar. Por favor, encuentra el tutorial aquí: Cómo Depurar HTML en Chrome para Crear PDFs Perfectos en Píxeles.
Ruta URL base (el argumento BaseUrlOrPath):
using IronPdf;var renderer = new ChromePdfRenderer();// The second argument is the base path. Relative URLs in the HTML (the image// below, but also stylesheets, scripts and fonts) are resolved against it.var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");pdf.SaveAs(@"C:\MyProject\Assets\output.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The second argument is the base path. Relative URLs in the HTML (the image
// below, but also stylesheets, scripts and fonts) are resolved against it.
var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");
pdf.SaveAs(@"C:\MyProject\Assets\output.pdf");
Dim renderer = New ChromePdfRenderer()' The second argument is the base path. Relative URLs in the HTML (the image' below, but also stylesheets, scripts and fonts) are resolved against it.Dim pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", "C:\MyProject\Assets\")pdf.SaveAs("C:\MyProject\Assets\output.pdf")
Dim renderer = New ChromePdfRenderer()
' The second argument is the base path. Relative URLs in the HTML (the image
' below, but also stylesheets, scripts and fonts) are resolved against it.
Dim pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", "C:\MyProject\Assets\")
pdf.SaveAs("C:\MyProject\Assets\output.pdf")
Todos los estilos CSS, imágenes y archivos JavaScript referenciados serán relativos a esa ruta base y pueden mantenerse en una estructura ordenada y lógica. También puedes, por supuesto, optar por referenciar imágenes, hojas de estilo y activos en línea, incluyendo fuentes web como Google Fonts e incluso jQuery.
Exportar un PDF Usando una URL Existente | URL a PDF
Renderizar URLs existentes como PDFs con C# es muy eficiente e intuitivo. Esto también permite a los equipos dividir el diseño de PDF y el trabajo de renderización de PDF en el back-end entre múltiples equipos.
Vamos a renderizar una página de Wikipedia.com en el siguiente ejemplo:
using IronPdf;var renderer = new ChromePdfRenderer();// Render a live web page straight from its URLvar pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");// The PDF is written next to the executablepdf.SaveAs("wikipedia.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a live web page straight from its URL
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
// The PDF is written next to the executable
pdf.SaveAs("wikipedia.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Render a live web page straight from its URLDim pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")' The PDF is written next to the executablepdf.SaveAs("wikipedia.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Render a live web page straight from its URL
Dim pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
' The PDF is written next to the executable
pdf.SaveAs("wikipedia.pdf")
Notarás que los hipervínculos e incluso los formularios HTML se conservan dentro del PDF generado por nuestro código C#.
Al renderizar páginas web existentes, tenemos algunos trucos que podemos desear aplicar:
CSS de Impresión y Pantalla
Los tipos de medios CSS permiten que una página lleve estilos separados para impresión y pantalla. Podemos instruir a IronPDF para que renderice el CSS de "Impresión", que a menudo es más simple. Por defecto, se renderizarán los estilos CSS de "Pantalla", que coinciden con lo que ves en el navegador.
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Choose which CSS media type the page is rendered with.// Screen (the default) renders the page as a browser displays it;// Print applies the page's @media print rules instead.// renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Choose which CSS media type the page is rendered with.
// Screen (the default) renders the page as a browser displays it;
// Print applies the page's @media print rules instead.
// renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Choose which CSS media type the page is rendered with.' Screen (the default) renders the page as a browser displays it;' Print applies the page's @media print rules instead.' renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screenrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Choose which CSS media type the page is rendered with.
' Screen (the default) renders the page as a browser displays it;
' Print applies the page's @media print rules instead.
' renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
IronPDF soporta JavaScript, jQuery e incluso AJAX. Podemos necesitar instruir a IronPDF para que espere a que JS o ajax terminen de ejecutarse antes de renderizar una instantánea de nuestra página web.
using IronPdf;var renderer = new ChromePdfRenderer();// Let the page's JavaScript run before the snapshot is takenrenderer.RenderingOptions.EnableJavaScript = true;// Give scripts and AJAX calls 500 milliseconds to finish before rendering.// For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait// for a signal instead of a fixed delay.renderer.RenderingOptions.WaitFor.RenderDelay(500);
using IronPdf;
var renderer = new ChromePdfRenderer();
// Let the page's JavaScript run before the snapshot is taken
renderer.RenderingOptions.EnableJavaScript = true;
// Give scripts and AJAX calls 500 milliseconds to finish before rendering.
// For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait
// for a signal instead of a fixed delay.
renderer.RenderingOptions.WaitFor.RenderDelay(500);
Dim renderer = New ChromePdfRenderer()' Let the page's JavaScript run before the snapshot is takenrenderer.RenderingOptions.EnableJavaScript = True' Give scripts and AJAX calls 500 milliseconds to finish before rendering.' For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait' for a signal instead of a fixed delay.renderer.RenderingOptions.WaitFor.RenderDelay(500)
Dim renderer = New ChromePdfRenderer()
' Let the page's JavaScript run before the snapshot is taken
renderer.RenderingOptions.EnableJavaScript = True
' Give scripts and AJAX calls 500 milliseconds to finish before rendering.
' For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait
' for a signal instead of a fixed delay.
renderer.RenderingOptions.WaitFor.RenderDelay(500)
using IronPdf;var renderer = new ChromePdfRenderer();// The chart is drawn by JavaScript, so let it run and give it a moment to finishrenderer.RenderingOptions.EnableJavaScript = true;renderer.RenderingOptions.WaitFor.RenderDelay(500);// Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScriptvar pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord");pdf.SaveAs("chart.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The chart is drawn by JavaScript, so let it run and give it a moment to finish
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);
// Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScript
var pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord");
pdf.SaveAs("chart.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' The chart is drawn by JavaScript, so let it run and give it a moment to finishrenderer.RenderingOptions.EnableJavaScript = Truerenderer.RenderingOptions.WaitFor.RenderDelay(500)' Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScriptDim pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord")pdf.SaveAs("chart.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' The chart is drawn by JavaScript, so let it run and give it a moment to finish
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(500)
' Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScript
Dim pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord")
pdf.SaveAs("chart.pdf")
CSS Responsivo
¡HTML a PDF usando CSS responsivo en .NET! Las páginas web responsivas están diseñadas para ser vistas en un navegador. IronPDF no abre una ventana de navegador real dentro del sistema operativo de tu servidor. Sin una ventana de visualización del navegador, los diseños responsivos pueden retroceder a su punto de interrupción más estrecho.
Recomendamos usar tipos de medios CSS de Impresión para navegar este problema. El CSS de impresión normalmente no debería ser responsivo.
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Responsive layouts are designed for a browser viewport, so render the page's// print stylesheet instead of its screen stylesheetrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Responsive layouts are designed for a browser viewport, so render the page's
// print stylesheet instead of its screen stylesheet
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
ImportsIronPdfImportsIronPdf.RenderingDim renderer As New ChromePdfRenderer()' Responsive layouts are designed for a browser viewport, so render the page's' print stylesheet instead of its screen stylesheetrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
' Responsive layouts are designed for a browser viewport, so render the page's
' print stylesheet instead of its screen stylesheet
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Generar un PDF desde una Página HTML
También podemos renderizar cualquier página HTML a PDF en nuestro disco duro. Todos los activos relativos como CSS, imágenes y js se renderizarán como si el archivo se hubiera abierto usando el protocolo file://.
using IronPdf;var renderer = new ChromePdfRenderer();// Render an HTML file from disk. Relative CSS, image and script paths// resolve against the file's own folder, as if opened with file://var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");pdf.SaveAs("Invoice.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render an HTML file from disk. Relative CSS, image and script paths
// resolve against the file's own folder, as if opened with file://
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
Dim renderer = New ChromePdfRenderer()' Render an HTML file from disk. Relative CSS, image and script paths' resolve against the file's own folder, as if opened with file://Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")pdf.SaveAs("Invoice.pdf")
Dim renderer = New ChromePdfRenderer()
' Render an HTML file from disk. Relative CSS, image and script paths
' resolve against the file's own folder, as if opened with file://
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
pdf.SaveAs("Invoice.pdf")
Este método tiene la ventaja de permitir al desarrollador la oportunidad de probar el contenido HTML en un navegador durante el desarrollo. Recomendamos Chrome ya que es el navegador web en el que se basa el motor de renderización de IronPDF.
Agregar Encabezados y Pies de Página Personalizados
Los encabezados y pies de página se pueden agregar a los PDFs cuando se renderizan, o a archivos PDF existentes usando IronPDF.
Con IronPDF, los encabezados y pies de página pueden contener contenido simple basado en texto usando la clase TextHeaderFooter - o con imágenes y contenido HTML enriquecido usando la clase HtmlHeaderFooter.
using IronPdf;using IronPdf.Rendering;// Create a PDF from an existing HTML file with rendering options set up frontvar renderer = new ChromePdfRenderer{RenderingOptions = new ChromePdfRenderOptions { // Margins are in millimetersMarginTop = 50,MarginBottom = 50, // Render the page's print stylesheetCssMediaType = PdfCssMediaType.Print, // Plain-text header: the document title, centered, above a divider lineTextHeader = new TextHeaderFooter {CenterText = "{pdf-title}",DrawDividerLine = true,FontSize = 16 }, // Plain-text footer: date and time on the left, page numbers on the rightTextFooter = new TextHeaderFooter {LeftText = "{date} {time}",RightText = "Page {page} of {total-pages}",DrawDividerLine = true,FontSize = 14 } }};var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");pdf.SaveAs("Invoice.pdf");// Open the result in the default PDF viewerSystem.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo{FileName = "Invoice.pdf",UseShellExecute = true});
using IronPdf;
using IronPdf.Rendering;
// Create a PDF from an existing HTML file with rendering options set up front
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
// Margins are in millimeters
MarginTop = 50,
MarginBottom = 50,
// Render the page's print stylesheet
CssMediaType = PdfCssMediaType.Print,
// Plain-text header: the document title, centered, above a divider line
TextHeader = new TextHeaderFooter
{
CenterText = "{pdf-title}",
DrawDividerLine = true,
FontSize = 16
},
// Plain-text footer: date and time on the left, page numbers on the right
TextFooter = new TextHeaderFooter
{
LeftText = "{date} {time}",
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true,
FontSize = 14
}
}
};
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
// Open the result in the default PDF viewer
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = "Invoice.pdf",
UseShellExecute = true
});
ImportsIronPdfImportsIronPdf.Rendering' Create a PDF from an existing HTML file with rendering options set up frontDim renderer = New ChromePdfRendererWith { .RenderingOptions = New ChromePdfRenderOptionsWith { ' Margins are in millimeters .MarginTop = 50, .MarginBottom = 50, ' Render the page's print stylesheet .CssMediaType = PdfCssMediaType.Print, ' Plain-text header: the document title, centered, above a divider line .TextHeader = New TextHeaderFooterWith { .CenterText = "{pdf-title}", .DrawDividerLine = True, .FontSize = 16 }, ' Plain-text footer: date and time on the left, page numbers on the right .TextFooter = New TextHeaderFooterWith { .LeftText = "{date} {time}", .RightText = "Page {page} of {total-pages}", .DrawDividerLine = True, .FontSize = 14 } }}Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")pdf.SaveAs("Invoice.pdf")' Open the result in the default PDF viewerSystem.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfoWith { .FileName = "Invoice.pdf", .UseShellExecute = True})
Imports IronPdf
Imports IronPdf.Rendering
' Create a PDF from an existing HTML file with rendering options set up front
Dim renderer = New ChromePdfRenderer With {
.RenderingOptions = New ChromePdfRenderOptions With {
' Margins are in millimeters
.MarginTop = 50,
.MarginBottom = 50,
' Render the page's print stylesheet
.CssMediaType = PdfCssMediaType.Print,
' Plain-text header: the document title, centered, above a divider line
.TextHeader = New TextHeaderFooter With {
.CenterText = "{pdf-title}",
.DrawDividerLine = True,
.FontSize = 16
},
' Plain-text footer: date and time on the left, page numbers on the right
.TextFooter = New TextHeaderFooter With {
.LeftText = "{date} {time}",
.RightText = "Page {page} of {total-pages}",
.DrawDividerLine = True,
.FontSize = 14
}
}
}
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
pdf.SaveAs("Invoice.pdf")
' Open the result in the default PDF viewer
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo With {
.FileName = "Invoice.pdf",
.UseShellExecute = True
})
La clase HtmlHeaderFooter permite que se generen encabezados y pies de página enriquecidos usando contenido HTML5 que incluso puede incluir imágenes y hojas de estilo.
using IronPdf;var renderer = new ChromePdfRenderer();// An HTML footer can carry markup, styles and images.// {page} and {total-pages} are filled in for every page.renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter{HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"};
using IronPdf;
var renderer = new ChromePdfRenderer();
// An HTML footer can carry markup, styles and images.
// {page} and {total-pages} are filled in for every page.
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
};
Dim renderer = New ChromePdfRenderer()' An HTML footer can carry markup, styles and images.' {page} and {total-pages} are filled in for every page.renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooterWith { .HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"}
Dim renderer = New ChromePdfRenderer()
' An HTML footer can carry markup, styles and images.
' {page} and {total-pages} are filled in for every page.
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
}
Datos Dinámicos en Encabezados y Pies de Página de PDF
Podemos "fusionar" contenido en el texto e incluso HTML de encabezados y pies de página usando marcadores de posición como:
{page} para el número de página actual
{total-pages} para el total de páginas en el PDF
{url} para la URL del PDF renderizado si se renderizó desde una página web
{date} para la fecha de hoy
{time} para la hora actual
{html-title} para el <title> del documento HTML renderizado
{pdf-title} para el título del documento, que puede establecerse a través de ChromePdfRenderOptions
Configuración de Conversión de HTML a PDF en C#
Hay muchas sutilezas en cómo nuestros usuarios y clientes pueden esperar que se renderice el contenido PDF.
La clase ChromePdfRenderer contiene una propiedad RenderingOptions que se puede usar para establecer estas opciones.
Por ejemplo, podemos desear elegir aceptar solo directivas CSS3 de "print":
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Render the page's @media print CSS rather than its screen stylesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf");
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Render the page's @media print CSS rather than its screen styles
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf");
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Render the page's @media print CSS rather than its screen stylesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Printrenderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf")
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Render the page's @media print CSS rather than its screen styles
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf")
También podemos desear cambiar el tamaño de nuestros márgenes de impresión para crear más espacio en blanco en la página, para hacer espacio para encabezados o pies de página grandes, o incluso establecer márgenes cero para la impresión comercial de folletos o carteles:
using IronPdf;var renderer = new ChromePdfRenderer();// Page margins in millimeters. Larger margins leave room for headers and// footers; set them to 0 for edge-to-edge brochures and posters.renderer.RenderingOptions.MarginTop = 50;renderer.RenderingOptions.MarginBottom = 50;renderer.RenderingOptions.MarginLeft = 20;renderer.RenderingOptions.MarginRight = 20;
using IronPdf;
var renderer = new ChromePdfRenderer();
// Page margins in millimeters. Larger margins leave room for headers and
// footers; set them to 0 for edge-to-edge brochures and posters.
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Page margins in millimeters. Larger margins leave room for headers and' footers; set them to 0 for edge-to-edge brochures and posters.renderer.RenderingOptions.MarginTop = 50renderer.RenderingOptions.MarginBottom = 50renderer.RenderingOptions.MarginLeft = 20renderer.RenderingOptions.MarginRight = 20
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Page margins in millimeters. Larger margins leave room for headers and
' footers; set them to 0 for edge-to-edge brochures and posters.
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Podemos desear activar o desactivar imágenes de fondo de elementos HTML:
using IronPdf;var renderer = new ChromePdfRenderer();// Include CSS background colors and images in the PDF (set false to drop them)renderer.RenderingOptions.PrintHtmlBackgrounds = true;var pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>");pdf.SaveAs("output.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Include CSS background colors and images in the PDF (set false to drop them)
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
var pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>");
pdf.SaveAs("output.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Include CSS background colors and images in the PDF (set false to drop them)renderer.RenderingOptions.PrintHtmlBackgrounds = TrueDim pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>")pdf.SaveAs("output.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Include CSS background colors and images in the PDF (set false to drop them)
renderer.RenderingOptions.PrintHtmlBackgrounds = True
Dim pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>")
pdf.SaveAs("output.pdf")
También es posible establecer que nuestros PDFs de salida se rendericen en cualquier tamaño de papel virtual, incluyendo tamaños de retrato y paisaje e incluso tamaños personalizados que pueden establecerse en milímetros o pulgadas.
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Standard paper sizes and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4;renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;// Or a custom size, in millimeters or inches// renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297);// renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Standard paper sizes and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Or a custom size, in millimeters or inches
// renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297);
// renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Standard paper sizes and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape' Or a custom size, in millimeters or inches' renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297)' renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11)
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Standard paper sizes and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
' Or a custom size, in millimeters or inches
' renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297)
' renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11)
Mi biblioteca favorita de este tipo es IronPDF. Permite una manipulación rápida y eficiente de archivos PDF. También tiene muchas funciones valiosas, como exportar al formato PDF/A y firmar documentos PDF digitalmente.
IronOCR significa que podemos ahorrar $40,000 anualmente en el procesamiento manual, mientras mejoramos la productividad y liberamos recursos para tareas de alto impacto. Lo recomendaría encarecidamente.
El Iron Suite juega un papel crucial en nuestras operaciones. Estas son herramientas que aumentan la eficiencia en toda la empresa, incluyendo la creación de planos y la mejora en la gestión de inventario.
Plantillar o "crear en lote" PDFs es un requisito común para desarrolladores de Internet y sitios web.
En lugar de plantillar un documento PDF en sí, con IronPDF podemos plantillar nuestro HTML usando tecnologías existentes y bien probadas. Cuando la plantilla HTML se combina con datos de una cadena de consulta o base de datos, terminamos con un documento PDF generado dinámicamente.
En el caso más simple, usar el método C# String.Format es efectivo para un ejemplo básico.
using IronPdf;var renderer = new ChromePdfRenderer();// Insert a value into an HTML template with string.Formatstring html = string.Format("<h1>Hello {0}!</h1>", "World");var pdf = renderer.RenderHtmlAsPdf(html);pdf.SaveAs("Hello.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Insert a value into an HTML template with string.Format
string html = string.Format("<h1>Hello {0}!</h1>", "World");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Hello.pdf");
Dim renderer As New ChromePdfRenderer()' Insert a value into an HTML template with string.FormatDim html AsString = String.Format("<h1>Hello {0}!</h1>", "World")Dim pdf = renderer.RenderHtmlAsPdf(html)pdf.SaveAs("Hello.pdf")
Dim renderer As New ChromePdfRenderer()
' Insert a value into an HTML template with string.Format
Dim html As String = String.Format("<h1>Hello {0}!</h1>", "World")
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Hello.pdf")
Si el archivo HTML es más largo, a menudo podemos usar marcadores de posición arbitrarios como [[NAME]] y reemplazarlos con datos reales más tarde.
El siguiente ejemplo creará 3 PDFs, cada uno personalizado para un usuario.
using IronPdf;var renderer = new ChromePdfRenderer();// A template with a placeholder to replacevar htmlTemplate = "<p>[[NAME]]</p>";var names = new[] { "John", "James", "Jenny" };// One personalized PDF per nameforeach (var name in names){ var htmlInstance = htmlTemplate.Replace("[[NAME]]", name); var pdf = renderer.RenderHtmlAsPdf(htmlInstance); pdf.SaveAs(name + ".pdf");}
using IronPdf;
var renderer = new ChromePdfRenderer();
// A template with a placeholder to replace
var htmlTemplate = "<p>[[NAME]]</p>";
var names = new[] { "John", "James", "Jenny" };
// One personalized PDF per name
foreach (var name in names)
{
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
pdf.SaveAs(name + ".pdf");
}
ImportsIronPdfDim renderer = New ChromePdfRenderer()' A template with a placeholder to replaceDim htmlTemplate = "<p>[[NAME]]</p>"Dim names = New String() {"John", "James", "Jenny"}' One personalized PDF per nameFor Each name In names Dim htmlInstance = htmlTemplate.Replace("[[NAME]]", name) Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance) pdf.SaveAs(name & ".pdf")Next
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' A template with a placeholder to replace
Dim htmlTemplate = "<p>[[NAME]]</p>"
Dim names = New String() {"John", "James", "Jenny"}
' One personalized PDF per name
For Each name In names
Dim htmlInstance = htmlTemplate.Replace("[[NAME]]", name)
Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance)
pdf.SaveAs(name & ".pdf")
Next
Plantillado Avanzado Con Handlebars.NET
Un método sofisticado para fusionar datos de C# con HTML para la generación de PDF es usar el lenguaje de plantillas Handlebars.
Handlebars hace posible crear HTML dinámico a partir de objetos y instancias de clase de C#, incluyendo registros de base de datos. Handlebars es particularmente efectivo donde una consulta puede devolver un número desconocido de filas, como en la generación de una factura.
using HandlebarsDotNet;// A Handlebars template with two placeholdersvar source = @"<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>";// Compile it once, then fill it with any object that has matching propertiesvar template = Handlebars.Compile(source);var data = new { title = "My new post", body = "This is my first post!" };string html = template(data);// html now contains://// <div class="entry">// <h1>My new post</h1>// <div class="body">// This is my first post!// </div>// </div>
using HandlebarsDotNet;
// A Handlebars template with two placeholders
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile it once, then fill it with any object that has matching properties
var template = Handlebars.Compile(source);
var data = new { title = "My new post", body = "This is my first post!" };
string html = template(data);
// html now contains:
//
// <div class="entry">
// <h1>My new post</h1>
// <div class="body">
// This is my first post!
// </div>
// </div>
ImportsHandlebarsDotNet' A Handlebars template with two placeholdersDim source = "<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>"' Compile it once, then fill it with any object that has matching propertiesDim template = Handlebars.Compile(source)Dim data = New With {.title = "My new post", .body = "This is my first post!"}Dim html AsString = template(data)' html now contains:'' <div class="entry">' <h1>My new post</h1>' <div class="body">' This is my first post!' </div>' </div>
Imports HandlebarsDotNet
' A Handlebars template with two placeholders
Dim source = "<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>"
' Compile it once, then fill it with any object that has matching properties
Dim template = Handlebars.Compile(source)
Dim data = New With {.title = "My new post", .body = "This is my first post!"}
Dim html As String = template(data)
' html now contains:
'
' <div class="entry">
' <h1>My new post</h1>
' <div class="body">
' This is my first post!
' </div>
' </div>
Para renderizar este HTML podemos simplemente usar el método RenderHtmlAsPdf.
using HandlebarsDotNet;using IronPdf;// Fill the Handlebars template, then render the resulting HTMLvar template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>");string html = template(new { title = "My new post", body = "This is my first post!" });var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf(html);pdf.SaveAs("Handlebars.pdf");
using HandlebarsDotNet;
using IronPdf;
// Fill the Handlebars template, then render the resulting HTML
var template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>");
string html = template(new { title = "My new post", body = "This is my first post!" });
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Handlebars.pdf");
ImportsHandlebarsDotNetImportsIronPdf' Fill the Handlebars template, then render the resulting HTMLDim template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>")Dim html AsString = template(New With {.title = "My new post", .body = "This is my first post!"})Dim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf(html)pdf.SaveAs("Handlebars.pdf")
Imports HandlebarsDotNet
Imports IronPdf
' Fill the Handlebars template, then render the resulting HTML
Dim template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>")
Dim html As String = template(New With {.title = "My new post", .body = "This is my first post!"})
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Handlebars.pdf")
Puedes aprender más sobre el lenguaje de plantillas Handlebars y su implementación en C# desde GitHub.
Agregar Saltos de Página usando HTML5
Un requisito común en un documento PDF es la paginación. Los desarrolladores necesitan controlar dónde comienzan y terminan las páginas PDF para un diseño limpio y legible.
La forma más fácil de hacer esto es con un truco de CSS poco conocido que renderizará un salto de página en cualquier documento HTML impreso.
El HTML proporcionado funciona, pero difícilmente es una buena práctica. Aconsejamos ajustar el atributo de medios como el siguiente ejemplo. Una forma tan ordenada y limpia de organizar contenido HTML de varias páginas. Debido a que IronPDF renderiza con el tipo de medios screen por defecto, una hoja de estilo media="print" solo se aplica cuando RenderingOptions.CssMediaType se establece en PdfCssMediaType.Print (ver Configuración de Conversión arriba).
IronPDF facilita la fusión de documentos PDF. El uso más común de esta técnica es agregar una página de portada o una página final a un documento PDF renderizado existente.
Para hacerlo, primero renderizamos una página de portada y luego usamos el método estático PdfDocument.Merge() para combinar los dos documentos.
using IronPdf;var renderer = new ChromePdfRenderer();// The document body, rendered from a web pagevar pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");// Prepend an existing PDF as the cover page. Merge returns a new document.var cover = PdfDocument.FromFile("CoverPage.pdf");var pdfMerged = PdfDocument.Merge(cover, pdf);pdfMerged.SaveAs("Combined.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The document body, rendered from a web page
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");
// Prepend an existing PDF as the cover page. Merge returns a new document.
var cover = PdfDocument.FromFile("CoverPage.pdf");
var pdfMerged = PdfDocument.Merge(cover, pdf);
pdfMerged.SaveAs("Combined.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' The document body, rendered from a web pageDim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/")' Prepend an existing PDF as the cover page. Merge returns a new document.Dim cover = PdfDocument.FromFile("CoverPage.pdf")Dim pdfMerged = PdfDocument.Merge(cover, pdf)pdfMerged.SaveAs("Combined.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' The document body, rendered from a web page
Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/")
' Prepend an existing PDF as the cover page. Merge returns a new document.
Dim cover = PdfDocument.FromFile("CoverPage.pdf")
Dim pdfMerged = PdfDocument.Merge(cover, pdf)
pdfMerged.SaveAs("Combined.pdf")
Una característica final de C# PDF que IronPDF soporta es agregar una marca de agua a los documentos. Esto se puede usar para agregar un aviso a cada página de que un documento es "confidencial" o una "muestra".
using IronPdf;using IronPdf.Editing;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");// Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.// The watermark is HTML, so any markup, styling or image can be used.pdf.ApplyWatermark( "<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation: 30, opacity: 50, verticalAlignment: VerticalAlignment.Middle, horizontalAlignment: HorizontalAlignment.Center);pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;
using IronPdf.Editing;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.
// The watermark is HTML, so any markup, styling or image can be used.
pdf.ApplyWatermark(
"<h2 style='color:red; font-size:50px'>SAMPLE</h2>",
rotation: 30,
opacity: 50,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
ImportsIronPdfImportsIronPdf.EditingDim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")' Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.' The watermark is HTML, so any markup, styling or image can be used.pdf.ApplyWatermark("<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation:=30, opacity:=50, verticalAlignment:=VerticalAlignment.Middle, horizontalAlignment:=HorizontalAlignment.Center)pdf.SaveAs("C:\Path\To\Watermarked.pdf")
Imports IronPdf
Imports IronPdf.Editing
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
' Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.
' The watermark is HTML, so any markup, styling or image can be used.
pdf.ApplyWatermark("<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation:=30, opacity:=50, verticalAlignment:=VerticalAlignment.Middle, horizontalAlignment:=HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")
El código fuente gratuito del convertidor de HTML a PDF en C# completo para este tutorial está disponible para descargar como un archivo de proyecto de Visual Studio 2022 comprimido. Usará su motor de renderización para generar objetos de documentos PDF en C#.
IronPDF es una biblioteca de PDF poderosa y completa diseñada para desarrolladores modernos de .NET. Con conversión nativa de HTML a PDF impulsada por un motor Chromium avanzado, una API intuitiva y actualizaciones regulares, simplifica el desarrollo mientras asegura resultados de alta calidad. Veamos más de cerca cómo se compara con otras herramientas:
PDFSharp
Características Principales: PDFsharp es una biblioteca de código abierto (MIT) para crear y editar documentos PDF en código administrado. No tiene motor de renderización HTML, por lo que convertir contenido web a PDF necesita un renderizador de terceros separado.
Estándares Modernos: IronPDF aprovecha las tecnologías web modernas, incluyendo HTML, CSS y JavaScript, a través de su motor basado en Chromium, asegurando que los PDFs mantengan un aspecto y sensación contemporáneos.
Soporte y Actualizaciones: PDFsharp es de código abierto y lanza una versión cada pocos meses, con soporte comercial vendido por separado por su mantenedor. IronPDF lanza actualizaciones mensuales y parches de seguridad, y cada licencia incluye soporte profesional de ingeniería, lo cual es importante para aplicaciones empresariales.
wkhtmltopdf
Facilidad de Integración: wkhtmltopdf es una herramienta de línea de comandos con una biblioteca C; no hay un paquete oficial de .NET, por lo que usarlo desde .NET significa lanzar el binario nativo (o llamarlo a través de un envoltorio de terceros como DinkToPdf) y enviar ese binario para cada plataforma a la que despliegues.
Tecnología de Renderización: wkhtmltopdf renderiza con QtWebKit, un fork de WebKit que Qt descontinuó en 2015 y eliminó en Qt 5.6, por lo que las características modernas de JavaScript y CSS no son compatibles, especialmente en sitios web dinámicos y ricos en contenido. El motor Chromium de IronPDF renderiza estándares web actuales.
Desarrollo Continuo: La última versión de wkhtmltopdf fue la 0.12.6 en junio de 2020 y su repositorio de GitHub fue archivado en enero de 2023, por lo que no hay soporte del proveedor. IronPDF continúa evolucionando con actualizaciones mensuales y servicio al cliente dedicado.
iTextSharp
Renderización de HTML a PDF: iText convierte HTML a través de su complemento separado pdfHTML, un motor de diseño CSS en lugar de un navegador, y la línea heredada iTextSharp 5 ahora solo recibe correcciones de seguridad. IronPDF renderiza HTML con un motor Chromium incrustado en el paquete principal, sin necesidad de complemento.
Experiencia del Desarrollador: La API de iText funciona a nivel de objetos PDF y elementos de diseño, lo cual es poderoso pero significa más código para tareas cotidianas. IronPDF ofrece una API C# limpia e intuitiva, simplificando la codificación y acelerando la entrega de proyectos.
Mantenimiento y Soporte: El uso gratuito de iText está bajo la AGPL, con soporte del proveedor reservado para licencias comerciales, y iTextSharp 5.x está en fin de vida aparte de las correcciones de seguridad. IronPDF incluye soporte profesional y actualizaciones mensuales con cada licencia.
Aspose.PDF
Calidad de Conversión: Aspose.PDF convierte HTML con su propio motor de diseño en lugar de un navegador. Su documentación convierte una página web primero obteniendo el HTML con HttpClient en un flujo y pasándolo a Document con HtmlLoadOptions, en lugar de renderizar directamente desde una URL. En nuestra prueba r/nfl a continuación, la salida fue casi vacía: el logo de la comunidad, un titular y algunas cajas vacías. El motor Chromium de IronPDF renderiza una URL directamente, incluido JavaScript.
Usabilidad de la API: La API de Aspose.PDF puede ser verbosa, mientras que IronPDF se enfoca en una experiencia amigable para el desarrollador que minimiza el tiempo de configuración y mejora la productividad.
Fidelidad de Salida: Debido a que IronPDF renderiza con Chromium, el PDF coincide con lo que Chrome muestra para el mismo HTML, lo que hace que el diseño y la depuración sean predecibles para la generación de PDF de alto volumen.
Syncfusion PDF
Complejidad de la API: Syncfusion PDF es una biblioteca capaz con una superficie de API más grande para aprender. IronPDF, por el contrario, proporciona una API sencilla para una integración rápida.
Motor de Renderización: El convertidor HTML de Syncfusion ahora usa el motor Chromium Blink; sus motores WebKit e Internet Explorer más antiguos fueron marcados como obsoletos en Essential Studio 2022 Volume 3. En nuestra prueba r/nfl a continuación, la salida de Syncfusion mantuvo el feed principal pero eliminó los paneles de navegación y comunidad, mientras que el motor Chromium de IronPDF renderizó toda la página.
Más Allá de la Conversión: El paquete de IronPDF también cubre firmas digitales, anotaciones, llenado de formularios y estampado de códigos de barras, por lo que la misma biblioteca maneja el resto del flujo de trabajo del documento.
Comparación de Renderización
Para comparar la calidad de conversión de HTML a PDF de estas bibliotecas, usamos una página de la comunidad de Reddit, r/nfl, que contiene contenido dinámico, actualizaciones en vivo, CSS moderno y elementos basados en JavaScript:
https://www.reddit.com/r/nfl/
Aquí están los resultados de una sola ejecución con la configuración predeterminada de cada biblioteca. Syncfusion y Aspose.PDF se ejecutaron como compilaciones de evaluación, por lo que su salida lleva marcas de agua de evaluación (haz clic en cada imagen para verla ampliada):
IronPDF
PDF bien formateado y visualmente preciso, preservando contenido dinámico y estilo moderno.
SyncFusion
Convertido con una compilación de prueba. El feed principal, el contenido de las publicaciones y el estilo se mantuvieron en un diseño de columna única estrecha, pero se eliminaron la navegación izquierda y el panel de comunidad a la derecha.
Aspose.PDF
Compilación de evaluación; requirió descargar el HTML primero (Aspose.PDF carga HTML desde un flujo en lugar de una URL). La salida fue casi vacía: el logo de la comunidad, un titular y algunas cajas vacías.
Wkhtmltopdf
wkhtmltopdf completó la conversión, pero el resultado es el texto y las imágenes de la página sin ninguno de sus diseños, estilos, elementos dinámicos o interactividad. Esto hace que wkhtmltopdf no sea adecuado para páginas web modernas y dinámicas.
Por favor nota: PDFsharp no tiene motor de renderización HTML, e iText convierte HTML solo a través de su complemento separado pdfHTML, por lo que ninguno fue incluido en esta prueba de renderización de navegador.
Conclusión
Para los desarrolladores de .NET que buscan una solución PDF moderna y confiable, IronPDF es una opción sólida. Su conversión de HTML a PDF basada en Chromium, facilidad de uso, actualizaciones regulares y amplio conjunto de características lo convierten en una opción destacada. Ya sea que estés trabajando en un proyecto pequeño o en una aplicación empresarial a gran escala, IronPDF mejora la productividad mientras evita los riesgos asociados con bibliotecas obsoletas o no soportadas. Diseñado para aplicaciones comerciales, IronPDF mantiene tus proyectos en una biblioteca mantenida y soportada.
En nuestra prueba con una página web dinámica del mundo real, IronPDF produjo la renderización más completa y precisa. Syncfusion eliminó los paneles de navegación y comunidad. Aspose.PDF requirió descargar el HTML primero y aún así casi no renderizó la página. wkhtmltopdf produjo el texto y las imágenes sin el estilo de la página, una mala opción para sitios modernos.
Para flujos de trabajo modernos de HTML a PDF, esa combinación de precisión de renderización y una API pequeña y legible es lo que distingue a IronPDF.
Experimenta la suite completa de características de IronPDF que convierte HTML dinámico y con CSS pesado a PDF con facilidad. Pruébalo ahora con nuestra prueba gratuita.
Para convertir HTML a PDF usando IronPDF, necesitas inicializar el ChromePdfRenderer, renderizar el contenido HTML como un PDF usando el método RenderHtmlAsPdf, y luego guardar el PDF en un archivo.
¿Cuáles son los requisitos del sistema para IronPDF?
IronPDF es compatible con .NET 10, .NET 9, .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, .NET Standard y .NET Framework en Windows, macOS, Linux, Docker, Azure y AWS.
¿Puedo usar IronPDF con otros lenguajes de programación?
Sí, IronPDF se puede usar con múltiples lenguajes tanto dentro como fuera del ecosistema .NET, incluyendo F#, VB.NET, Python, Java y Node.js.
¿Cómo puedo agregar encabezados y pies de página personalizados a un PDF usando IronPDF?
Con IronPDF, puedes agregar encabezados y pies de página usando la clase TextHeaderFooter para contenido basado en texto o la clase HtmlHeaderFooter para contenido HTML enriquecido.
¿Es posible renderizar un PDF desde una URL existente con IronPDF?
Sí, puedes renderizar un PDF desde una URL existente usando el método RenderUrlAsPdf en IronPDF.
¿IronPDF soporta renderizado avanzado de CSS y JavaScript?
Sí, IronPDF soporta CSS3 y JavaScript avanzados, incluyendo jQuery y AJAX, proporcionando un renderizado preciso de diseños web modernos.
¿Puedo aplicar plantillas HTML para la creación masiva de PDFs en IronPDF?
Sí, puedes usar técnicas de plantillado en C#, incluyendo String.Format y Handlebars.NET, para generar PDFs dinámicamente con IronPDF.
¿Cómo se compara IronPDF con otras bibliotecas de PDF?
IronPDF renderiza HTML con un motor Chromium integrado, ofrece actualizaciones mensuales y tiene una API compacta en C#. El tutorial lo compara con PdfSharp, wkhtmltopdf, iTextSharp, Aspose.PDF y Syncfusion PDF, incluyendo una prueba de renderizado lado a lado de una página web dinámica.
¿Puedo agregar marcas de agua a PDFs con IronPDF?
Sí, IronPDF te permite agregar marcas de agua de texto o imagen a tus documentos PDF.
¿Hay una versión de prueba disponible para IronPDF?
Sí, puedes registrarte para una clave de prueba gratuita de 30 días para probar las características de IronPDF antes de comprar una licencia.
Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, transformándola, junto con el director ejecutivo Cameron Rimington, en una empresa de más de 50 personas que presta servicios a la NASA, Tesla y organismos gubernamentales de todo el mundo.