# Cómo convertir HTML a PDF en C# (Guía del desarrollador)
La conversión de HTML a PDF en C# suele parecer sencilla hasta que aparecen los requisitos del mundo real. Los desarrolladores encuentran rápidamente limitaciones que afectan a la precisión de la representación, la implementación y la escalabilidad.
Más allá de la renderización, la compatibilidad con la infraestructura se convierte en un aspecto crítico. Los equipos deben asegurarse de que la generación de PDF funcione en tiempos de ejecución .NET modernos, plataformas en la nube y entornos en contenedores sin merma del rendimiento.
Para subsanar estas deficiencias, las soluciones modernas basadas en Chrome, como IronPDF, ofrecen una mayor fidelidad de representación, una compatibilidad más amplia con plataformas y flujos de trabajo de implementación listos para la producción, que se exploran paso a paso en el resto de esta guía.
*as-heading:2(TL;DR: Guía de inicio rápido para convertir HTML a PDF)*
Puede convertir fácilmente HTML a PDF en C# usando la [IronPDF](/) biblioteca, que proporciona el método `ChromePdfRenderer.RenderHtmlAsPdf` para crear archivos PDF de alta calidad desde HTML, CSS y JavaScript.
```cs
:title=Get started making PDFs now!
IronPdf.ChromePdfRenderer
.StaticRenderHtmlAsPdf("<p>Hello World</p>")
.SaveAs("pixelperfect.pdf");
```
Después de haber comprado o inscrito en una prueba de 30 días de IronPDF, busque la clave de licencia enviada a su correo electrónico. Establece la propiedad TempFolderPath de IronPdf.Installation.
```cs
IronPdf.License.LicenseKey = "KEY";
```
*as-heading:2(¿Por qué los desarrolladores de .NET necesitan un convertidor de HTML a PDF para C#?)*
IronPDF aprovecha un motor de renderizado Google Chromium incorporado para asegurar conversiones de alta fidelidad, preservando con precisión el diseño y estilo de su contenido web.
✅ **Motor de Renderizado de Chrome Robusto:** El motor Blink de Chrome para una conversión precisa de HTML a PDF, ahora mejorado con correcciones para memoria, formularios y precisión de renderizado (v2025.9.4)
✅ **Precisión de Pixel-Perfect:** Los PDFs generados coinciden exactamente con la web, no una versión optimizada para impresión. Las correcciones recientes cubren recorte de encabezados y pies de página personalizados, preservación de texto en escala de grises y caracteres especiales/emojis en metadatos (a partir de v2025.9.4)
✅ **Soporte Completo para la Web Moderna:** Soporte completo para CSS3, HTML5, JavaScript para todos los elementos HTML. Las mejoras recientes cubren el manejo de campos de formulario para áreas de texto largas y casillas de verificación.
✅ **Aumento de Rendimiento de 5-20 Veces:** Mucho más rápido que la automatización del navegador o los controladores web, ahora con correcciones de fugas de memoria y reducciones de tamaños de archivo para elementos repetidos como sellos/encabezados en operaciones por lotes.
✅ **Cumplimiento de PDF/UA:** Generación de PDFs accesibles que cumplen con los estándares de la Sección 508, mejorado para renderización de formularios multiplataforma (por ejemplo, Linux).
✅ **Sin Dependencias Externas:** No hay ejecutables para instalar en los servidores
✅ Diseñado para C#, F# y VB.NET ejecutándose en .NET 10, 9, 8, 7, 6, Core, Standard, o Framework
IronPDF simplifica el proceso para desarrolladores .NET, ofreciendo una solución sencilla y eficiente para generar documentos PDF de aspecto profesional desde el HTML de su aplicación web. Desde facturas e informes hasta certificados y archivos, los desarrolladores pueden trabajar con su stack web familiar mientras IronPDF maneja lo complejo en solo unas líneas de código.
**RELATED:** <a class="content-anchor" href="/product-updates/changelog/">IronPDF Changelog: Updates, milestones, roadmap <i class="fa-solid fa-arrow-right"></i></a>
*as-heading:2(Lo que aprenderás)*
1. [Cómo convertir HTML a PDF C#](#1-how-to-convert-html-to-pdf-c-num)
- [Cómo convertir cadenas HTML en PDF](#how-to-convert-html-string-to-pdf)
- [Cómo exportar una URL existente a PDF](#how-to-export-existing-url-to-pdf)
- [Cómo convertir un archivo HTML en PDF](#how-to-convert-html-file-to-pdf)
- [Cómo convertir páginas Razor a PDF](#how-to-convert-razor-pages-to-pdf)
- [Cómo convertir vistas MVC a PDF](#how-to-convert-mvc-views-to-pdf)
2. [Cómo configurar los ajustes de HTML a PDF](#2-how-to-configure-html-to-pdf-settings)
- [Cómo configurar encabezados HTTP personalizados, cookies y credenciales de inicio de sesión](#how-to-set-custom-http-headers-cookies-and-login-credentials)
- [Cómo configurar proxy para la generación de PDF](#how-to-configure-proxy-for-pdf-rendering)
3. [Cómo utilizar las funciones avanzadas de generación y seguridad de PDF](#3-how-to-use-advanced-pdf-generation-security-features)
- [Cómo generar una plantilla HTML para la creación de PDF por lotes](#how-to-generate-html-template-for-batch-pdf-creation)
- [Cómo Generar PDF Utilizando el Método Async](#how-to-generate-pdf-using-async-method)
- [Cómo añadir características de seguridad avanzadas](#how-to-add-advanced-security-features)
- [Cómo convertir formularios HTML a PDFs rellenables](#how-to-convert-html-forms-to-fillable-pdfs)
- [Cómo convertir elementos HTML específicos a PDF](#how-to-convert-specific-html-elements-to-pdf)
- [Cómo renderizar páginas autenticadas a PDF](#how-to-render-authenticated-pages-to-pdf)
4. [Cómo desplegar HTML a PDF en plataformas en la nube](#4-how-to-deploy-html-to-pdf-on-cloud-platforms)
- [Cómo desplegar en Azure](#how-to-deploy-on-azure)
- [Cómo desplegar en AWS Lambda](#how-to-deploy-on-aws-lambda)
- [Cómo desplegar con Docker](#how-to-deploy-with-docker)
5. [Comparar IronPDF con otras bibliotecas PDF de .NET](#5-compare-ironpdf-with-other-net-pdf-libraries)
- [Matriz de decisión rápida: IronPDF frente a otros conversores de PDF .NET](#quick-decision-matrix-ironpdf-versus-other-net-pdf-converters)
- [Comparación detallada: IronPDF frente a otros conversores de PDF .NET](#detailed-comparison-ironpdf-versus-other-net-pdf-converters)
- [Comparación de la conversión de HTML a PDF en la vida real: Rendering Reddit's Homepage](#real-life-html-to-pdf-conversion-comparison-rendering-reddits-homepage)
- [Conclusión sobre el rendimiento y la calidad del PDF de salida](#conclusion-on-performance-and-output-pdf-quality)
- [Resumen](#summary)
6. [Solución de problemas y soporte técnico](#6-troubleshooting--technical-support)
- [Arreglos rápidos en errores comunes](#quick-fixes-on-common-errors)
- [Obtenga ayuda de los ingenieros que construyeron IronPDF, 24 horas al día, 7 días a la semana](#get-help-from-the-engineers-who-built-ironpdf-247)
## 1. How to Convert HTML to PDF C#
Ya sea que trabaje con cadenas HTML, URLs o archivos HTML, IronPDF proporciona opciones flexibles para generar documentos PDF de alta calidad que cumplen con sus requisitos específicos.
En este tutorial, lo guiaremos por los escenarios más comunes, incluyendo cadena HTML a PDF, URL a PDF y archivo HTML a PDF. Además, IronPDF también proporciona una variedad de operaciones para manipular documentos PDF:
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th><strong>Conversión versátil de PDF</strong></th>
<th><strong>Conversión de páginas web dinámicas a PDF</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/html-zip-file-to-pdf/">Convertir PDF desde archivo HTML ZIP<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/image-to-pdf/">Convertir imagen a PDF<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/rasterize-pdf-to-images/">Convertir imagen desde PDF<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/docx-to-pdf/">Convertir DOCX a PDF<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/rtf-to-pdf/">Convertir RTF a PDF<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/md-to-pdf/">Convertir MD a PDF<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/xml-to-pdf/">Convertir XML a PDF<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/pdf-to-html/">Convertir PDF a HTML<i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/aspx-to-pdf/">Convertir PDF desde páginas ASPX<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/xaml-to-pdf-maui/">Convertir XAML a PDF (MAUI)<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/csharp-pdf-reports/">Generar informes en PDF<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/blazor-tutorial/">Crear archivos PDF en servidores Blazor<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/razor-to-pdf-blazor-server/">Convertir Razor a PDF (servidor Blazor)<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-razor/">Convertir CSHTML a PDF (Razor Pages)<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-mvc-core/">Convertir CSHTML a PDF (MVC Core)<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-mvc-framework/">Convertir CSHTML a PDF (Marco MVC)<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-razor-headlessly/">Convertir CSHTML a PDF (sin interfaz gráfica)<i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
### Cómo convertir una cadena HTML a PDF
La operación más fundamental es convertir una cadena HTML a PDF. Este método es perfecto para contenido HTML generado dinámicamente. El método `RenderHtmlAsPdf` soporta completamente HTML5, CSS3, JavaScript e imágenes cuando convierte HTML a PDF directamente.
```csharp
using IronPdf;
// Create the Chrome renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Save the PDF
pdf.SaveAs("output.pdf");
```
[[t:((Actualizado para v2025.9.4) Las actualizaciones recientes solucionan problemas con caracteres especiales/emojis en metadatos HTML y aseguran un mejor manejo de campos de formulario HTML, incluyendo caracteres chinos en Linux. Pruebe contenido dinámico con <span style="color: red;">`EnableJavaScript = true`</span> para obtener resultados óptimos.
)]]
Cuando su cadena HTML hace referencia a activos locales como imágenes o hojas de estilo, use el parámetro `BaseUrlPath` para convertir adecuadamente contenido HTML con todos los recursos:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML content with local image and CSS references
string html = @"
<link rel='stylesheet' href='styles.css'>
<img src='logo.png' alt='Company Logo'>
<h1>Company Report</h1>
<p>Annual report content...</p>";
// Set base path for resolving relative URLs in HTML to PDF conversion
var pdf = renderer.RenderHtmlAsPdf(html, @"C:\MyProject\Assets\");
pdf.SaveAs("report.pdf");
```
[[t:(BaseUrlPath le dice a IronPDF dónde encontrar sus archivos CSS, JavaScript e imágenes. Todas las rutas relativas en su cadena HTML se resolverán desde este directorio.)]]
**RELATED HOW-TO ARTICLE:** <a class="content-anchor" href="/how-to/html-string-to-pdf/">How to Convert HTML String to PDF in C# <i class="fa-solid fa-arrow-right"></i></a>
### Cómo exportar una URL existente a PDF
Renderizar páginas web completas a PDFs con C# permite a los equipos separar el diseño del PDF y el trabajo de renderizado del back-end. Este enfoque le permite convertir cualquier URL específica directamente al formato PDF.
**CSS de Impresión vs Pantalla**
Puede configurar IronPDF para renderizar usando cualquier tipo de medios CSS.
```csharp
using IronPdf;
using IronPdf.Rendering;
// Initialize HTML to PDF converter
var renderer = new ChromePdfRenderer();
// Configure CSS media type for rendering specified URLs
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Screen media type shows the entire web page as displayed on screen
```
**Soporte de JavaScript**
IronPDF soporta completamente JavaScript, jQuery e incluso AJAX cuando convierte HTML a PDF. Para contenido HTML dinámico, puede configurar IronPDF para esperar la finalización del JavaScript antes de renderizar páginas web en PDF. Esto es perfecto para aplicaciones de una sola página y sitios web dinámicos.
```csharp
using IronPdf;
// Configure JavaScript rendering for dynamic HTML content to PDF
var renderer = new ChromePdfRenderer();
// Enable JavaScript execution during PDF generation
renderer.RenderingOptions.EnableJavaScript = true;
// WaitFor.RenderDelay pauses before capturing the HTML
renderer.RenderingOptions.WaitFor.RenderDelay = 500; // milliseconds
```
La ejecución de JavaScript también se puede mostrar cuando se renderiza un gráfico de acordes d3.js avanzado desde una página web al formato PDF:
```csharp
using IronPdf;
// Create renderer for JavaScript-heavy HTML
var renderer = new ChromePdfRenderer();
// Convert d3.js visualization web page to PDF
var pdf = renderer.RenderUrlAsPdf("https://bl.ocks.org/mbostock/4062006");
// Save the interactive chart as static PDF
pdf.SaveAs("chart.pdf");
```
**CSS Responsivo**
Como las páginas web responsivas están diseñadas para ser vistas en un navegador, y IronPDF no abre una ventana de navegador real en el sistema operativo de su servidor, los elementos HTML responsivos pueden renderizarse en su tamaño más pequeño. Se recomienda `PdfCssMediaType.Print` para navegar este problema al renderizar páginas web completas.
```csharp
// Configure for optimal responsive design handling in HTML to PDF
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
```
**RELATED HOW-TO ARTICLE:** <a class="content-anchor" href="/how-to/url-to-pdf/">How to Render URL to PDF <i class="fa-solid fa-arrow-right"></i></a>
### Cómo convertir un archivo HTML a PDF
Convertir archivos HTML locales a PDF preserva todos los recursos relativos incluyendo CSS, imágenes y JavaScript, como si se abrieran usando el protocolo file://. Este método de HTML a PDF es mejor para convertir plantillas o páginas HTML pre-diseñadas a documentos PDF.
```csharp
using IronPdf;
// Initialize ChromePdfRenderer for HTML file conversion
var renderer = new ChromePdfRenderer();
// Convert HTML file to PDF documents
// Preserves all relative paths and linked resources in HTML
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
// Save the HTML file as PDF
pdf.SaveAs("Invoice.pdf");
// All CSS, JavaScript, and images load correctly in the generated PDF
```
[[t:(Mantenga sus archivos HTML en una carpeta separada con sus activos (CSS, imágenes) para editar y probar en un navegador antes de convertir el archivo HTML a PDF. Esto asegura que su HTML se renderiza perfectamente para documentos PDF de alta calidad.)]]
**RELATED HOW-TO Article:** <a class="content-anchor" href="/how-to/html-file-to-pdf/">Render HTML File to PDF <i class="fa-solid fa-arrow-right"></i></a>
### Cómo convertir páginas Razor a PDF
Si tu proyecto ASP.NET Core ya utiliza páginas Razor, puedes convertirlas directamente a PDF sin reconstruir tu HTML. La extensión Razor de IronPDF agrega el método `RenderRazorToPdf`, que toma su página .cshtml, completa con su modelo y diseño, y la renderiza como un documento PDF en una sola llamada.
```shell
PM > Install-Paquete IronPdf.Extensions.Razor
```
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a Razor Page directly to PDF
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
```
[[i:(RenderRazorToPdf requiere un proyecto de aplicación web ASP.NET Core. No funcionará en aplicaciones de consola o bibliotecas de clases — el motor de vista Razor debe estar disponible en el pipeline de alojamiento.)]]
**RELATED HOW-TO Article:** <a class="content-anchor" href="/how-to/cshtml-to-pdf-razor/">How to Convert CSHTML to PDF in Razor Pages <i class="fa-solid fa-arrow-right"></i></a>
### Cómo convertir vistas MVC a PDF
Los equipos que usan el patrón MVC pueden generar PDFs directamente desde sus Vistas y controladores existentes. Instale el paquete de extensión de MVC Core, luego llame a `RenderRazorViewToPdf` con la ruta de su vista y modelo — IronPDF maneja el pipeline de renderizado Razor y produce un PDF terminado.
Esto es especialmente útil para informes, facturas y cualquier página donde el HTML ya esté diseñado y probado en el navegador. El PDF generado conserva la salida completa de la Vista, incluidas las páginas de diseño y vistas parciales.
```shell
PM > Install-Paquete IronPdf.Extensions.Mvc.Core
```
Primero, registre el servicio `IRazorViewRenderer` en su Program.cs para que sus controladores puedan inyectarlo:
```csharp
using IronPdf.Extensions.Mvc.Core;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
// Register the Razor view renderer for IronPDF
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
```
Luego en tu acción de controlador, inyecta el renderizador y convierte cualquier Vista a PDF:
```csharp
using IronPdf;
using IronPdf.Extensions.Mvc.Core;
var renderer = new ChromePdfRenderer();
// Render an MVC View with model data to PDF
PdfDocument pdf = renderer.RenderRazorViewToPdf(
_viewRenderService, "Views/Home/Report.cshtml", reportModel);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
```
**RELATED HOW-TO Article:** <a class="content-anchor" href="/how-to/cshtml-to-pdf-mvc-core/">How to Convert Views to PDF in ASP.NET Core MVC <i class="fa-solid fa-arrow-right"></i></a>
### Página web dinámica a PDF
¿Necesitas que tu página web dinámica se conserve y convierta a PDFs mientras se preserva el diseño y formato exacto? No busques más allá de IronPDF, que convierte rápidamente una variedad de populares frameworks de páginas web dinámicas a PDFs.
#### PDF a partir de páginas ASPX
Aquí hay un breve fragmento de código sobre la conversión de Páginas ASPX como PDF en Páginas de Servidor Activo.
```cs
:path=/static-assets/pdf/content-code-examples/how-to/aspx-to-pdf-2.cs
```
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva [guía práctica](https://ironpdf.com/how-to/aspx-to-pdf/).
#### XAML a PDF (MAUI)
Para los desarrolladores que buscan construir aplicaciones multiplataforma, .NET MAUI es una elección popular entre los frameworks. IronPDF soporta por completo la conversión de XAML a PDF con unos pocos pasos.
```cs
:path=/static-assets/pdf/content-code-examples/how-to/xaml-to-pdf-maui-mainpage-xaml-cs.cs
```
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva [guía práctica](https://ironpdf.com/how-to/xaml-to-pdf-maui/).
#### Generar informes en PDF
Cuando se trata de generar Reportes PDF, las dimensiones y formato exactos son cruciales. Como tal, IronPDF te permite generar PDFs sin problemas con solo un par de pasos.
```cs
:path=/static-assets/pdf/content-code-examples/how-to/csharp-pdf-reports-render-html-file.cs
```
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva [guía práctica](https://ironpdf.com/how-to/csharp-pdf-reports/).
#### Crear PDF en servidores Blazor
IronPDF soporta .NET 6, y como incluye tipos de proyecto como Blazor, este fragmento de código proporciona un breve ejemplo de cómo crear PDFs en Servidor Blazor.
```csharp
@code {
// Model to bind user input
private InputHTMLModel _InputMsgModel = new InputHTMLModel();
private async Task SubmitHTML()
{
// Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Create a renderer to convert HTML to PDF
var render = new IronPdf.ChromePdfRenderer();
// Render the HTML input into a PDF document
var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);
var fileName = "iron.pdf";
// Create a stream reference for the PDF content
using var streamRef = new DotNetStreamReference(stream: doc.Stream);
// Invoke JavaScript function to download the PDF in the browser
await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);
}
public class InputHTMLModel
{
public string HTML { get; set; } = "My new message";
}
}
```
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva [guía práctica](https://ironpdf.com/how-to/blazor-tutorial/).
#### Razor a PDF (Servidores Blazor)
Además de crear PDFs en Blazor Servers, IronPDF también es compatible con la generación de documentos PDF desde componentes Razor dentro de una página Blazor. Haciendo la creación de archivos y páginas PDF mucho más eficiente.
```csharp
[Parameter]
public IEnumerable<PersonInfo> persons { get; set; }
public Dictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();
protected override async Task OnInitializedAsync()
{
persons = new List<PersonInfo>
{
new PersonInfo { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new PersonInfo { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new PersonInfo { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
}
private async void PrintToPdf()
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Apply text footer
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
LeftText = "{date} - {time}",
DrawDividerLine = true,
RightText = "Page {page} of {total-pages}",
Font = IronSoftware.Drawing.FontTypes.Arial,
FontSize = 11
};
Parameters.Add("persons", persons);
// Render razor component to PDF
PdfDocument pdf = renderer.RenderRazorComponentToPdf<Person>(Parameters);
File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData);
}
```
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva [guía práctica](https://ironpdf.com/how-to/razor-to-pdf-blazor-server/).
#### CSHTML a PDF
Convertir CSHTML (Razor) a PDF te permite generar documentos profesionales y listos para imprimir directamente desde tus aplicaciones web. Esto es útil para facturas, informes, contratos, o cualquier contenido dinámico. IronPDF soporta Páginas Razor, MVC Core, y MVC Framework, además de renderizado sin interfaz, haciéndolo fácil de integrar la generación de PDFs en tus aplicaciones .NET con solo unas pocas líneas de código.
##### CSHTML a PDF (Razor Pages)
```csharp
using IronPdf.Razor.Pages;
public IActionResult OnPostAsync()
{
persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
ViewData["personList"] = persons;
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor Page to PDF document
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");
}
```
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva [guía práctica](https://ironpdf.com/how-to/cshtml-to-pdf-razor/).
##### CSHTML a PDF (MVC Core)
```csharp
public async Task<IActionResult> Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render View to PDF document
PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);
Response.Headers.Add("Content-Disposition", "inline");
// Output PDF document
return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf");
}
return View(persons);
}
```
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva [guía práctica](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-core/).
##### CSHTML a PDF (Marco MVC)
```csharp
public ActionResult Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (HttpContext.Request.HttpMethod == "POST")
{
// Provide the path to your view file
var viewPath = "~/Views/Home/Persons.cshtml";
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor view to PDF document
PdfDocument pdf = renderer.RenderView(this.HttpContext, viewPath, persons);
Response.Headers.Add("Content-Disposition", "inline");
// View the PDF
return File(pdf.BinaryData, "application/pdf");
}
return View(persons);
}
```
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva [guía práctica](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-framework/).
##### CSHTML a PDF (sin encabezado)
```csharp
app.MapGet("/PrintPdf", async () =>
{
// Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Enable detailed logging for troubleshooting
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
// Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");
// Create a new instance of ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render the HTML string as a PDF document
PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");
// Return the PDF file as a response
return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
});
```
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva [guía práctica](https://ironpdf.com/how-to/cshtml-to-pdf-razor-headlessly/).
## 2. Cómo configurar los ajustes de HTML a PDF
En términos de manipulación de documentos PDF, IronPDF proporciona amplias personalizaciones a través de la propiedad `ChromePdfRenderer.RenderingOptions` para los PDFs renderizados.
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th><strong>Configuración</strong></th>
<th><strong>Descripción</strong></th>
<th><strong>Ejemplo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span><code>Tamaño de papel</code></span>
</td>
<td>
<span>Establecer las dimensiones de página para archivos PDF existentes (A4, Carta, Legal, etc.)</span>
</td>
<td>
<span><code>PdfPaperSize.A4</code></span>
</td>
</tr>
<tr>
<td>
<span><code>Orientación del papel</code></span>
</td>
<td>
<span>Establecer vertical u horizontal para archivos PDF existentes</span>
</td>
<td>
<span><code>PdfPaperOrientation.Paisaje</code></span>
</td>
</tr>
<tr>
<td>
<span><code>MargenSuperior</code>/<code>Inferior</code>/<code>Izquierda</code>/<code>Derecha</code></span>
</td>
<td>
<span>Establecer márgenes de página en milímetros (predeterminado: 25 mm)</span>
</td>
</tr>
<tr>
<td>
<span><code>CssMediaType</code></span>
</td>
<td>
<span>CSS de pantalla o impresión para HTML a PDF</span>
</td>
<td>
<span><code>PdfCssMediaType.Imprimir</code></span>
</td>
</tr>
<tr>
<td>
<span><code>ImprimirFondosHtml</code></span>
</td>
<td>
<span>Incluir colores/imágenes de fondo (predeterminado: verdadero)</span>
</td>
<td>
<span>verdadero</span>
</td>
</tr>
<tr>
<td>
<span><code>HabilitarJavaScript</code></span>
</td>
<td>
<span>Ejecutar JavaScript antes de renderizar el contenido HTML</span>
</td>
<td>
<span>verdadero</span>
</td>
</tr>
<tr>
<td>
<span><code>Esperar.RenderDelay</code></span>
</td>
<td>
<span>Tiempo de espera para contenido HTML dinámico (ms)</span>
</td>
<td>
<span>500</span>
</td>
</tr>
</tbody>
</table>
</div>
Vea este fragmento de código para un ejemplo completo de configuración para manipular documentos PDF:
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
// Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
// Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Generate PDFs with all settings applied to HTML content
var htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
pdfDocument.SaveAs("styled-output.pdf");
```
[[t:(Use PdfCssMediaType para obtener diseños más limpios y optimizados para impresión en su formato de archivo PDF renderizado. Use Pantalla para coincidir exactamente con lo que los usuarios ven en su navegador.)]]
**ARTÍCULOS RELACIONADOS:**
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>Conversión de PDF a medida</th>
<th>Perfeccionar Diseño PDF</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/rendering-options/">Explorar todos los métodos de renderizado de PDF<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/custom-margins/">Cómo establecer márgenes personalizados<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/color-grayscale/">Cómo generar escala de grises<i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/table-of-contents/">Cómo agregar una tabla de contenido<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/html-to-pdf-page-breaks/">Cómo agregar o evitar saltos de página<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/viewport-zoom/">How to Fit to Paper & Zoom <i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
### Cómo configurar encabezados HTTP personalizados, cookies y credenciales de inicio de sesión
Al renderizar URLs que requieren autenticación o metadatos específicos de la solicitud, IronPDF te permite incluir credenciales de inicio de sesión, cookies de sesión y encabezados HTTP con la solicitud. Esto permite renderizar directamente a PDF los paneles de intranet, informes restringidos o páginas generadas por API sin la necesidad de recuperar el HTML por separado.
Para autenticación básica o NTLM, establezca un objeto `LoginCredentials` en el renderizador. Para el acceso basado en tokens o sesiones, pase cookies y encabezados a través de `RenderingOptions` antes de llamar a `RenderUrlAsPdf`.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword"
};
// Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";
// Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/quarterly-report");
pdf.SaveAs("quarterly-report.pdf");
```
**ARTÍCULOS RELACIONADOS:** <a class="content-anchor" href="/how-to/logins/">Render PDFs Behind Login Authentication <i class="fa-solid fa-arrow-right"></i></a> | <a class="content-anchor" href="/how-to/http-request-header/">Custom HTTP Request Headers <i class="fa-solid fa-arrow-right"></i></a>
### Cómo configurar un proxy para el renderizado de PDF
Al renderizar HTML que carga recursos externos detrás de un proxy corporativo, pase la dirección del proxy como el tercer parámetro en `RenderHtmlAsPdf()`. Este es un parámetro de método, no una propiedad en `ChromePdfRenderOptions` — por lo tanto, se establece por llamada de renderizado, no en el renderizador.
Para proxies autenticados, incruste credenciales directamente en el URL usando el formato `http://user:pass@host:port`. Codifique en URL los caracteres especiales en contraseñas con `Uri.EscapeDataString()`.
```cs
using IronPdf;
var renderer = new ChromePdfRenderer();
// Proxy is the third parameter — not a render option
PdfDocument pdf = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath: null,
proxy: "http://proxy.corp.local:8080"
);
pdf.SaveAs("proxied-report.pdf");
```
Tenga en cuenta que `RenderUrlAsPdf()` no acepta un parámetro de proxy. Para renderizar un URL en vivo detrás de un proxy, obtenga el HTML primero con `HttpClient` configurado con un `WebProxy`, luego páselo a `RenderHtmlAsPdf()` con el parámetro de proxy para la carga de activos.
**RELATED HOW-TO Article:** <a class="content-anchor" href="/how-to/proxy/">How to Configure Proxy Servers for PDF Rendering <i class="fa-solid fa-arrow-right"></i></a>
## 3. Cómo utilizar las funciones avanzadas de generación y seguridad de PDF
Desbloquee capacidades a nivel empresarial para la conversión de HTML a PDF con plantillas avanzadas, operaciones asíncronas y características de seguridad. Estos métodos de manipulación de PDF le permiten crear documentos PDF a gran escala, proteger archivos PDF sensibles y asegurar la autenticidad de los documentos cuando convierte HTML a un formato PDF profesional.
### Cómo generar una plantilla HTML para la creación de PDF por lotes
**Creación Básica de PDF en Lote**
La creación de PDF en lote es esencial para generar múltiples documentos PDF personalizados de manera eficiente. Para escenarios básicos, el método `String.Format` en C# funciona mejor para la manipulación simple de PDF.
```csharp
// Simple HTML templating with String.Format
string htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");
// Results in HTML content: <h1>Hello World!</h1>
```
Para plantillas más largas cuando necesita generar documentos PDF, use la sustitución de marcadores de posición en su contenido HTML:
using IronPDF;
```csharp
// Define reusable HTML template for PDF files
var htmlTemplate = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>";
// Customer names for batch PDF conversion processing
var names = new[] { "John", "James", "Jenny" };
// Create personalized PDF documents for each customer
var renderer = new ChromePdfRenderer();
foreach (var name in names)
{
// Replace placeholder with actual data in HTML string
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
// Generate personalized PDF document from HTML content
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
// Save with customer-specific filename as PDF files
pdf.SaveAs($"{name}-invoice.pdf");
}
```
**Plantillas de HTML a PDF con Handlebars.NET**
Para plantillas complejas con bucles y condicionales al convertir HTML a PDF, use plantillas avanzadas con `Handlebars.NET` para generar documentos PDF con contenido HTML dinámico.
```shell
# First, install Handlebars.NET for HTML to PDF templating
PM > Install-Paquete Handlebars.NET
```
```csharp
using HandlebarsDotNet;
using IronPdf;
// Define Handlebars template with placeholders for HTML content
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile template for reuse in PDF conversion
var template = Handlebars.Compile(source);
// Create data object (can be database records) for HTML to PDF directly
var data = new {
title = "Monthly Report",
body = "Sales increased by 15% this month."
};
// Merge template with data to create HTML content
var htmlResult = template(data);
// Convert templated HTML to PDF using the PDF converter
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlResult);
pdf.SaveAs("monthly-report.pdf");
```
**RELATED HOW-TO Article:** <a class="content-anchor" href="https://github.com/rexm/Handlebars.NET">Learn more about Handlebars.NET on GitHub <i class="fa-solid fa-arrow-right"></i></a>
<div>
<h4 style="color: #181818;">Controlar saltos de página en PDF:</h4> Gestionar la paginación en los documentos PDF generados garantiza diseños profesionales y legibles al convertir fragmentos de HTML. Usa CSS para controlar dónde se dividen las páginas en tus archivos PDF.
</div>
```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>Page 1 Content</h1>
</div>
<div class="page">
<h1>Page 2 Content</h1>
</div>
<div class="page">
<h1>Page 3 Content</h1>
</div>
</body>
</html>
```
### Cómo generar un PDF mediante el método asíncrono
IronPDF ofrece rendimiento a nivel empresarial con soporte completo para async y multihilos para sus requisitos de conversión de HTML a PDF cuando necesita generar archivos PDF a gran escala.
```csharp
using IronPdf;
using System.Threading.Tasks;
// Async method for non-blocking PDF generation from HTML content
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
// Async HTML to PDF conversion preserves thread pool
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Return PDF files as byte array for web responses
return pdf.BinaryData;
}
// Concurrent batch PDF generation for multiple HTML strings
public async Task GenerateMultiplePdfsAsync(List<string> htmlPlantillas)
{
var renderer = new ChromePdfRenderer();
// Create parallel conversion tasks to generate PDF documents
var tasks = htmlPlantillas.Select(html =>
renderer.RenderHtmlAsPdfAsync(html)
);
// Await all PDF conversions simultaneously
var pdfs = await Task.WhenAll(tasks);
// Save generated PDF files from HTML content
for (int i = 0; i < pdfs.Length; i++)
{
pdfs[i].SaveAs($"document-{i}.pdf");
}
}
```
[[t:(Consejos de optimización del rendimiento para la conversión de HTML a PDF)]]
- Use sistemas de 64 bits para un rendimiento óptimo de generación de PDF.
- Asegúrese de contar con recursos de servidor adecuados cuando genere documentos PDF (evite niveles gratuitos con poca capacidad)
- Permita RenderDelay suficiente for JavaScript complejo en contenido HTML.
- Reutilice instancias `ChromePdfRenderer` cuando sea posible.
- Aproveche correcciones de memoria de v2025.9.4 para operaciones por lotes/async y reducir recursos. pruebe con tamaños de archivo reducidos con encabezados/pies de página personalizados repetidos.
**RELATED HOW-TO Article:** <a class="content-anchor" href="/how-to/async/">How to Generate PDFs with Async and Multithreading <i class="fa-solid fa-arrow-right"></i></a>
### Cómo agregar funciones de seguridad avanzadas
**Cómo Agregar Protección por Contraseña para Archivos PDF en .NET**
Proteja documentos PDF generados sensibles con contraseñas y permisos cuando convierta contenido HTML a un formato PDF protegido.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML to PDF with security
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>");
// Configure security settings for PDF files
pdf.SecuritySettings.UserPassword = "user123"; // Password to open PDF documents
pdf.SecuritySettings.OwnerPassword = "owner456"; // Password to modify PDF files
// Set granular permissions for PDF format
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint;
// Apply strong encryption to PDF documents
pdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256;
pdf.SaveAs("secure-document.pdf");
```
**Cómo Agregar Firmas Digitales a Archivos PDF**
Agregue firmas criptográficas para asegurar la autenticidad del documento PDF cuando genere archivos PDF a partir de contenido HTML.
```csharp
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
// Generate PDF from HTML page
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");
// Create digital signature with certificate for PDF files
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "legal@company.com",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval",
SignerName = "Authorized Signer" // New property in v2025.8.8 for enhanced signature details
};
// Apply signature to PDF documents
pdf.Sign(signature);
pdf.SaveAs("signed-contract.pdf");
```
**RELATED HOW-TO Article:** <a class="content-anchor" href="/how-to/signing/">Digitally Signing PDF Documents with C# <i class="fa-solid fa-arrow-right"></i></a>
### Cómo convertir formularios HTML a PDFs rellenable
Para convertir elementos de formulario HTML estándar en campos de formulario PDF interactivos y rellenables, active la opción de renderizado `CreatePdfFormsFromHtml`. Esto conserva entradas de texto, casillas, botones de opción y menús desplegables como campos editables en el documento PDF generado.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Enable HTML form to PDF form conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
string htmlForm = @"
<h2>Employee Onboarding Form</h2>
<form>
<label>Full Name:</label>
<input type='text' name='fullName' value='' /><br/>
<label>Department:</label>
<select name='department'>
<option value='engineering'>Engineering</option>
<option value='marketing'>Marketing</option>
<option value='sales'>Sales</option>
</select><br/>
<label>Agree to Terms:</label>
<input type='checkbox' name='agreeTerms' />
</form>";
var pdf = renderer.RenderHtmlAsPdf(htmlForm);
pdf.SaveAs("onboarding-form.pdf");
```
[[w:(Cada campo de formulario en su HTML debe tener un atributo único `name`. Los nombres duplicados harán que los campos compartan el mismo valor en el PDF generado, llevando a un comportamiento inesperado cuando los usuarios llenen el formulario.)]]
**RELATED HOW-TO Article:** <a class="content-anchor" href="/how-to/create-forms/">How to Create Fillable PDF Forms in C# <i class="fa-solid fa-arrow-right"></i></a>
### Cómo convertir elementos HTML específicos a PDF
Para renderizar una sección específica de una página en lugar del documento completo, aísle el elemento objetivo antes de renderizar. La forma más directa utiliza la opción de renderizado `JavaScript` para reemplazar el cuerpo del documento con el contenido del elemento objetivo, combinado con `WaitFor.HtmlQuerySelector()` para asegurar que el elemento exista antes de la extracción. El fragmento a continuación preserva `document.head` para que las hojas de estilo y fuentes se mantengan — sin ese paso, las reglas CSS que dependen de selectores de ancestros se perderían en el PDF extraído.
Para escenarios del lado del servidor donde tiene acceso al HTML sin procesar, extraiga el fragmento objetivo con un analizador como AngleSharp y páselo a `RenderHtmlAsPdf()` — no es necesario ejecutar JavaScript.
```cs
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
// Replace the body with only the target element
renderer.RenderingOptions.JavaScript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
";
// Wait for the target element before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);
var pdf = renderer.RenderHtmlAsPdf(fullPageHtml);
pdf.SaveAs("invoice-summary.pdf");
```
**RELATED HOW-TO Article:** <a class="content-anchor" href="/how-to/html-element-to-pdf/">How to Convert HTML Elements and Partial Pages to PDF <i class="fa-solid fa-arrow-right"></i></a>
### Cómo renderizar páginas autenticadas a PDF
Hay tres mecanismos para renderizar páginas que están detrás de la autenticación: credenciales de inicio de sesión de red, cookies personalizadas y encabezados de solicitudes HTTP. Estos cubren los escenarios de autenticación más comunes al convertir contenido web protegido a PDF.
**Credenciales de inicio de sesión**
Use `ChromeHttpLoginCredentials` para autenticación básica, de resumen (digest) o NTLM al convertir URLs protegidos a PDF.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure network authentication
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword",
AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic
};
var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports");
pdf.SaveAs("authenticated-report.pdf");
```
**Cookies y encabezados HTTP**
Para la autenticación basada en token o sesión, adjunte cookies personalizadas y encabezados HTTP directamente a la solicitud de renderizado.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Add session cookies
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123token";
renderer.RenderingOptions.CustomCookies["authToken"] = "bearer-xyz";
// Add custom HTTP headers (e.g., API key or Bearer token)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard");
pdf.SaveAs("dashboard.pdf");
```
[[t:(Para inicios de sesión basados en formularios HTML (POST usuario/contraseña), considere usar `HttpClient` para autenticar primero, luego pase las cookies resultantes al diccionario `CustomCookies` para renderizar la página protegida.)]]
**RELATED HOW-TO Article:** <a class="content-anchor" href="/how-to/logins/">How to Convert HTML Behind Login Authentication to PDF <i class="fa-solid fa-arrow-right"></i></a>
### ¿Cómo puedo generar archivos PDF a partir de múltiples fragmentos HTML?
Para generar archivos PDF combinando fragmentos HTML, puedes [fusionarlos](https://ironpdf.com/examples/merge-pdfs/) . Esto crea informes de varias secciones o combina contenido de diferentes fuentes:
```cs
var renderer = new ChromePdfRenderer();
PdfDocument part1 = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>");
PdfDocument part2 = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>");
var merged = PdfDocument.Merge(part1, part2);
merged.SaveAs("Merged.pdf");
// Alternative approach: copy specific pages
var combinedDoc = new PdfDocument();
combinedDoc.CopyPage(part1, 0); // Copy first page
combinedDoc.CopyPage(part2, 0); // Copy first page
combinedDoc.SaveAs("Combined.pdf");
```
Esto ayuda a la hora de crear informes de varias secciones a partir de diferentes fragmentos HTML. También puedes [agregar marcadores](https://ironpdf.com/how-to/bookmarks/) para mejorar la navegación.

### ¿Cómo convierto HTML a PDF en las API web?
En ASP.NET Web API, genere y devuelva archivos PDF sin guardarlos en el disco usando [MemoryStream](https://ironpdf.com/how-to/pdf-to-memory-stream/) . Este patrón es ideal para [aplicaciones Blazor](https://ironpdf.com/how-to/blazor-tutorial/) y servicios RESTful:
```cs
[HttpGet("download")]
public IActionResult GetPdf()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Web Report</h1><p>Generated dynamically.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
var bytes = pdf.BinaryData;
// Optional: Add metadata
pdf.MetaData.Author = "API Service";
pdf.MetaData.CreationDate = DateTime.Now;
return File(bytes, "application/pdf", "report.pdf");
}
```
Este patrón funciona muy bien para la generación de PDF del lado del servidor en aplicaciones web .NET 10. Puede integrarse con [vistas CSHTML](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-core/) para aplicaciones MVC.
### ¿Cómo agregar encabezados, marcas de agua y seguridad?
#### Cómo agregar encabezados y pies de página profesionales
Los encabezados y pies de página que muestran números de página, fechas o marca hacen que los documentos de varias páginas sean mucho más legibles y profesionales. IronPDF los procesa como fragmentos HTML, por lo que puede utilizar el estilo CSS completo, incluidas imágenes y colores de marca:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
MaxHeight = 50,
HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",
BaseUrl = new Uri(@"file:///C:/assets/")
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
MaxHeight = 30,
HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true
};
renderer.RenderingOptions.MarginTop = 60;
renderer.RenderingOptions.MarginBottom = 40;
var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>");
pdf.SaveAs("report-with-headers.pdf");
```
Los marcadores de posición como `{page}` y `{total-pages}` se reemplazan automáticamente al momento de renderizar. Revise el [tutorial de encabezados y pies de página](https://ironpdf.com/how-to/headers-and-footers/) para la inyección dinámica de fechas, colocación de logotipos y estilos de página alternos.
#### Aplicación de marcas de agua, cifrado y firmas digitales
Las marcas de agua protegen borradores de documentos e informes confidenciales. La protección con contraseña y la configuración de permisos restringen quién puede imprimir, copiar o editar un PDF. Las firmas digitales añaden una capa de autenticidad verificable para los contratos y documentos regulados. Puedes combinar los tres en un único flujo de trabajo:
```csharp
using IronPdf;
using System.Security.Cryptography.X509Certificates;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>");
// Watermark
pdf.ApplyWatermark(
"<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>",
rotation: 45,
opacity: 30
);
// Encryption and permissions
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
// Digital signature
var cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");
var signature = new PdfSignature(cert)
{
SigningContact = "Jane Smith",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval"
};
pdf.Sign(signature);
pdf.SaveAsRevision("signed-contract.pdf");
```
Obtenga información sobre [técnicas de marca de agua](https://ironpdf.com/how-to/custom-watermark/) , [configuraciones de seguridad de PDF](https://ironpdf.com/how-to/pdf-permissions-passwords/) y [firma basada en certificados](https://ironpdf.com/examples/digitally-sign-a-pdf/) , incluida la integración de HSM para módulos de seguridad de hardware.
## 4. Cómo implementar HTML a PDF en plataformas en la nube
La implementación de la conversión de HTML a PDF en entornos en la nube requiere una configuración específica para el renderizado sin cabeza, rutas de archivos temporales y asignación de recursos. Esta sección cubre las plataformas en la nube más comunes y los despliegues con contenedores con IronPDF.
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>Plataforma</th>
<th>Recursos mínimos</th>
<th>Paquete</th>
<th>AutoConfig</th>
<th>Ruta temporal</th>
<th>Elemento clave</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span>Azure App Service</span>
</td>
<td>
<span>Nivel B1 (Básico)</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span><code>true</code></span>
</td>
<td>
<span>/tmp</span>
</td>
<td>
<span>Los niveles gratuitos/compartidos fallan: sin GPU, poca memoria</span>
</td>
</tr>
<tr>
<td>
<span>Azure Functions (Windows)</span>
</td>
<td>
<span>Nivel B1</span>
</td>
<td>
<span><code>IronPdf</code></span>
</td>
<td>
<span><code>true</code></span>
</td>
<td>
<span>/tmp</span>
</td>
<td>
<span>Desmarque 'Ejecutar desde el archivo del paquete'</span>
</td>
</tr>
<tr>
<td>
<span>AWS Lambda</span>
</td>
<td>
<span>512 MB / tiempo de espera de 330s</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span><code>true</code></span>
</td>
<td>
<span>/tmp (requerido)</span>
</td>
<td>
<span>El sistema de archivos predeterminado es de solo lectura</span>
</td>
</tr>
<tr>
<td>
<span>Docker (Ubuntu/Debian)</span>
</td>
<td>
<span>Dependiente de la imagen</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span><code>false</code></span>
</td>
<td>
<span>Por defecto de la imagen</span>
</td>
<td>
<span>Establezca <code>false</code> — Dockerfile maneja deps</span>
</td>
</tr>
</tbody>
</table>
</div>
### Cómo implementar en Azure
Al implementar en Azure Functions o App Service, deshabilite la aceleración de GPU y asegúrese de que su nivel de alojamiento proporcione suficiente memoria para el renderizado basado en Chrome. Agregue estas configuraciones al inicio de la aplicación, antes de cualquier llamada de renderizado.
Los sandboxes de Azure se ejecutan sin cabeza sin acceso a GPU, y los niveles gratuitos/compartidos (F1, D1) carecen de los recursos necesarios para Chrome. Apunte a un nivel **B1 (Básico)** o superior.
```csharp
using IronPdf;
// Azure sandboxes block GPU access — always disable
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Required on non-GUI Linux systems
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>");
pdf.SaveAs("azure-report.pdf");
```
[[e:(Los niveles gratuitos y compartidos de Azure App Service (F1, D1) no tienen suficientes recursos para el renderizado PDF basado en Chrome. Utilice al menos un nivel **B1 (Básico)** o superior para evitar errores de memoria insuficiente y tiempo de espera de procesos.)]]
**RELATED GET-STARTED Guide:** <a class="content-anchor" href="/get-started/azure/">How to Deploy IronPDF on Azure <i class="fa-solid fa-arrow-right"></i></a>
### Cómo implementar en AWS Lambda
AWS Lambda requiere una implementación basada en Docker para el renderizado PDF basado en Chrome. El sistema de archivos predeterminado de Lambda es de solo lectura, por lo que todos los caminos temporales y de despliegue deben apuntar a `/tmp`.
Configure estas configuraciones en la parte superior de su manejador de funciones, antes de cualquier llamada de renderizado.
```csharp
using Amazon.Lambda.Core;
using IronPdf;
public class PdfFunction
{
public string FunctionHandler(string input, ILambdaContext context)
{
// Lambda's only writable directory
var tmpPath = "/tmp/";
IronPdf.Installation.TempFolderPath = tmpPath;
IronPdf.Installation.CustomDeploymentDirectory = tmpPath;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
context.Logger.LogLine("Rendering PDF...");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(input);
// Save to /tmp before uploading to S3 or returning
var outputPath = $"{tmpPath}output.pdf";
pdf.SaveAs(outputPath);
return outputPath;
}
}
```
[[i:(Configure su función Lambda con al menos **512 MB de memoria** y un **tiempo de espera mínimo de 60 segundos**. El renderizado basado en Chrome consume mucha memoria y los inicios en frío requieren tiempo de inicialización adicional para el motor de navegador integrado.)]]
**RELATED GET-STARTED Guide:** <a class="content-anchor" href="/get-started/aws/">How to Deploy IronPDF on AWS Lambda <i class="fa-solid fa-arrow-right"></i></a>
### Cómo implementar con Docker
Para despliegues en Docker, use el paquete de NuGet `IronPdf.Linux` para reducir el tamaño de la imagen y evitar descargas de activos en tiempo de ejecución. Este paquete incluye binarios nativos de Linux preempaquetados optimizados para entornos de contenedores.
Establezca `LinuxAndDockerDependenciesAutoConfig = false` cuando su Dockerfile ya instale las dependencias de bibliotecas compartidas de Chrome a través de `apt-get`. La auto-instalación en tiempo de ejecución es redundante en ese caso y puede causar errores de permisos o inicios en frío más largos.
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>Plataforma</th>
<th>Paquete</th>
<th>Configuración clave</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span>Ubuntu 22.04 / Debian</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span>Por defecto: funciona de inmediato</span>
</td>
</tr>
<tr>
<td>
<span>Alpine Linux</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span>Instale chromium a través de apk en Dockerfile</span>
</td>
</tr>
<tr>
<td>
<span>Amazon Linux 2</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span>Utilice <code>LinuxAndDockerDependenciesAutoConfig = true</code></span>
</td>
</tr>
<tr>
<td>
<span>Contenedores de Windows</span>
</td>
<td>
<span><code>IronPdf</code></span>
</td>
<td>
<span>No se requiere configuración adicional</span>
</td>
</tr>
</tbody>
</table>
</div>
<br />
Un Dockerfile mínimo multi-etapa para una imagen basada en Ubuntu/Debian:
```dockerfile
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# Install Chrome dependencies for PDF rendering
RUN apt-get update && apt-get install -y \
libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 \
libcups2 libdrm2 libxkbcommon0 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 \
libcairo2 libasound2 libxshmfence1 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /out .
ENTRYPOINT ["dotnet", "MyApp.dll"]
```
<br />
```csharp
using IronPdf;
// Dependencies handled by Dockerfile apt-get — disable runtime install
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = false;
// No GPU in containers
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>");
pdf.SaveAs("output.pdf");
```
**RELATED GET-STARTED Guide:** <a class="content-anchor" href="/get-started/ironpdf-docker/">How to Use IronPDF with Docker <i class="fa-solid fa-arrow-right"></i></a>
### ¿Cómo se puede optimizar y escalar el rendimiento de HTML a PDF en .NET Core?
El motor Chromium de IronPDF ya renderiza la mayoría de las páginas en < 1 s en hardware moderno, pero el rendimiento se puede multiplicar mediante **procesos por lotes, habilitando el multihilo, y reduciendo la sobrecarga de Headless Chrome**. ### 1. Agregar renderizados en un fondo de subprocesos
#### 1. Renderizado por lotes en un grupo de hilos en segundo plano
```csharp
// BatchRender.cs — Thread-safe on .NET 8+
using IronPdf;
using System.Threading.Tasks;
var htmlSources = Directory.GetFiles("./html", "*.html");
var renderer = new ChromePdfRenderer(); // reuse 1 instance
Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
string html = File.ReadAllText(file);
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));
});
```
- `ChromePdfRenderer` es **[seguro para subprocesos](/examples/threading/)**; - `Parallel.ForEach` satura cada núcleo de CPU;
- `Parallel.ForEach` satura cada núcleo de CPU; - Si las peticiones ASP.NET se acumulan, [traslada renderizados pesados a un servicio de fondo o cola de mensajes](https://stackoverflow.com/questions/65237160/ironpdf-deadlocks-when-running-in-parallel) para mantener bajos los tiempos de respuesta.
- Si las solicitudes de ASP.NET se acumulan, [mueva los renderizados pesados a un servicio de fondo alojado o a una cola de mensajes](https://stackoverflow.com/questions/65237160/ironpdf-deadlocks-when-running-in-parallel) para mantener bajos los tiempos de respuesta.
#### 2. Reduzca el costo de inicio de Headless Chrome
La agrupación ayuda, y **contenedores Linux** deben incluir dos bibliotecas nativas: La falta de bibliotecas se manifiesta como el error <a href="https://stackoverflow.com/questions/50701824/limit-chrome-headless-cpu-and-memory-usage">"<code>libnss3.so no encontrado</code>" en registros de Docker.</a>
```dockerfile
RUN apt-get update && \
apt-get install -y --no-install-recommends libnss3 libatk1.0-0
```
La falta de cualquiera de las bibliotecas se manifiesta como un error `libnss3.so not found` en los registros de Docker.
[Las banderas de Chrome recomendadas (aplicadas automáticamente por IronPDF)](https://stackoverflow.com/questions/66947545/chrome-headless-not-working-as-root-with-no-sandbox) incluyen `--disable-gpu` y `--no-sandbox` para reducir la memoria y problemas de usuarios root en contenedores.
#### 3. Esperar JavaScript tardío con `RenderDelay` o `WaitFor`
Las páginas que animan contadores o recuperan datos después de `DOMContentLoaded` pueden necesitar un breve retraso:
```csharp
renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
```
Consulte el **[tutorial WaitFor](/how-to/waitfor/)** dedicado para promesas personalizadas y sondeo del DOM.
#### 4. Habilitar el registro de depuración para una solicitud
```csharp
renderer.LoggingOptions.DebugMode = true;
renderer.LoggingOptions.LogsToConsole = true;
renderer.LoggingOptions.LogFilePath = "./logs/ironpdf-debug.log";
```
#### 5. Reutilizar PDFs de plantilla en lugar de renderizar de nuevo
#### 5. Reutilizar plantillas PDF en lugar de volver a renderizar
Para corridas de facturas, [crea un **PDF de plantilla** con marcadores de posición](/troubleshooting/ironpdf-performance-assistance/) como `[[name]]` y realiza un reemplazo de texto en lugar de reconstruir HTML complejo. ### Lista de verificación rápida de ajuste
#### Lecturas adicionales
- Cómo hacer – [Generar PDFs con asincronía / multihilo](/how-to/async/)
- Solución de problemas – [Centro de asistencia de rendimiento](/troubleshooting/ironpdf-performance-assistance/)
- Ejemplo – [Demostración de renderizado en hilos](/examples/threading/)
---
## 5. Comparar IronPDF con otras bibliotecas PDF de .NET
IronPDF es la solución preferida para muchos equipos cuando se trata de generación de PDF en C# gracias a su robusto motor de renderizado potenciado por Chromium, APIs intuitivas y mejoras frecuentes de producto. Compararemos IronPDF con otros convertidores de PDF para encontrar la mejor solución para sus necesidades de generación de PDF.
### Matriz de decisión rápida: IronPDF frente a otros convertidores de PDF .NET
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>Solución</th>
<th>Cuándo utilizarlo</th>
<th>Best para</th>
</tr>
</thead>
<tbody>
<tr style="background-color: #f8fdff;">
<td>
<span><strong>IronPDF</strong></span>
</td>
<td>
<span>Conversión de sitios web modernos/HTML a PDF con fidelidad visual exacta.</span>
</td>
<td>
<span>Aplicaciones empresariales que requieren un motor de renderizado HTML confiable, contenido dinámico y soporte profesional.</span>
</td>
</tr>
<tr>
<td>
<span>wkhtmltopdf</span>
</td>
<td>
<span>Conversión de HTML simple en aplicaciones no críticas donde la representación obsoleta es aceptable.</span>
</td>
<td>
<span>Generación básica de documentos con HTML/CSS heredado.</span>
</td>
</tr>
<tr>
<td>
<span>Fusión de sincronización</span>
</td>
<td>
<span>Cuando ya haya invertido en el ecosistema Syncfusion o sea elegible para obtener una licencia comunitaria gratuita.</span>
</td>
<td>
<span>Organizaciones que utilizan múltiples componentes de Syncfusion.</span>
</td>
</tr>
<tr>
<td>
<span>Aspose.PDF</span>
</td>
<td>
<span>Manipulación compleja de PDF cuando la calidad de representación HTML es menos crítica.</span>
</td>
<td>
<span>Amplias funciones de edición de PDF más allá de la conversión a HTML.</span>
</td>
</tr>
</tbody>
</table>
</div>
**COMPARACIONES RELACIONADAS:**
<ul>
<li><a class="content-anchor" href="/competitors/syncfusion-vs-ironpdf/">Comparar IronPDF y Syncfusion<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/competitors/aspose-vs-ironpdf/">Comparar IronPDF y Aspose<i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
### Comparación detallada: IronPDF frente a otros convertidores de PDF .NET
<div>
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full min-w-[1000px] border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-bold [&_th]:text-[#181818] [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-3 [&_td]:text-center [&_td]:align-middle [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_a]:underline [&_.iron-col]:bg-[#F1F9FB] [&_.recommended]:block [&_.recommended]:text-[11px] [&_.recommended]:font-bold [&_.recommended]:text-[#E01A59] [&_.col-name]:block [&_.col-name]:text-sm [&_.col-name]:font-bold [&_.section-row_td]:bg-[#F5F8FA] [&_.section-row_td]:font-bold [&_.section-row_td]:uppercase [&_.section-row_td]:tracking-wide [&_.section-row_td]:text-xs [&_.section-row_td]:text-[#5A6B77] [&_.chip]:inline-block [&_.chip]:whitespace-nowrap [&_.chip]:rounded [&_.chip]:px-2 [&_.chip]:py-0.5 [&_.chip]:text-xs [&_.chip]:font-semibold [&_.chip-full]:bg-[#E8F6F1] [&_.chip-full]:text-[#44806B] [&_.chip-good]:bg-[#E8F6F1] [&_.chip-good]:text-[#44806B] [&_.chip-free]:bg-[#E8F6F1] [&_.chip-free]:text-[#44806B] [&_.chip-partial]:bg-[#FFF2DA] [&_.chip-partial]:text-[#A66E0A] [&_.chip-limited]:bg-[#FFF2DA] [&_.chip-limited]:text-[#A66E0A] [&_.chip-no]:bg-[#FFE1E2] [&_.chip-no]:text-[#A8181D] [&_.chip-iron]:bg-[#DEEFFC] [&_.chip-iron]:text-[#1D629B] [&_.price-val]:block [&_.price-val]:font-bold [&_.price-note]:mt-0.5 [&_.price-note]:block [&_.price-note]:text-[11px] [&_.price-note]:leading-snug [&_.price-note]:text-[#5A6B77] [&_.winner-tag]:ml-1 [&_.winner-tag]:inline-block [&_.winner-tag]:rounded [&_.winner-tag]:bg-[#E8F6F1] [&_.winner-tag]:px-1.5 [&_.winner-tag]:py-0.5 [&_.winner-tag]:text-[11px] [&_.winner-tag]:font-bold [&_.winner-tag]:text-[#44806B]">
<thead>
<tr>
<th>Función</th>
<th class="iron-col">
<span class="recommended">★ Recomendado</span>
<span class="col-name">IronPDF</span>
</th>
<th>wkhtmltopdf</th>
<th>iText</th>
<th>Aspose.PDF</th>
<th>Syncfusion</th>
<th>Apryse</th>
<th>SelectPdf</th>
<th>Spire.PDF</th>
<th>PDFSharp</th>
<th>QuestPDF</th>
</tr>
</thead>
<tbody>
<tr class="section-row">
<td colspan="11">Rendering & Conversion</td>
</tr>
<tr>
<td>Precisión de representación</td>
<td class="iron-col"><span class="winner-tag">Lo mejor</span> en píxeles perfectos</td>
<td>Estilo de impresión</td>
<td>Sólo programático</td>
<td>Bien</td>
<td>Bien</td>
<td>Bien</td>
<td>Bien</td>
<td>Nivel bajo</td>
<td>Sin renderizado</td>
<td>Diseño basado en código</td>
</tr>
<tr>
<td>Compatibilidad con HTML5</td>
<td class="iron-col"><span class="chip> chip-full">Lleno</span></td>
<td><span class="chip> chip-limited">Anticuado</span></td>
<td><span class="chip> chip-partial">Añadir</span></td>
<td><span class="chip> chip-partial">Parcial</span></td>
<td><span class="chip> chip-full">Lleno</span></td>
<td><span class="chip> chip-partial">Módulo</span></td>
<td><span class="chip> chip-full">Lleno</span></td>
<td><span class="chip> chip-limited">Limitado</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-no">No (Código primero)</span></td>
</tr>
<tr>
<td>Compatibilidad con CSS3</td>
<td class="iron-col"><span class="chip> chip-full">Lleno</span></td>
<td><span class="chip> chip-limited">Limitado</span></td>
<td><span class="chip> chip-partial">Añadir</span></td>
<td><span class="chip> chip-partial">Parcial</span></td>
<td><span class="chip> chip-full">Lleno</span></td>
<td><span class="chip> chip-partial">Módulo</span></td>
<td><span class="chip> chip-full">Lleno</span></td>
<td><span class="chip> chip-limited">Limitado</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-no">No (Código primero)</span></td>
</tr>
<tr>
<td>Ejecución de JavaScript</td>
<td class="iron-col">
<span class="chip> chip-full">Completo</span>
<span class="winner-tag">Mejor</span>
</td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-limited">Cuestionado</span></td>
<td><span class="chip> chip-partial">Limitado</span></td>
<td><span class="chip> chip-partial">Limitado</span></td>
<td><span class="chip> chip-partial">Limitado</span></td>
<td><span class="chip> chip-limited">Muy limitado</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-no">No</span></td>
</tr>
<tr>
<td>HTML→PDF (Diseño moderno)</td>
<td class="iron-col">Chromium integrado <span class="winner-tag">Best</span></td>
<td>Qt WebKit (obsoleto)</td>
<td>Complemento de pago</td>
<td>Parcial; JS Disputado</td>
<td>Motor Blink</td>
<td>Requiere módulo</td>
<td>HTML→PDF completo</td>
<td>Basado en imágenes</td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-no">No es un renderizador HTML</span></td>
</tr>
<tr>
<td>PDF→Renderizado de imágenes</td>
<td class="iron-col"><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-partial">Sí</span></td>
<td><span class="chip> chip-partial">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-partial">Limitado</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-partial">Solo documentos propios</span></td>
</tr>
<tr class="section-row">
<td colspan="11">Operaciones de documentos</td>
</tr>
<tr>
<td>Generar archivos PDF mediante programación</td>
<td class="iron-col"><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-partial">Sólo HTML</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-good">Básico</span></td>
<td><span class="chip> chip-full">Sí (API fluida)</span></td>
</tr>
<tr>
<td>Merge, Split & Rearrange</td>
<td class="iron-col"><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-partial">Limitado</span></td>
<td><span class="chip> chip-full">Sí</span></td>
</tr>
<tr>
<td>Encabezados / Pies de página / Números de página</td>
<td class="iron-col">HTML/Texto/Imagen <span class="winner-tag">Best</span></td>
<td>Limitado</td>
<td>Sí</td>
<td>Vía Eventos</td>
<td>Vía Eventos</td>
<td>Sí</td>
<td>Plantillas</td>
<td>Manual</td>
<td>Solo manual</td>
<td><span class="chip> chip-full">Tragamonedas de primera clase</span></td>
</tr>
<tr>
<td>Watermarks & Stamping</td>
<td class="iron-col"><span class="chip> chip-full">Texto e imagen</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-partial">Limitado</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-full">Sí (superposiciones)</span></td>
</tr>
<tr>
<td>Extraer texto de PDFs</td>
<td class="iron-col"><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-good">Básico</span></td>
<td><span class="chip> chip-no">No</span></td>
</tr>
<tr>
<td>OCR para archivos PDF escaneados</td>
<td class="iron-col">A través de IronOCR <span class="winner-tag">integrado</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-partial">Añadir</span></td>
<td><span class="chip> chip-partial">Producto separado</span></td>
<td><span class="chip> chip-partial">Añadir</span></td>
<td><span class="chip> chip-partial">Añadir</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-partial">Solución alternativa</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-no">No</span></td>
</tr>
<tr class="section-row">
<td colspan="11">Security & Compliance</td>
</tr>
<tr>
<td>Firmas Digitales</td>
<td class="iron-col"><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-good">Código de muestra</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-no">No documentado</span></td>
</tr>
<tr>
<td>Cumplimiento de PDF/A</td>
<td class="iron-col"><span class="chip> chip-full">Sí (PDF/A-3B)</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-full">PDF/A completo</span></td>
<td><span class="chip> chip-full">Validar y crear</span></td>
<td><span class="chip> chip-good">Requiere SDK nativo</span></td>
<td><span class="chip> chip-good">Cumplimiento de PDFA</span></td>
<td><span class="chip> chip-no">No</span></td>
<td><span class="chip> chip-full">Sí</span></td>
<td><span class="chip> chip-partial">Limitado</span></td>
<td><span class="chip> chip-full">PDF/A-2x y 3x</span></td>
</tr>
<tr class="section-row">
<td colspan="11">Plataforma & Developer Experience</td>
</tr>
<tr>
<td>Multiplataforma</td>
<td class="iron-col">Windows · Linux · macOS <span class="winner-tag">Los 3</span></td>
<td>Depende de los binarios</td>
<td>.NET Standard 2.0</td>
<td>Configuración adicional de Linux</td>
<td>Servidor Blink + .NET</td>
<td>SDK nativo</td>
<td>Sólo Windows *</td>
<td>Documentación limitada de Linux</td>
<td>Centrado en Windows</td>
<td><span class="chip> chip-full">Windows/Linux/MacOS</span></td>
</tr>
<tr>
<td>Cloud & Docker Deploy</td>
<td class="iron-col">Azure · AWS · Docker <span class="winner-tag">Best</span></td>
<td>Complejo; Legado</td>
<td>Paquetes múltiples</td>
<td>Parcial; Contenedores</td>
<td>Se necesitan extras de Blink</td>
<td>Departamentos nativos</td>
<td>Sólo para Windows</td>
<td>Información limitada</td>
<td>Simple; ligero</td>
<td><span class="chip> chip-full">Docker/K8s; Local</span></td>
</tr>
<tr class="section-row">
<td colspan="11">Support & Documentación</td>
</tr>
<tr>
<td>Documentación</td>
<td class="iron-col">Extenso + Copiar/Pegar <span class="winner-tag">Best</span></td>
<td>Documentación parcial de la CLI</td>
<td>Extenso; KB</td>
<td>Amplio; GitHub</td>
<td>Centro de ayuda</td>
<td>Catálogo multilingüe</td>
<td>Guías de introducción</td>
<td>Guía del programa</td>
<td>Guías de la comunidad</td>
<td><span class="chip> chip-full">Aplicación estructurada y complementaria</span></td>
</tr>
<tr>
<td>Soporte a desarrolladores</td>
<td class="iron-col"><span class="winner-tag">Los mejores</span> ingenieros 24/7</td>
<td>Solo para la comunidad</td>
<td>Suscripción incluida</td>
<td>Foro + Pago</td>
<td>Tracción directa 24/5</td>
<td>Comercial</td>
<td>Email</td>
<td>Foro + Correo electrónico</td>
<td>Solo para la comunidad</td>
<td><span class="chip> chip-partial">Comunidad + GitHub</span></td>
</tr>
<tr class="section-row">
<td colspan="11">Licensing & Pricing</td>
</tr>
<tr>
<td>Modelo de licencia</td>
<td class="iron-col"><span class="chip> chip-iron">Perpetuo</span></td>
<td><span class="chip> chip-free">Código abierto</span></td>
<td><span class="chip> chip-partial">AGPL / Suscripción</span></td>
<td><span class="chip> chip-good">Perpetuo</span></td>
<td><span class="chip> chip-partial">Suscripción anual</span></td>
<td><span class="chip> chip-partial">Costumbre / Consumo</span></td>
<td><span class="chip> chip-good">Perpetuo</span></td>
<td><span class="chip> chip-partial">Suscripción anual</span></td>
<td><span class="chip> chip-free">Gratis (MIT)</span></td>
<td><span class="chip> chip-free">Niveles gratuitos y de pago del MIT</span></td>
</tr>
<tr>
<td>Precio inicial</td>
<td class="iron-col">
<span class="price-val iron-price">
<a href="https://ironpdf.com/licensing/">$liteLicense</a>
</span>
<span class="price-note">Perpetua · 1 Desarrollador</span>
</td>
<td><span class="price-val"> style="color:#16a34a">Gratis</span></td>
<td>
<span class="price-val">~K/anual</span>
<span class="price-note">Cotización personalizada</span>
</td>
<td>
<span class="price-val">,175+</span>
<span class="price-note">Por desarrollador</span>
</td>
<td>
<span class="price-val">5/anual</span>
<span class="price-note">Suscripción · Gratis <M</span>
</td>
<td>
<span class="price-val">~K+/anual</span>
<span class="price-note">Cotización personalizada</span>
</td>
<td>
<span class="price-val">9+</span>
<span class="price-note">Perpetua</span>
</td>
<td>
<span class="price-val">9/anual</span>
<span class="price-note">Suscripción anual</span>
</td>
<td><span class="price-val"> style="color:#16a34a">Gratis</span></td>
<td>
<span class="price-val"> style="color:#16a34a">Gratis</span>
<span class="price-note">Comunidad MIT <M</span>
</td>
</tr>
<tr>
<td>Prueba gratuita</td>
<td class="iron-col">30 días · Funciones completas <span class="winner-tag">sin límites</span></td>
<td>N/A (Gratis)</td>
<td>30 días</td>
<td>Sí (con marca de agua)</td>
<td>Community <$1M Rev</td>
<td>Sí</td>
<td>Comunidad (5 páginas)</td>
<td>Gratis (10 páginas)</td>
<td>N/A (Gratis)</td>
<td>N/A (MIT Free <$1M)</td>
</tr>
<tr>
<td>Transparencia de precios</td>
<td class="iron-col">Publicado y claro <span class="winner-tag">mejor</span></td>
<td>Código abierto</td>
<td><span class="chip> chip-limited">AGPL complejo</span></td>
<td><span class="chip> chip-partial">Muchos niveles</span></td>
<td><span class="chip> chip-good">Contacto para cotización</span></td>
<td><span class="chip> chip-limited">Sin precios publicados</span></td>
<td><span class="chip> chip-good">Publicado</span></td>
<td><span class="chip> chip-good">Publicado</span></td>
<td>MIT; Sin restricciones</td>
<td>MIT; Basado en la confianza</td>
</tr>
</tbody>
</table>
</div>
</div>
### Comparación de conversión de HTML a PDF en la vida real: Representación de la página de inicio de Reddit
Para evaluar la calidad del PDF de salida, probamos estas bibliotecas con la página principal de Reddit que contiene contenido web dinámico, CSS moderno y elementos HTML de JavaScript. Esta página sirve como un caso de prueba ideal para la generación de PDF de salida.
https://www.reddit.com/

**IronPDF**

IronPDF ofrece resultados pixel-perfect, preservando todo el contenido web dinámico, el estilo de fuentes web modernas y los elementos interactivos exactamente como se muestran en Chrome, todo en tan solo unas pocas líneas de código.
**Syncfusion**

Syncfusion renderizó el PDF con la mayoría de las secciones y estilos ausentes, especialmente el contenido dinámico. Inicialmente bloqueado por la seguridad de Reddit. Lograr mejores resultados requiere una extensa configuración de línea de comandos, pero la salida sigue siendo incompleta.
**Aspose.PDF**

Aspose.PDF requirió primero una descarga manual de HTML (sin soporte para URL directo). Después de la conversión, el resultado carecía de un formato adecuado y se perdieron casi todas las secciones de contenido, lo que lo hace inadecuado para la web moderna con contenido dinámico.
**wkhtmltopdf**

wkhtmltopdf se completó rápidamente, pero produjo una página plana y estática que carece de contenido crítico como actualizaciones en vivo, elementos dinámicos y secciones interactivas. Esto demuestra la incompatibilidad de wkhtmltopdf con sitios web modernos impulsados por JavaScript.
### Conclusión sobre el rendimiento y la calidad del PDF de salida
Para los desarrolladores .NET que necesitan un conversor confiable de HTML a PDF, IronPDF se destaca con un código mínimo, APIs fáciles de usar y mejoras frecuentes del producto.
En una prueba del mundo real en contenido web, ofreció los resultados más rápidos y precisos, mientras que Syncfusion quedó rezagado, Aspose requirió pasos adicionales y wkhtmltopdf careció de estilo moderno. IronPDF ofrece el mejor equilibrio de velocidad, precisión y simplicidad para los flujos de trabajo de conversión de HTML a PDF de hoy.
**Por favor note:**
Aspose, Syncfusion y wkhtmltopdf son marcas registradas de sus respectivos propietarios. Este sitio no está afiliado ni es patrocinado por ellos. Todos los nombres, logotipos y marcas pertenecen a sus propietarios, y las comparaciones se basan en la información públicamente disponible al momento de escribir.
### Resumen
Esta guía cubrió todo lo necesario para convertir HTML a PDF en .NET: desde la conversión básica de cadenas hasta funciones avanzadas como procesamiento asíncrono, firmas digitales y generación de lotes. Demostramos tres métodos de conversión, configuraciones esenciales, funciones avanzadas y configuraciones de seguridad, y comparamos IronPDF con otras bibliotecas mediante pruebas del mundo real de generación de documentos dinámicos.
Mientras los competidores lucharon con sitios web modernos o requerían soluciones complejas, IronPDF ofreció resultados impecables con un código mínimo y un potente motor de renderización.
¿Listo para simplificar tu flujo de trabajo de PDF y experimentar una generación versátil de PDF en solo unas pocas líneas de código? Instala IronPDF a través del Administrador de Paquetes NuGet (o selecciona Administrar Paquetes NuGet en Visual Studio) y convierte tu primer HTML a PDF hoy.
[Comienza tu prueba gratuita de 30 días](/licensing/) para realizar pruebas de producción sin marcas de agua. [Licencias flexibles](/licensing/) comienzan en `$liteLicense` con precios de equipo transparentes que escalan con tus necesidades.
<a class="content-anchor" href="/licensing/">Ver licencias de IronPDF <i class="fa-solid fa-arrow-right"></i></a>
## Conversión de HTML a PDF en el contexto español: Facturae, VeriFactu y TicketBAI
La conversión de HTML a PDF tiene una aplicación regulatoria directa en España, donde múltiples sistemas fiscales exigen la generación de documentos PDF a partir de plantillas HTML.
### Pipeline HTML → PDF para facturas VeriFactu
El sistema **VeriFactu** (anti-fraude de software de facturación, regulado por la AEAT) requiere que el software de facturación genere PDFs de facturas a partir de sus registros XML con `huella` encadenada. El pipeline recomendado con IronPDF es:
1. El motor de facturación del ISV genera el XML VeriFactu con la `huella` (hash SHA-256 encadenado).
2. Una plantilla HTML (Handlebars, Razor o XSLT → HTML) renderiza los datos de la factura.
3. `ChromePdfRenderer.RenderHtmlAsPdf()` genera el PDF.
4. `TextStamper` estampa la leyenda obligatoria **VERI*FACTU** (con asterisco entre "VERI" y "FACTU").
5. `ImageStamper` incrusta el código QR de verificación de la sede electrónica de la AEAT.
> **Nota para ISVs:** El incumplimiento de VeriFactu puede acarrear sanciones de hasta **150.000 €/año** para los proveedores de software de facturación. IronPDF actúa como componente dentro del software certificado del ISV; la certificación ante la AEAT es responsabilidad del proveedor.
Para una implementación paso a paso, consulte la guía de [generación de facturas en C# .NET para VeriFactu, TicketBAI y Facturae](/tutorials/csharp-invoice-processing/).
### Ventaja sobre iText AGPL en el contexto VeriFactu
En España, el uso de iText bajo licencia **AGPL** en software de facturación sujeto a VeriFactu expone al ISV a un riesgo triple: (1) la obligación de publicar el código fuente bajo AGPL, (2) el coste de la licencia comercial de iText si no se publica el código, y (3) la sanción VeriFactu de hasta 150.000 €/año si el software no cumple la normativa. IronPDF, bajo licencia comercial propietaria, elimina la exposición AGPL manteniendo la conformidad con VeriFactu.
### Plantillas HTML para documentos AEAT: declaraciones y modelos fiscales
Los desarrolladores que generan PDFs de declaraciones fiscales de la AEAT (Modelo 303, Modelo 111, Modelo 190, Modelo 347) a partir de plantillas HTML pueden usar IronPDF para renderizar los formularios HTML con datos dinámicos. Configure `RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print` para obtener el diseño de impresión correcto y `PaperSize = A4` para el formato A4 exigido por la AEAT. Si genera estos modelos a partir de informes heredados, la guía de [migración desde SAP Crystal Reports a IronPDF en C#](/tutorials/crystal-reports-alternative-csharp/) muestra cómo trasladar esas plantillas a HTML.
### TicketBAI: representación PDF del tique por territorio foral
Los tiques **TicketBAI** para **Bizkaia**, **Gipuzkoa** y **Araba** se representan como PDF a partir de plantillas HTML específicas de cada hacienda foral. Si el entorno de generación es AWS Lambda (Linux), instale las fuentes para caracteres castellanos y euskera en el contenedor Docker (ver [fuentes rotas en AWS Lambda](/troubleshooting/broken-font-aws-lambda/)). Configure `InputEncoding = "UTF-8"` para garantizar la correcta representación de los caracteres acentuados del castellano y del euskera en el PDF del tique.
### LOPDGDD y generación de PDFs con datos personales
Al generar PDFs desde HTML que contienen datos personales (facturas con NIF/CIF del destinatario, contratos, nóminas), la **LOPDGDD** exige que el procesamiento sea seguro. Configure protección por contraseña con AES-256 usando `SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256` sobre los PDFs que contengan datos personales antes de almacenarlos o transmitirlos, cumpliendo los requisitos de la **AEPD**.
### Accesibilidad de PDFs para el sector público
Los organismos públicos españoles deben cumplir el **Real Decreto 1112/2018** sobre accesibilidad de sitios web y aplicaciones del sector público. La guía de [accesibilidad de PDFs en C# para el sector público español](/tutorials/government-accessible-pdf/) explica cómo generar documentos PDF etiquetados y accesibles conforme a esa normativa.
## 6. Solución de problemas y soporte técnico
¿Tienes problemas con los siguientes errores en la conversión de HTML a PDF? IronPDF ofrece soporte de ingenieros 24/7 mediante el widget de chat en [https://ironpdf.com/](/)
### Soluciones rápidas a errores comunes
- ¿Lenta primera renderización? Normal. Chrome se inicializa en 2–3s, luego acelera.
- ¿Problemas en la nube? Usa al menos Azure B1 o recursos equivalentes.
- ¿Recursos faltantes? Configura rutas base o incrusta como base64.
- ¿Elementos faltantes? Añade `RenderDelay` para ejecución de JavaScript.
- ¿Memoria en renderización? Actualiza a v2025.9.4 para correcciones en HTML a PDF, sellos y encabezados/pies.
- ¿Problemas con campos de formulario (p.ej., áreas de texto largas, casillas de verificación)? Corregido en v2025.7.17; asegúrate de nombres únicos para casillas de verificación.
- ¿Recorte de encabezado/pie personalizado o caracteres especiales corruptos? Resuelto en v2025.8.8; prueba el ajuste de palabras y metadatos.
### Obtenga ayuda de los ingenieros que construyeron IronPDF, 24/7
<ul>
<li><a class="content-anchor" href="/troubleshooting/engineering-request-pdf/">Guía completa de solución de problemas <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/troubleshooting/ironpdf-performance-assistance/">Estrategias de optimización del rendimiento<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/troubleshooting/engineering-request-pdf/">Solicitudes de soporte de ingeniería<i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/troubleshooting/quick-ironpdf-troubleshooting/">Lista de verificación rápida para la resolución de problemas<i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
*as-heading:2(Próximos pasos)*
<div class="my-6 grid grid-cols-1 gap-4 pb-10 sm:grid-cols-2 lg:grid-cols-3">
<div class="group flex h-full flex-col gap-8 rounded-lg border border-[#E7EEF0] bg-white p-6 transition-all duration-200 hover:shadow-[0_4px_12px_0_rgb(24_24_24/0.08)]">
<span class="flex flex-col gap-4">
<span class="flex h-8 max-w-10 items-center justify-center text-[32px] text-[#678CB1]"><i class="fa-duotone fa-solid fa-graduation-cap"></i></span>
<span class="text-[15px]/[1.6] font-bold text-[#181818]">Cómo fusionar o dividir documentos PDF</span>
</span>
<a href="/how-to/headers-and-footers/" class="mt-auto flex items-center gap-2 text-sm/[1.4] font-bold text-[#2A95D5] no-underline transition-colors duration-200 group-hover:text-[#E01A59]">Ver cómo hacerlo <span class="inline-flex items-center transition-transform duration-200 group-hover:translate-x-1"><i class="fa-solid fa-arrow-right"></i></span></a>
</div>
<div class="group flex h-full flex-col gap-8 rounded-lg border border-[#E7EEF0] bg-white p-6 transition-all duration-200 hover:shadow-[0_4px_12px_0_rgb(24_24_24/0.08)]">
<span class="flex flex-col gap-4">
<span class="flex h-8 max-w-10 items-center justify-center text-[32px] text-[#678CB1]"><i class="fa-duotone fa-solid fa-graduation-cap"></i></span>
<span class="text-[15px]/[1.6] font-bold text-[#181818]">Cómo agregar encabezados y pies de página personalizados a archivos PDF</span>
</span>
<a href="/how-to/merge-or-split-pdfs/" class="mt-auto flex items-center gap-2 text-sm/[1.4] font-bold text-[#2A95D5] no-underline transition-colors duration-200 group-hover:text-[#E01A59]">Ver cómo hacerlo <span class="inline-flex items-center transition-transform duration-200 group-hover:translate-x-1"><i class="fa-solid fa-arrow-right"></i></span></a>
</div>
<div class="group flex h-full flex-col gap-8 rounded-lg border border-[#E7EEF0] bg-white p-6 transition-all duration-200 hover:shadow-[0_4px_12px_0_rgb(24_24_24/0.08)]">
<span class="flex flex-col gap-4">
<span class="flex h-8 max-w-10 items-center justify-center text-[32px] text-[#678CB1]"><i class="fa-duotone fa-solid fa-graduation-cap"></i></span>
<span class="text-[15px]/[1.6] font-bold text-[#181818]">Cómo redactar texto y regiones en PDF</span>
</span>
<a href="/how-to/redact-text/" class="mt-auto flex items-center gap-2 text-sm/[1.4] font-bold text-[#2A95D5] no-underline transition-colors duration-200 group-hover:text-[#E01A59]">Ver cómo hacerlo <span class="inline-flex items-center transition-transform duration-200 group-hover:translate-x-1"><i class="fa-solid fa-arrow-right"></i></span></a>
</div>
</div>
<div class="tutorials-navigation">
<a href="/how-to/create-new-pdfs/" class="tutorials-navigation__cta tutorials-navigation__cta--left"><i class="fa-solid fa-chevron-left"></i>Creating PDFs in C#</a>
<a href="/tutorials/csharp-edit-pdf-complete-tutorial/" class="tutorials-navigation__cta tutorials_navigation__cta--right">Editing PDFs in C#<i class="fa-solid fa-arrow-right"></i></a>
</div>
La conversión de HTML a PDF en C# suele parecer sencilla hasta que aparecen los requisitos del mundo real. Los desarrolladores encuentran rápidamente limitaciones que afectan a la precisión de la representación, la implementación y la escalabilidad.
Más allá de la renderización, la compatibilidad con la infraestructura se convierte en un aspecto crítico. Los equipos deben asegurarse de que la generación de PDF funcione en tiempos de ejecución .NET modernos, plataformas en la nube y entornos en contenedores sin merma del rendimiento.
Para subsanar estas deficiencias, las soluciones modernas basadas en Chrome, como IronPDF, ofrecen una mayor fidelidad de representación, una compatibilidad más amplia con plataformas y flujos de trabajo de implementación listos para la producción, que se exploran paso a paso en el resto de esta guía.
TL;DR: Guía de inicio rápido para convertir HTML a PDF
Puede convertir fácilmente HTML a PDF en C# usando la IronPDF biblioteca, que proporciona el método ChromePdfRenderer.RenderHtmlAsPdf para crear archivos PDF de alta calidad desde HTML, CSS y JavaScript.
Comienza a usar IronPDF en tu proyecto hoy mismo con una prueba gratuita
Después de haber comprado o inscrito en una prueba de 30 días de IronPDF, busque la clave de licencia enviada a su correo electrónico. Establece la propiedad TempFolderPath de IronPdf.Installation.
¿Por qué los desarrolladores de .NET necesitan un convertidor de HTML a PDF para C#?
IronPDF aprovecha un motor de renderizado Google Chromium incorporado para asegurar conversiones de alta fidelidad, preservando con precisión el diseño y estilo de su contenido web.
✅ Motor de Renderizado de Chrome Robusto: El motor Blink de Chrome para una conversión precisa de HTML a PDF, ahora mejorado con correcciones para memoria, formularios y precisión de renderizado (v2025.9.4)
✅ Precisión de Pixel-Perfect: Los PDFs generados coinciden exactamente con la web, no una versión optimizada para impresión. Las correcciones recientes cubren recorte de encabezados y pies de página personalizados, preservación de texto en escala de grises y caracteres especiales/emojis en metadatos (a partir de v2025.9.4)
✅ Soporte Completo para la Web Moderna: Soporte completo para CSS3, HTML5, JavaScript para todos los elementos HTML. Las mejoras recientes cubren el manejo de campos de formulario para áreas de texto largas y casillas de verificación.
✅ Aumento de Rendimiento de 5-20 Veces: Mucho más rápido que la automatización del navegador o los controladores web, ahora con correcciones de fugas de memoria y reducciones de tamaños de archivo para elementos repetidos como sellos/encabezados en operaciones por lotes.
✅ Cumplimiento de PDF/UA: Generación de PDFs accesibles que cumplen con los estándares de la Sección 508, mejorado para renderización de formularios multiplataforma (por ejemplo, Linux).
✅ Sin Dependencias Externas: No hay ejecutables para instalar en los servidores
✅ Diseñado para C#, F# y VB.NET ejecutándose en .NET 10, 9, 8, 7, 6, Core, Standard, o Framework
IronPDF simplifica el proceso para desarrolladores .NET, ofreciendo una solución sencilla y eficiente para generar documentos PDF de aspecto profesional desde el HTML de su aplicación web. Desde facturas e informes hasta certificados y archivos, los desarrolladores pueden trabajar con su stack web familiar mientras IronPDF maneja lo complejo en solo unas líneas de código.
Ya sea que trabaje con cadenas HTML, URLs o archivos HTML, IronPDF proporciona opciones flexibles para generar documentos PDF de alta calidad que cumplen con sus requisitos específicos.
En este tutorial, lo guiaremos por los escenarios más comunes, incluyendo cadena HTML a PDF, URL a PDF y archivo HTML a PDF. Además, IronPDF también proporciona una variedad de operaciones para manipular documentos PDF:
La operación más fundamental es convertir una cadena HTML a PDF. Este método es perfecto para contenido HTML generado dinámicamente. El método RenderHtmlAsPdf soporta completamente HTML5, CSS3, JavaScript e imágenes cuando convierte HTML a PDF directamente.
using IronPdf;// Create the Chrome renderervar renderer = new ChromePdfRenderer();// Convert HTML string to PDFvar pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");// Save the PDFpdf.SaveAs("output.pdf");
using IronPdf;
// Create the Chrome renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Save the PDF
pdf.SaveAs("output.pdf");
ImportsIronPdf' Create the Chrome rendererDim renderer As New ChromePdfRenderer()' Convert HTML string to PDFDim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")' Save the PDFpdf.SaveAs("output.pdf")
Imports IronPdf
' Create the Chrome renderer
Dim renderer As New ChromePdfRenderer()
' Convert HTML string to PDF
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")
' Save the PDF
pdf.SaveAs("output.pdf")
Consejos: (Actualizado para v2025.9.4) Las actualizaciones recientes solucionan problemas con caracteres especiales/emojis en metadatos HTML y aseguran un mejor manejo de campos de formulario HTML, incluyendo caracteres chinos en Linux. Pruebe contenido dinámico con EnableJavaScript = true para obtener resultados óptimos.
Cuando su cadena HTML hace referencia a activos locales como imágenes o hojas de estilo, use el parámetro BaseUrlPath para convertir adecuadamente contenido HTML con todos los recursos:
using IronPdf;var renderer = new ChromePdfRenderer();// Convert HTML content with local image and CSS referencesstring html = @" <link rel='stylesheet' href='styles.css'> <img src='logo.png' alt='Company Logo'> <h1>Company Report</h1> <p>Annual report content...</p>";// Set base path for resolving relative URLs in HTML to PDF conversionvar pdf = renderer.RenderHtmlAsPdf(html, @"C:\MyProject\Assets\");pdf.SaveAs("report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML content with local image and CSS references
string html = @"
<link rel='stylesheet' href='styles.css'>
<img src='logo.png' alt='Company Logo'>
<h1>Company Report</h1>
<p>Annual report content...</p>";
// Set base path for resolving relative URLs in HTML to PDF conversion
var pdf = renderer.RenderHtmlAsPdf(html, @"C:\MyProject\Assets\");
pdf.SaveAs("report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Convert HTML content with local image and CSS referencesDim html AsString = " <link rel='stylesheet' href='styles.css'> <img src='logo.png' alt='Company Logo'> <h1>Company Report</h1> <p>Annual report content...</p>"' Set base path for resolving relative URLs in HTML to PDF conversionDim pdf = renderer.RenderHtmlAsPdf(html, "C:\MyProject\Assets\")pdf.SaveAs("report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Convert HTML content with local image and CSS references
Dim html As String = "
<link rel='stylesheet' href='styles.css'>
<img src='logo.png' alt='Company Logo'>
<h1>Company Report</h1>
<p>Annual report content...</p>"
' Set base path for resolving relative URLs in HTML to PDF conversion
Dim pdf = renderer.RenderHtmlAsPdf(html, "C:\MyProject\Assets\")
pdf.SaveAs("report.pdf")
Consejos: BaseUrlPath le dice a IronPDF dónde encontrar sus archivos CSS, JavaScript e imágenes. Todas las rutas relativas en su cadena HTML se resolverán desde este directorio.
Renderizar páginas web completas a PDFs con C# permite a los equipos separar el diseño del PDF y el trabajo de renderizado del back-end. Este enfoque le permite convertir cualquier URL específica directamente al formato PDF.
CSS de Impresión vs Pantalla
Puede configurar IronPDF para renderizar usando cualquier tipo de medios CSS.
using IronPdf;using IronPdf.Rendering;// Initialize HTML to PDF convertervar renderer = new ChromePdfRenderer();// Configure CSS media type for rendering specified URLsrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;// Screen media type shows the entire web page as displayed on screen
using IronPdf;
using IronPdf.Rendering;
// Initialize HTML to PDF converter
var renderer = new ChromePdfRenderer();
// Configure CSS media type for rendering specified URLs
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Screen media type shows the entire web page as displayed on screen
ImportsIronPdfImportsIronPdf.Rendering' Initialize HTML to PDF converterDim renderer As New ChromePdfRenderer()' Configure CSS media type for rendering specified URLsrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print' Screen media type shows the entire web page as displayed on screen
Imports IronPdf
Imports IronPdf.Rendering
' Initialize HTML to PDF converter
Dim renderer As New ChromePdfRenderer()
' Configure CSS media type for rendering specified URLs
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
' Screen media type shows the entire web page as displayed on screen
Soporte de JavaScript
IronPDF soporta completamente JavaScript, jQuery e incluso AJAX cuando convierte HTML a PDF. Para contenido HTML dinámico, puede configurar IronPDF para esperar la finalización del JavaScript antes de renderizar páginas web en PDF. Esto es perfecto para aplicaciones de una sola página y sitios web dinámicos.
using IronPdf;// Configure JavaScript rendering for dynamic HTML content to PDFvar renderer = new ChromePdfRenderer();// Enable JavaScript execution during PDF generationrenderer.RenderingOptions.EnableJavaScript = true;// WaitFor.RenderDelay pauses before capturing the HTMLrenderer.RenderingOptions.WaitFor.RenderDelay = 500; // milliseconds
using IronPdf;
// Configure JavaScript rendering for dynamic HTML content to PDF
var renderer = new ChromePdfRenderer();
// Enable JavaScript execution during PDF generation
renderer.RenderingOptions.EnableJavaScript = true;
// WaitFor.RenderDelay pauses before capturing the HTML
renderer.RenderingOptions.WaitFor.RenderDelay = 500; // milliseconds
ImportsIronPdf' Configure JavaScript rendering for dynamic HTML content to PDFDim renderer As New ChromePdfRenderer()' Enable JavaScript execution during PDF generationrenderer.RenderingOptions.EnableJavaScript = True' WaitFor.RenderDelay pauses before capturing the HTMLrenderer.RenderingOptions.WaitFor.RenderDelay = 500 ' milliseconds
Imports IronPdf
' Configure JavaScript rendering for dynamic HTML content to PDF
Dim renderer As New ChromePdfRenderer()
' Enable JavaScript execution during PDF generation
renderer.RenderingOptions.EnableJavaScript = True
' WaitFor.RenderDelay pauses before capturing the HTML
renderer.RenderingOptions.WaitFor.RenderDelay = 500 ' milliseconds
La ejecución de JavaScript también se puede mostrar cuando se renderiza un gráfico de acordes d3.js avanzado desde una página web al formato PDF:
using IronPdf;// Create renderer for JavaScript-heavy HTMLvar renderer = new ChromePdfRenderer();// Convert d3.js visualization web page to PDFvar pdf = renderer.RenderUrlAsPdf("https://bl.ocks.org/mbostock/4062006");// Save the interactive chart as static PDFpdf.SaveAs("chart.pdf");
using IronPdf;
// Create renderer for JavaScript-heavy HTML
var renderer = new ChromePdfRenderer();
// Convert d3.js visualization web page to PDF
var pdf = renderer.RenderUrlAsPdf("https://bl.ocks.org/mbostock/4062006");
// Save the interactive chart as static PDF
pdf.SaveAs("chart.pdf");
ImportsIronPdf' Create renderer for JavaScript-heavy HTMLDim renderer As New ChromePdfRenderer()' Convert d3.js visualization web page to PDFDim pdf = renderer.RenderUrlAsPdf("https://bl.ocks.org/mbostock/4062006")' Save the interactive chart as static PDFpdf.SaveAs("chart.pdf")
Imports IronPdf
' Create renderer for JavaScript-heavy HTML
Dim renderer As New ChromePdfRenderer()
' Convert d3.js visualization web page to PDF
Dim pdf = renderer.RenderUrlAsPdf("https://bl.ocks.org/mbostock/4062006")
' Save the interactive chart as static PDF
pdf.SaveAs("chart.pdf")
CSS Responsivo
Como las páginas web responsivas están diseñadas para ser vistas en un navegador, y IronPDF no abre una ventana de navegador real en el sistema operativo de su servidor, los elementos HTML responsivos pueden renderizarse en su tamaño más pequeño. Se recomienda PdfCssMediaType.Print para navegar este problema al renderizar páginas web completas.
// Configure for optimal responsive design handling in HTML to PDFrenderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
// Configure for optimal responsive design handling in HTML to PDF
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
```vbnet' Configure for optimal responsive design handling in HTML to PDFrenderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print```
```vbnet
' Configure for optimal responsive design handling in HTML to PDF
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
```
Convertir archivos HTML locales a PDF preserva todos los recursos relativos incluyendo CSS, imágenes y JavaScript, como si se abrieran usando el protocolo file://. Este método de HTML a PDF es mejor para convertir plantillas o páginas HTML pre-diseñadas a documentos PDF.
using IronPdf;// Initialize ChromePdfRenderer for HTML file conversionvar renderer = new ChromePdfRenderer();// Convert HTML file to PDF documents// Preserves all relative paths and linked resources in HTMLvar pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");// Save the HTML file as PDF pdf.SaveAs("Invoice.pdf");// All CSS, JavaScript, and images load correctly in the generated PDF
using IronPdf;
// Initialize ChromePdfRenderer for HTML file conversion
var renderer = new ChromePdfRenderer();
// Convert HTML file to PDF documents
// Preserves all relative paths and linked resources in HTML
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
// Save the HTML file as PDF
pdf.SaveAs("Invoice.pdf");
// All CSS, JavaScript, and images load correctly in the generated PDF
ImportsIronPdf' Initialize ChromePdfRenderer for HTML file conversionDim renderer As New ChromePdfRenderer()' Convert HTML file to PDF documents' Preserves all relative paths and linked resources in HTMLDim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")' Save the HTML file as PDF pdf.SaveAs("Invoice.pdf")' All CSS, JavaScript, and images load correctly in the generated PDF
Imports IronPdf
' Initialize ChromePdfRenderer for HTML file conversion
Dim renderer As New ChromePdfRenderer()
' Convert HTML file to PDF documents
' Preserves all relative paths and linked resources in HTML
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
' Save the HTML file as PDF
pdf.SaveAs("Invoice.pdf")
' All CSS, JavaScript, and images load correctly in the generated PDF
Consejos: Mantenga sus archivos HTML en una carpeta separada con sus activos (CSS, imágenes) para editar y probar en un navegador antes de convertir el archivo HTML a PDF. Esto asegura que su HTML se renderiza perfectamente para documentos PDF de alta calidad.
Si tu proyecto ASP.NET Core ya utiliza páginas Razor, puedes convertirlas directamente a PDF sin reconstruir tu HTML. La extensión Razor de IronPDF agrega el método RenderRazorToPdf, que toma su página .cshtml, completa con su modelo y diseño, y la renderiza como un documento PDF en una sola llamada.
PM > Install-Paquete IronPdf.Extensions.Razor
PM > Install-Paquete IronPdf.Extensions.Razor
SHELL
using IronPdf;var renderer = new ChromePdfRenderer();// Render a Razor Page directly to PDFPdfDocument pdf = renderer.RenderRazorToPdf(this);Response.Headers.Add("Content-Disposition", "inline");return new FileContentResult(pdf.BinaryData, "application/pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a Razor Page directly to PDF
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Render a Razor Page directly to PDFDim pdf AsPdfDocument = renderer.RenderRazorToPdf(Me)Response.Headers.Add("Content-Disposition", "inline")Return New FileContentResult(pdf.BinaryData, "application/pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Render a Razor Page directly to PDF
Dim pdf As PdfDocument = renderer.RenderRazorToPdf(Me)
Response.Headers.Add("Content-Disposition", "inline")
Return New FileContentResult(pdf.BinaryData, "application/pdf")
Por favor nota: RenderRazorToPdf requiere un proyecto de aplicación web ASP.NET Core. No funcionará en aplicaciones de consola o bibliotecas de clases — el motor de vista Razor debe estar disponible en el pipeline de alojamiento.
Los equipos que usan el patrón MVC pueden generar PDFs directamente desde sus Vistas y controladores existentes. Instale el paquete de extensión de MVC Core, luego llame a RenderRazorViewToPdf con la ruta de su vista y modelo — IronPDF maneja el pipeline de renderizado Razor y produce un PDF terminado.
Esto es especialmente útil para informes, facturas y cualquier página donde el HTML ya esté diseñado y probado en el navegador. El PDF generado conserva la salida completa de la Vista, incluidas las páginas de diseño y vistas parciales.
PM > Install-Paquete IronPdf.Extensions.Mvc.Core
PM > Install-Paquete IronPdf.Extensions.Mvc.Core
SHELL
Primero, registre el servicio IRazorViewRenderer en su Program.cs para que sus controladores puedan inyectarlo:
using IronPdf.Extensions.Mvc.Core;var builder = WebApplication.CreateBuilder(args);builder.Services.AddControllersWithViews();// Register the Razor view renderer for IronPDFbuilder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
using IronPdf.Extensions.Mvc.Core;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
// Register the Razor view renderer for IronPDF
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
ImportsIronPdf.Extensions.Mvc.CoreDim builder = WebApplication.CreateBuilder(args)builder.Services.AddControllersWithViews()' Register the Razor view renderer for IronPDFbuilder.Services.AddSingleton(OfIHttpContextAccessor, HttpContextAccessor)()builder.Services.AddSingleton(OfIRazorViewRenderer, RazorViewRenderer)()
Imports IronPdf.Extensions.Mvc.Core
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllersWithViews()
' Register the Razor view renderer for IronPDF
builder.Services.AddSingleton(Of IHttpContextAccessor, HttpContextAccessor)()
builder.Services.AddSingleton(Of IRazorViewRenderer, RazorViewRenderer)()
Luego en tu acción de controlador, inyecta el renderizador y convierte cualquier Vista a PDF:
using IronPdf;using IronPdf.Extensions.Mvc.Core;var renderer = new ChromePdfRenderer();// Render an MVC View with model data to PDFPdfDocument pdf = renderer.RenderRazorViewToPdf( _viewRenderService, "Views/Home/Report.cshtml", reportModel);Response.Headers.Add("Content-Disposition", "inline");return new FileContentResult(pdf.BinaryData, "application/pdf");
using IronPdf;
using IronPdf.Extensions.Mvc.Core;
var renderer = new ChromePdfRenderer();
// Render an MVC View with model data to PDF
PdfDocument pdf = renderer.RenderRazorViewToPdf(
_viewRenderService, "Views/Home/Report.cshtml", reportModel);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
ImportsIronPdfImportsIronPdf.Extensions.Mvc.CoreDim renderer As New ChromePdfRenderer()' Render an MVC View with model data to PDFDim pdf AsPdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Report.cshtml", reportModel)Response.Headers.Add("Content-Disposition", "inline")Return New FileContentResult(pdf.BinaryData, "application/pdf")
Imports IronPdf
Imports IronPdf.Extensions.Mvc.Core
Dim renderer As New ChromePdfRenderer()
' Render an MVC View with model data to PDF
Dim pdf As PdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Report.cshtml", reportModel)
Response.Headers.Add("Content-Disposition", "inline")
Return New FileContentResult(pdf.BinaryData, "application/pdf")
¿Necesitas que tu página web dinámica se conserve y convierta a PDFs mientras se preserva el diseño y formato exacto? No busques más allá de IronPDF, que convierte rápidamente una variedad de populares frameworks de páginas web dinámicas a PDFs.
PDF a partir de páginas ASPX
Aquí hay un breve fragmento de código sobre la conversión de Páginas ASPX como PDF en Páginas de Servidor Activo.
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using IronPdf;namespace AspxToPdfTutorial{ public partial class Invoice : System.Web.UI.Page { protected voidPage_Load(object sender, EventArgs e) {IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser); } }}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using IronPdf;
namespace AspxToPdfTutorial
{
public partial class Invoice : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser);
}
}
}
ImportsSystemImportsSystem.Collections.GenericImportsSystem.LinqImportsSystem.WebImportsSystem.Web.UIImportsSystem.Web.UI.WebControlsImportsIronPdfNamespaceAspxToPdfTutorialPartialPublic Class InvoiceInheritsSystem.Web.UI.PageProtected Sub Page_Load(ByVal sender AsObject, ByVal e AsEventArgs)IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser) End Sub End ClassEndNamespace
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports IronPdf
Namespace AspxToPdfTutorial
Partial Public Class Invoice
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser)
End Sub
End Class
End Namespace
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía práctica.
XAML a PDF (MAUI)
Para los desarrolladores que buscan construir aplicaciones multiplataforma, .NET MAUI es una elección popular entre los frameworks. IronPDF soporta por completo la conversión de XAML a PDF con unos pocos pasos.
using IronPdf.Extensions.Maui;namespace mauiSample;public partial class MainPage : ContentPage{ publicMainPage() {InitializeComponent(); } private voidPrintToPdf(object sender, EventArgs e) { ChromePdfRenderer renderer = new ChromePdfRenderer(); // Apply HTML header renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() {HtmlFragment = "<h1>Header</h1>", }; // Render PDF from Maui Page PdfDocument pdf = renderer.RenderContentPageToPdf<MainPage, App>().Result; pdf.SaveAs(@"C:\Users\lyty1\Downloads\contentPageToPdf.pdf"); }}
using IronPdf.Extensions.Maui;
namespace mauiSample;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void PrintToPdf(object sender, EventArgs e)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Apply HTML header
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<h1>Header</h1>",
};
// Render PDF from Maui Page
PdfDocument pdf = renderer.RenderContentPageToPdf<MainPage, App>().Result;
pdf.SaveAs(@"C:\Users\lyty1\Downloads\contentPageToPdf.pdf");
}
}
ImportsIronPdf.Extensions.MauiNamespace mauiSamplePartialPublic Class MainPageInheritsContentPage Public Sub New()InitializeComponent() End Sub Private Sub PrintToPdf(ByVal sender AsObject, ByVal e AsEventArgs) Dim renderer As New ChromePdfRenderer() ' Apply HTML header renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {.HtmlFragment = "<h1>Header</h1>"} ' Render PDF from Maui Page Dim pdf AsPdfDocument = renderer.RenderContentPageToPdf(OfMainPage, App)().Result pdf.SaveAs("C:\Users\lyty1\Downloads\contentPageToPdf.pdf") End Sub End ClassEndNamespace
Imports IronPdf.Extensions.Maui
Namespace mauiSample
Partial Public Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Sub PrintToPdf(ByVal sender As Object, ByVal e As EventArgs)
Dim renderer As New ChromePdfRenderer()
' Apply HTML header
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {.HtmlFragment = "<h1>Header</h1>"}
' Render PDF from Maui Page
Dim pdf As PdfDocument = renderer.RenderContentPageToPdf(Of MainPage, App)().Result
pdf.SaveAs("C:\Users\lyty1\Downloads\contentPageToPdf.pdf")
End Sub
End Class
End Namespace
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía práctica.
Generar informes en PDF
Cuando se trata de generar Reportes PDF, las dimensiones y formato exactos son cruciales. Como tal, IronPDF te permite generar PDFs sin problemas con solo un par de pasos.
using IronPdf;ChromePdfRenderer renderer = new ChromePdfRenderer();renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf");
using IronPdf;
ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf");
ImportsIronPdfPrivate renderer As New ChromePdfRenderer()renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf")
Imports IronPdf
Private renderer As New ChromePdfRenderer()
renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf")
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía práctica.
Crear PDF en servidores Blazor
IronPDF soporta .NET 6, y como incluye tipos de proyecto como Blazor, este fragmento de código proporciona un breve ejemplo de cómo crear PDFs en Servidor Blazor.
@code { // Model to bind user input private InputHTMLModel _InputMsgModel = new InputHTMLModel(); private async TaskSubmitHTML() { // Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"; // Create a renderer to convert HTML to PDF var render = new IronPdf.ChromePdfRenderer(); // Render the HTML input into a PDF document var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML); var fileName = "iron.pdf"; // Create a stream reference for the PDF content using var streamRef = new DotNetStreamReference(stream: doc.Stream); // Invoke JavaScript function to download the PDF in the browser awaitJS.InvokeVoidAsync("SubmitHTML", fileName, streamRef); } public class InputHTMLModel { public stringHTML { get; set; } = "My new message"; }}
@code {
// Model to bind user input
private InputHTMLModel _InputMsgModel = new InputHTMLModel();
private async Task SubmitHTML()
{
// Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Create a renderer to convert HTML to PDF
var render = new IronPdf.ChromePdfRenderer();
// Render the HTML input into a PDF document
var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);
var fileName = "iron.pdf";
// Create a stream reference for the PDF content
using var streamRef = new DotNetStreamReference(stream: doc.Stream);
// Invoke JavaScript function to download the PDF in the browser
await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);
}
public class InputHTMLModel
{
public string HTML { get; set; } = "My new message";
}
}
codeIf True Then ' Model to bind user input privateInputHTMLModel _InputMsgModel = New InputHTMLModel()'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:' private async Task SubmitHTML()' {' ' Set your IronPDF license key' IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";'' ' Create a renderer to convert HTML to PDF' var render = New IronPdf.ChromePdfRenderer();'' ' Render the HTML input into a PDF document' var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);'' var fileName = "iron.pdf";'' ' Create a stream reference for the PDF content' var streamRef = New DotNetStreamReference(stream: doc.Stream);'' ' Invoke JavaScript function to download the PDF in the browser' await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);' }'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:' public class InputHTMLModel' {' public string HTML' {' get;' set;' } = "My new message";' }End If
code
If True Then
' Model to bind user input
private InputHTMLModel _InputMsgModel = New InputHTMLModel()
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' private async Task SubmitHTML()
' {
' ' Set your IronPDF license key
' IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
'
' ' Create a renderer to convert HTML to PDF
' var render = New IronPdf.ChromePdfRenderer();
'
' ' Render the HTML input into a PDF document
' var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);
'
' var fileName = "iron.pdf";
'
' ' Create a stream reference for the PDF content
' var streamRef = New DotNetStreamReference(stream: doc.Stream);
'
' ' Invoke JavaScript function to download the PDF in the browser
' await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);
' }
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' public class InputHTMLModel
' {
' public string HTML
' {
' get;
' set;
' } = "My new message";
' }
End If
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía práctica.
Razor a PDF (Servidores Blazor)
Además de crear PDFs en Blazor Servers, IronPDF también es compatible con la generación de documentos PDF desde componentes Razor dentro de una página Blazor. Haciendo la creación de archivos y páginas PDF mucho más eficiente.
[Parameter]publicIEnumerable<PersonInfo> persons { get; set; }publicDictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();protected override async TaskOnInitializedAsync(){ persons = new List<PersonInfo> { new PersonInfo { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new PersonInfo { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new PersonInfo { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } };}private async voidPrintToPdf(){ ChromePdfRenderer renderer = new ChromePdfRenderer(); // Apply text footer renderer.RenderingOptions.TextFooter = new TextHeaderFooter() {LeftText = "{date} - {time}",DrawDividerLine = true,RightText = "Page {page} of {total-pages}",Font = IronSoftware.Drawing.FontTypes.Arial,FontSize = 11 };Parameters.Add("persons", persons); // Render razor component to PDF PdfDocument pdf = renderer.RenderRazorComponentToPdf<Person>(Parameters);File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData);}
[Parameter]
public IEnumerable<PersonInfo> persons { get; set; }
public Dictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();
protected override async Task OnInitializedAsync()
{
persons = new List<PersonInfo>
{
new PersonInfo { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new PersonInfo { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new PersonInfo { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
}
private async void PrintToPdf()
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Apply text footer
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
LeftText = "{date} - {time}",
DrawDividerLine = true,
RightText = "Page {page} of {total-pages}",
Font = IronSoftware.Drawing.FontTypes.Arial,
FontSize = 11
};
Parameters.Add("persons", persons);
// Render razor component to PDF
PdfDocument pdf = renderer.RenderRazorComponentToPdf<Person>(Parameters);
File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData);
}
<Parameter>Public Property persons AsIEnumerable(OfPersonInfo)Public Property ParametersAsDictionary(OfString, Object) = New Dictionary(OfString, Object)()ProtectedOverridesAsync Function OnInitializedAsync() AsTask persons = New List(OfPersonInfo) From { New PersonInfoWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonInfoWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonInfoWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} }End FunctionPrivateAsync Sub PrintToPdf() Dim renderer As New ChromePdfRenderer() ' Apply text footer renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With { .LeftText = "{date} - {time}", .DrawDividerLine = True, .RightText = "Page {page} of {total-pages}", .Font = IronSoftware.Drawing.FontTypes.Arial, .FontSize = 11 }Parameters.Add("persons", persons) ' Render razor component to PDF Dim pdf AsPdfDocument = renderer.RenderRazorComponentToPdf(OfPerson)(Parameters)File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData)End Sub
<Parameter>
Public Property persons As IEnumerable(Of PersonInfo)
Public Property Parameters As Dictionary(Of String, Object) = New Dictionary(Of String, Object)()
Protected Overrides Async Function OnInitializedAsync() As Task
persons = New List(Of PersonInfo) From {
New PersonInfo With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New PersonInfo With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New PersonInfo With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
End Function
Private Async Sub PrintToPdf()
Dim renderer As New ChromePdfRenderer()
' Apply text footer
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.LeftText = "{date} - {time}",
.DrawDividerLine = True,
.RightText = "Page {page} of {total-pages}",
.Font = IronSoftware.Drawing.FontTypes.Arial,
.FontSize = 11
}
Parameters.Add("persons", persons)
' Render razor component to PDF
Dim pdf As PdfDocument = renderer.RenderRazorComponentToPdf(Of Person)(Parameters)
File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData)
End Sub
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía práctica.
CSHTML a PDF
Convertir CSHTML (Razor) a PDF te permite generar documentos profesionales y listos para imprimir directamente desde tus aplicaciones web. Esto es útil para facturas, informes, contratos, o cualquier contenido dinámico. IronPDF soporta Páginas Razor, MVC Core, y MVC Framework, además de renderizado sin interfaz, haciéndolo fácil de integrar la generación de PDFs en tus aplicaciones .NET con solo unas pocas líneas de código.
CSHTML a PDF (Razor Pages)
using IronPdf.Razor.Pages;public IActionResultOnPostAsync(){ persons = new List<Person> { new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } };ViewData["personList"] = persons; ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render Razor Page to PDF document PdfDocument pdf = renderer.RenderRazorToPdf(this);Response.Headers.Add("Content-Disposition", "inline"); returnFile(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");}
using IronPdf.Razor.Pages;
public IActionResult OnPostAsync()
{
persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
ViewData["personList"] = persons;
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor Page to PDF document
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");
}
ImportsIronPdf.Razor.PagesPublic Function OnPostAsync() AsIActionResult persons = New List(OfPerson) From { New PersonWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} }ViewData("personList") = persons Dim renderer As New ChromePdfRenderer() ' Render Razor Page to PDF document Dim pdf AsPdfDocument = renderer.RenderRazorToPdf(Me) Response.Headers.Add("Content-Disposition", "inline") ReturnFile(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf")End Function
Imports IronPdf.Razor.Pages
Public Function OnPostAsync() As IActionResult
persons = New List(Of Person) From {
New Person With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New Person With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New Person With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
ViewData("personList") = persons
Dim renderer As New ChromePdfRenderer()
' Render Razor Page to PDF document
Dim pdf As PdfDocument = renderer.RenderRazorToPdf(Me)
Response.Headers.Add("Content-Disposition", "inline")
Return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf")
End Function
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía práctica.
CSHTML a PDF (MVC Core)
public async Task<IActionResult> Persons(){ var persons = new List<Person> { new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } }; if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method) { ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render View to PDF document PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);Response.Headers.Add("Content-Disposition", "inline"); // Output PDF document returnFile(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf"); } returnView(persons);}
public async Task<IActionResult> Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render View to PDF document
PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);
Response.Headers.Add("Content-Disposition", "inline");
// Output PDF document
return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf");
}
return View(persons);
}
PublicAsync Function Persons() AsTask(OfIActionResult) Dim persons = New List(OfPerson) From { New PersonWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} } If _httpContextAccessor.HttpContext.Request.Method = HttpMethod.Post.MethodThen Dim renderer As New ChromePdfRenderer() ' Render View to PDF document Dim pdf AsPdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons) Response.Headers.Add("Content-Disposition", "inline") ' Output PDF document ReturnFile(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf") End If ReturnView(persons)End Function
Public Async Function Persons() As Task(Of IActionResult)
Dim persons = New List(Of Person) From {
New Person With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New Person With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New Person With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
If _httpContextAccessor.HttpContext.Request.Method = HttpMethod.Post.Method Then
Dim renderer As New ChromePdfRenderer()
' Render View to PDF document
Dim pdf As PdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons)
Response.Headers.Add("Content-Disposition", "inline")
' Output PDF document
Return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf")
End If
Return View(persons)
End Function
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía práctica.
CSHTML a PDF (Marco MVC)
public ActionResultPersons(){ var persons = new List<Person> { new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } }; if (HttpContext.Request.HttpMethod == "POST") { // Provide the path to your view file var viewPath = "~/Views/Home/Persons.cshtml"; ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render Razor view to PDF document PdfDocument pdf = renderer.RenderView(this.HttpContext, viewPath, persons);Response.Headers.Add("Content-Disposition", "inline"); // View the PDF returnFile(pdf.BinaryData, "application/pdf"); } returnView(persons);}
public ActionResult Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (HttpContext.Request.HttpMethod == "POST")
{
// Provide the path to your view file
var viewPath = "~/Views/Home/Persons.cshtml";
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor view to PDF document
PdfDocument pdf = renderer.RenderView(this.HttpContext, viewPath, persons);
Response.Headers.Add("Content-Disposition", "inline");
// View the PDF
return File(pdf.BinaryData, "application/pdf");
}
return View(persons);
}
Public Function Persons() AsActionResult Dim persons = New List(OfPerson) From { New PersonWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} } IfHttpContext.Request.HttpMethod = "POST" Then ' Provide the path to your view file Dim viewPath = "~/Views/Home/Persons.cshtml" Dim renderer As New ChromePdfRenderer() ' Render Razor view to PDF document Dim pdf AsPdfDocument = renderer.RenderView(Me.HttpContext, viewPath, persons) Response.Headers.Add("Content-Disposition", "inline") ' View the PDF ReturnFile(pdf.BinaryData, "application/pdf") End If ReturnView(persons)End Function
Public Function Persons() As ActionResult
Dim persons = New List(Of Person) From {
New Person With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New Person With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New Person With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
If HttpContext.Request.HttpMethod = "POST" Then
' Provide the path to your view file
Dim viewPath = "~/Views/Home/Persons.cshtml"
Dim renderer As New ChromePdfRenderer()
' Render Razor view to PDF document
Dim pdf As PdfDocument = renderer.RenderView(Me.HttpContext, viewPath, persons)
Response.Headers.Add("Content-Disposition", "inline")
' View the PDF
Return File(pdf.BinaryData, "application/pdf")
End If
Return View(persons)
End Function
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía práctica.
CSHTML a PDF (sin encabezado)
app.MapGet("/PrintPdf", async () =>{ // Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"; // Enable detailed logging for troubleshootingIronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All; // Render the Razor view to an HTML string string html = awaitRazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml"); // Create a new instance of ChromePdfRenderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render the HTML string as a PDF document PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot"); // Return the PDF file as a response returnResults.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");});
app.MapGet("/PrintPdf", async () =>
{
// Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Enable detailed logging for troubleshooting
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
// Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");
// Create a new instance of ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render the HTML string as a PDF document
PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");
// Return the PDF file as a response
return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
});
ImportsIronPdfImportsMicrosoft.AspNetCore.Httpapp.MapGet("/PrintPdf", Async Function() AsTask(OfIResult) ' Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01" ' Enable detailed logging for troubleshootingIronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All ' Render the Razor view to an HTML string Dim html AsString = AwaitRazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml") ' Create a new instance of ChromePdfRenderer Dim renderer As New ChromePdfRenderer() ' Render the HTML string as a PDF document Dim pdf AsPdfDocument = renderer.RenderHtmlAsPdf(html, "./wwwroot") ' Return the PDF file as a response ReturnResults.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")End Function)
Imports IronPdf
Imports Microsoft.AspNetCore.Http
app.MapGet("/PrintPdf", Async Function() As Task(Of IResult)
' Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"
' Enable detailed logging for troubleshooting
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All
' Render the Razor view to an HTML string
Dim html As String = Await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml")
' Create a new instance of ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()
' Render the HTML string as a PDF document
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html, "./wwwroot")
' Return the PDF file as a response
Return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")
End Function)
Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía práctica.
2. Cómo configurar los ajustes de HTML a PDF
En términos de manipulación de documentos PDF, IronPDF proporciona amplias personalizaciones a través de la propiedad ChromePdfRenderer.RenderingOptions para los PDFs renderizados.
Configuración
Descripción
Ejemplo
Tamaño de papel
Establecer las dimensiones de página para archivos PDF existentes (A4, Carta, Legal, etc.)
PdfPaperSize.A4
Orientación del papel
Establecer vertical u horizontal para archivos PDF existentes
PdfPaperOrientation.Paisaje
MargenSuperior/Inferior/Izquierda/Derecha
Establecer márgenes de página en milímetros (predeterminado: 25 mm)
CssMediaType
CSS de pantalla o impresión para HTML a PDF
PdfCssMediaType.Imprimir
ImprimirFondosHtml
Incluir colores/imágenes de fondo (predeterminado: verdadero)
verdadero
HabilitarJavaScript
Ejecutar JavaScript antes de renderizar el contenido HTML
verdadero
Esperar.RenderDelay
Tiempo de espera para contenido HTML dinámico (ms)
500
Vea este fragmento de código para un ejemplo completo de configuración para manipular documentos PDF:
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Apply print-specific CSS rulesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;// Set custom margins in millimetersrenderer.RenderingOptions.MarginTop = 50;renderer.RenderingOptions.MarginBottom = 50;// Enable background colors and imagesrenderer.RenderingOptions.PrintHtmlBackgrounds = true;// Set paper size and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4;renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;// Generate PDFs with all settings applied to HTML contentvar htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);pdfDocument.SaveAs("styled-output.pdf");
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
// Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
// Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Generate PDFs with all settings applied to HTML content
var htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
pdfDocument.SaveAs("styled-output.pdf");
ImportsIronPdfImportsIronPdf.RenderingDim renderer As New ChromePdfRenderer()' Apply print-specific CSS rulesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print' Set custom margins in millimetersrenderer.RenderingOptions.MarginTop = 50renderer.RenderingOptions.MarginBottom = 50' Enable background colors and imagesrenderer.RenderingOptions.PrintHtmlBackgrounds = True' Set paper size and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape' Generate PDFs with all settings applied to HTML contentDim htmlContent AsString = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>"Dim pdfDocument AsPdfDocument = renderer.RenderHtmlAsPdf(htmlContent)pdfDocument.SaveAs("styled-output.pdf")
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
' Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
' Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
' Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = True
' Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
' Generate PDFs with all settings applied to HTML content
Dim htmlContent As String = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>"
Dim pdfDocument As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
pdfDocument.SaveAs("styled-output.pdf")
Consejos: Use PdfCssMediaType para obtener diseños más limpios y optimizados para impresión en su formato de archivo PDF renderizado. Use Pantalla para coincidir exactamente con lo que los usuarios ven en su navegador.
Cómo configurar encabezados HTTP personalizados, cookies y credenciales de inicio de sesión
Al renderizar URLs que requieren autenticación o metadatos específicos de la solicitud, IronPDF te permite incluir credenciales de inicio de sesión, cookies de sesión y encabezados HTTP con la solicitud. Esto permite renderizar directamente a PDF los paneles de intranet, informes restringidos o páginas generadas por API sin la necesidad de recuperar el HTML por separado.
Para autenticación básica o NTLM, establezca un objeto LoginCredentials en el renderizador. Para el acceso basado en tokens o sesiones, pase cookies y encabezados a través de RenderingOptions antes de llamar a RenderUrlAsPdf.
using IronPdf;var renderer = new ChromePdfRenderer();// Network authentication (Basic, Digest, NTLM)renderer.LoginCredentials = new ChromeHttpLoginCredentials{NetworkUsername = "user@domain.com",NetworkPassword = "securePassword"};// Session cookies for authenticated pagesrenderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";// Custom HTTP headers (e.g., Bearer tokens, API keys)renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/quarterly-report");pdf.SaveAs("quarterly-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword"
};
// Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";
// Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/quarterly-report");
pdf.SaveAs("quarterly-report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Network authentication (Basic, Digest, NTLM)renderer.LoginCredentials = New ChromeHttpLoginCredentialsWith { .NetworkUsername = "user@domain.com", .NetworkPassword = "securePassword"}' Session cookies for authenticated pagesrenderer.RenderingOptions.CustomCookies("sessionId") = "abc123"' Custom HTTP headers (e.g., Bearer tokens, API keys)renderer.RenderingOptions.CustomHttpRequestHeaders("Authorization") = "Bearer eyJhbGciOi..."Dim pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/quarterly-report")pdf.SaveAs("quarterly-report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = New ChromeHttpLoginCredentials With {
.NetworkUsername = "user@domain.com",
.NetworkPassword = "securePassword"
}
' Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies("sessionId") = "abc123"
' Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders("Authorization") = "Bearer eyJhbGciOi..."
Dim pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/quarterly-report")
pdf.SaveAs("quarterly-report.pdf")
Cómo configurar un proxy para el renderizado de PDF
Al renderizar HTML que carga recursos externos detrás de un proxy corporativo, pase la dirección del proxy como el tercer parámetro en RenderHtmlAsPdf(). Este es un parámetro de método, no una propiedad en ChromePdfRenderOptions — por lo tanto, se establece por llamada de renderizado, no en el renderizador.
Para proxies autenticados, incruste credenciales directamente en el URL usando el formato http://user:pass@host:port. Codifique en URL los caracteres especiales en contraseñas con Uri.EscapeDataString().
using IronPdf;var renderer = new ChromePdfRenderer();// Proxy is the third parameter — not a render optionPdfDocument pdf = renderer.RenderHtmlAsPdf( "<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>", baseUrlOrPath: null, proxy: "http://proxy.corp.local:8080");pdf.SaveAs("proxied-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Proxy is the third parameter — not a render option
PdfDocument pdf = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath: null,
proxy: "http://proxy.corp.local:8080"
);
pdf.SaveAs("proxied-report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Proxy is the third parameter — not a render optionDim pdf AsPdfDocument = renderer.RenderHtmlAsPdf( "<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>", baseUrlOrPath:=Nothing, proxy:="http://proxy.corp.local:8080")pdf.SaveAs("proxied-report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Proxy is the third parameter — not a render option
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath:=Nothing,
proxy:="http://proxy.corp.local:8080"
)
pdf.SaveAs("proxied-report.pdf")
Tenga en cuenta que RenderUrlAsPdf() no acepta un parámetro de proxy. Para renderizar un URL en vivo detrás de un proxy, obtenga el HTML primero con HttpClient configurado con un WebProxy, luego páselo a RenderHtmlAsPdf() con el parámetro de proxy para la carga de activos.
3. Cómo utilizar las funciones avanzadas de generación y seguridad de PDF
Desbloquee capacidades a nivel empresarial para la conversión de HTML a PDF con plantillas avanzadas, operaciones asíncronas y características de seguridad. Estos métodos de manipulación de PDF le permiten crear documentos PDF a gran escala, proteger archivos PDF sensibles y asegurar la autenticidad de los documentos cuando convierte HTML a un formato PDF profesional.
Cómo generar una plantilla HTML para la creación de PDF por lotes
Creación Básica de PDF en Lote
La creación de PDF en lote es esencial para generar múltiples documentos PDF personalizados de manera eficiente. Para escenarios básicos, el método String.Format en C# funciona mejor para la manipulación simple de PDF.
// Simple HTML templating with String.Formatstring htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");// Results in HTML content: <h1>Hello World!</h1>
// Simple HTML templating with String.Format
string htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");
// Results in HTML content: <h1>Hello World!</h1>
' Simple HTML templating with String.FormatDim htmlTemplate AsString = String.Format("<h1>Hello {0}!</h1>", "World")' Results in HTML content: <h1>Hello World!</h1>
' Simple HTML templating with String.Format
Dim htmlTemplate As String = String.Format("<h1>Hello {0}!</h1>", "World")
' Results in HTML content: <h1>Hello World!</h1>
Para plantillas más largas cuando necesita generar documentos PDF, use la sustitución de marcadores de posición en su contenido HTML:
using IronPDF;
// Define reusable HTML template for PDF filesvar htmlTemplate = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>";// Customer names for batch PDF conversion processingvar names = new[] { "John", "James", "Jenny" };// Create personalized PDF documents for each customervar renderer = new ChromePdfRenderer();foreach (var name in names){ // Replace placeholder with actual data in HTML string var htmlInstance = htmlTemplate.Replace("[[NAME]]", name); // Generate personalized PDF document from HTML content var pdf = renderer.RenderHtmlAsPdf(htmlInstance); // Save with customer-specific filename as PDF files pdf.SaveAs($"{name}-invoice.pdf");}
// Define reusable HTML template for PDF files
var htmlTemplate = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>";
// Customer names for batch PDF conversion processing
var names = new[] { "John", "James", "Jenny" };
// Create personalized PDF documents for each customer
var renderer = new ChromePdfRenderer();
foreach (var name in names)
{
// Replace placeholder with actual data in HTML string
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
// Generate personalized PDF document from HTML content
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
// Save with customer-specific filename as PDF files
pdf.SaveAs($"{name}-invoice.pdf");
}
' Define reusable HTML template for PDF filesDim htmlTemplate AsString = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>"' Customer names for batch PDF conversion processingDim names AsString() = {"John", "James", "Jenny"}' Create personalized PDF documents for each customerDim renderer As New ChromePdfRenderer()For Each name In names ' Replace placeholder with actual data in HTML string Dim htmlInstance AsString = htmlTemplate.Replace("[[NAME]]", name) ' Generate personalized PDF document from HTML content Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance) ' Save with customer-specific filename as PDF files pdf.SaveAs($"{name}-invoice.pdf")Next
' Define reusable HTML template for PDF files
Dim htmlTemplate As String = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>"
' Customer names for batch PDF conversion processing
Dim names As String() = {"John", "James", "Jenny"}
' Create personalized PDF documents for each customer
Dim renderer As New ChromePdfRenderer()
For Each name In names
' Replace placeholder with actual data in HTML string
Dim htmlInstance As String = htmlTemplate.Replace("[[NAME]]", name)
' Generate personalized PDF document from HTML content
Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance)
' Save with customer-specific filename as PDF files
pdf.SaveAs($"{name}-invoice.pdf")
Next
Plantillas de HTML a PDF con Handlebars.NET
Para plantillas complejas con bucles y condicionales al convertir HTML a PDF, use plantillas avanzadas con Handlebars.NET para generar documentos PDF con contenido HTML dinámico.
# First, install Handlebars.NET for HTML to PDF templatingPM > Install-Paquete Handlebars.NET
# First, install Handlebars.NET for HTML to PDF templating
PM > Install-Paquete Handlebars.NET
SHELL
using HandlebarsDotNet;using IronPdf;// Define Handlebars template with placeholders for HTML contentvar source = @"<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>";// Compile template for reuse in PDF conversionvar template = Handlebars.Compile(source);// Create data object (can be database records) for HTML to PDF directlyvar data = new { title = "Monthly Report", body = "Sales increased by 15% this month."};// Merge template with data to create HTML contentvar htmlResult = template(data);// Convert templated HTML to PDF using the PDF convertervar renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf(htmlResult);pdf.SaveAs("monthly-report.pdf");
using HandlebarsDotNet;
using IronPdf;
// Define Handlebars template with placeholders for HTML content
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile template for reuse in PDF conversion
var template = Handlebars.Compile(source);
// Create data object (can be database records) for HTML to PDF directly
var data = new {
title = "Monthly Report",
body = "Sales increased by 15% this month."
};
// Merge template with data to create HTML content
var htmlResult = template(data);
// Convert templated HTML to PDF using the PDF converter
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlResult);
pdf.SaveAs("monthly-report.pdf");
ImportsHandlebarsDotNetImportsIronPdf' Define Handlebars template with placeholders for HTML contentDim source AsString = "<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>"' Compile template for reuse in PDF conversionDim template = Handlebars.Compile(source)' Create data object (can be database records) for HTML to PDF directlyDim data = New With { .title = "Monthly Report", .body = "Sales increased by 15% this month."}' Merge template with data to create HTML contentDim htmlResult = template(data)' Convert templated HTML to PDF using the PDF converterDim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf(htmlResult)pdf.SaveAs("monthly-report.pdf")
Imports HandlebarsDotNet
Imports IronPdf
' Define Handlebars template with placeholders for HTML content
Dim source As String =
"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>"
' Compile template for reuse in PDF conversion
Dim template = Handlebars.Compile(source)
' Create data object (can be database records) for HTML to PDF directly
Dim data = New With {
.title = "Monthly Report",
.body = "Sales increased by 15% this month."
}
' Merge template with data to create HTML content
Dim htmlResult = template(data)
' Convert templated HTML to PDF using the PDF converter
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlResult)
pdf.SaveAs("monthly-report.pdf")
Gestionar la paginación en los documentos PDF generados garantiza diseños profesionales y legibles al convertir fragmentos de HTML. Usa CSS para controlar dónde se dividen las páginas en tus archivos PDF.
IronPDF ofrece rendimiento a nivel empresarial con soporte completo para async y multihilos para sus requisitos de conversión de HTML a PDF cuando necesita generar archivos PDF a gran escala.
using IronPdf;using System.Threading.Tasks;// Async method for non-blocking PDF generation from HTML contentpublic async Task<byte[]> GeneratePdfAsync(string html){ var renderer = new ChromePdfRenderer(); // Async HTML to PDF conversion preserves thread pool var pdf = await renderer.RenderHtmlAsPdfAsync(html); // Return PDF files as byte array for web responses return pdf.BinaryData;}// Concurrent batch PDF generation for multiple HTML stringspublic async TaskGenerateMultiplePdfsAsync(List<string> htmlPlantillas){ var renderer = new ChromePdfRenderer(); // Create parallel conversion tasks to generate PDF documents var tasks = htmlPlantillas.Select(html => renderer.RenderHtmlAsPdfAsync(html) ); // Await all PDF conversions simultaneously var pdfs = awaitTask.WhenAll(tasks); // Save generated PDF files from HTML content for (int i = 0; i < pdfs.Length; i++) { pdfs[i].SaveAs($"document-{i}.pdf"); }}
using IronPdf;
using System.Threading.Tasks;
// Async method for non-blocking PDF generation from HTML content
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
// Async HTML to PDF conversion preserves thread pool
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Return PDF files as byte array for web responses
return pdf.BinaryData;
}
// Concurrent batch PDF generation for multiple HTML strings
public async Task GenerateMultiplePdfsAsync(List<string> htmlPlantillas)
{
var renderer = new ChromePdfRenderer();
// Create parallel conversion tasks to generate PDF documents
var tasks = htmlPlantillas.Select(html =>
renderer.RenderHtmlAsPdfAsync(html)
);
// Await all PDF conversions simultaneously
var pdfs = await Task.WhenAll(tasks);
// Save generated PDF files from HTML content
for (int i = 0; i < pdfs.Length; i++)
{
pdfs[i].SaveAs($"document-{i}.pdf");
}
}
ImportsIronPdfImportsSystem.Threading.Tasks' Async method for non-blocking PDF generation from HTML contentPublicAsync Function GeneratePdfAsync(html AsString) AsTask(OfByte()) Dim renderer As New ChromePdfRenderer() ' Async HTML to PDF conversion preserves thread pool Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html) ' Return PDF files as byte array for web responses Return pdf.BinaryDataEnd Function' Concurrent batch PDF generation for multiple HTML stringsPublicAsync Function GenerateMultiplePdfsAsync(htmlPlantillas AsList(OfString)) AsTask Dim renderer As New ChromePdfRenderer() ' Create parallel conversion tasks to generate PDF documents Dim tasks = htmlPlantillas.Select(Function(html) renderer.RenderHtmlAsPdfAsync(html)) ' Await all PDF conversions simultaneously Dim pdfs = AwaitTask.WhenAll(tasks) ' Save generated PDF files from HTML content For i AsInteger = 0 To pdfs.Length - 1 pdfs(i).SaveAs($"document-{i}.pdf") NextEnd Function
Imports IronPdf
Imports System.Threading.Tasks
' Async method for non-blocking PDF generation from HTML content
Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
Dim renderer As New ChromePdfRenderer()
' Async HTML to PDF conversion preserves thread pool
Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
' Return PDF files as byte array for web responses
Return pdf.BinaryData
End Function
' Concurrent batch PDF generation for multiple HTML strings
Public Async Function GenerateMultiplePdfsAsync(htmlPlantillas As List(Of String)) As Task
Dim renderer As New ChromePdfRenderer()
' Create parallel conversion tasks to generate PDF documents
Dim tasks = htmlPlantillas.Select(Function(html) renderer.RenderHtmlAsPdfAsync(html))
' Await all PDF conversions simultaneously
Dim pdfs = Await Task.WhenAll(tasks)
' Save generated PDF files from HTML content
For i As Integer = 0 To pdfs.Length - 1
pdfs(i).SaveAs($"document-{i}.pdf")
Next
End Function
Consejos: Consejos de optimización del rendimiento para la conversión de HTML a PDF
Use sistemas de 64 bits para un rendimiento óptimo de generación de PDF.
Asegúrese de contar con recursos de servidor adecuados cuando genere documentos PDF (evite niveles gratuitos con poca capacidad)
Permita RenderDelay suficiente for JavaScript complejo en contenido HTML.
Reutilice instancias ChromePdfRenderer cuando sea posible.
Aproveche correcciones de memoria de v2025.9.4 para operaciones por lotes/async y reducir recursos. pruebe con tamaños de archivo reducidos con encabezados/pies de página personalizados repetidos.
Cómo Agregar Protección por Contraseña para Archivos PDF en .NET
Proteja documentos PDF generados sensibles con contraseñas y permisos cuando convierta contenido HTML a un formato PDF protegido.
using IronPdf;var renderer = new ChromePdfRenderer();// Convert HTML to PDF with securityvar pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>");// Configure security settings for PDF filespdf.SecuritySettings.UserPassword = "user123"; // Password to open PDF documentspdf.SecuritySettings.OwnerPassword = "owner456"; // Password to modify PDF files// Set granular permissions for PDF formatpdf.SecuritySettings.AllowUserCopyPasteContent = false;pdf.SecuritySettings.AllowUserAnnotations = false;pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint;// Apply strong encryption to PDF documentspdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256;pdf.SaveAs("secure-document.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML to PDF with security
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>");
// Configure security settings for PDF files
pdf.SecuritySettings.UserPassword = "user123"; // Password to open PDF documents
pdf.SecuritySettings.OwnerPassword = "owner456"; // Password to modify PDF files
// Set granular permissions for PDF format
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint;
// Apply strong encryption to PDF documents
pdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256;
pdf.SaveAs("secure-document.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Convert HTML to PDF with securityDim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>")' Configure security settings for PDF filespdf.SecuritySettings.UserPassword = "user123" ' Password to open PDF documentspdf.SecuritySettings.OwnerPassword = "owner456" ' Password to modify PDF files' Set granular permissions for PDF formatpdf.SecuritySettings.AllowUserCopyPasteContent = Falsepdf.SecuritySettings.AllowUserAnnotations = Falsepdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint' Apply strong encryption to PDF documentspdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256pdf.SaveAs("secure-document.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Convert HTML to PDF with security
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>")
' Configure security settings for PDF files
pdf.SecuritySettings.UserPassword = "user123" ' Password to open PDF documents
pdf.SecuritySettings.OwnerPassword = "owner456" ' Password to modify PDF files
' Set granular permissions for PDF format
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint
' Apply strong encryption to PDF documents
pdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256
pdf.SaveAs("secure-document.pdf")
Cómo Agregar Firmas Digitales a Archivos PDF
Agregue firmas criptográficas para asegurar la autenticidad del documento PDF cuando genere archivos PDF a partir de contenido HTML.
using IronPdf;using IronPdf.Signing;var renderer = new ChromePdfRenderer();// Generate PDF from HTML pagevar pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");// Create digital signature with certificate for PDF filesvar signature = new PdfSignature("certificate.pfx", "password"){SigningContact = "legal@company.com",SigningLocation = "New York, NY",SigningReason = "Contract Approval",SignerName = "Authorized Signer" // New property in v2025.8.8 for enhanced signature details};// Apply signature to PDF documentspdf.Sign(signature);pdf.SaveAs("signed-contract.pdf");
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
// Generate PDF from HTML page
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");
// Create digital signature with certificate for PDF files
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "legal@company.com",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval",
SignerName = "Authorized Signer" // New property in v2025.8.8 for enhanced signature details
};
// Apply signature to PDF documents
pdf.Sign(signature);
pdf.SaveAs("signed-contract.pdf");
ImportsIronPdfImportsIronPdf.SigningDim renderer As New ChromePdfRenderer()' Generate PDF from HTML pageDim pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>")' Create digital signature with certificate for PDF filesDim signature As New PdfSignature("certificate.pfx", "password") With { .SigningContact = "legal@company.com", .SigningLocation = "New York, NY", .SigningReason = "Contract Approval", .SignerName = "Authorized Signer" ' New property in v2025.8.8 for enhanced signature details}' Apply signature to PDF documentspdf.Sign(signature)pdf.SaveAs("signed-contract.pdf")
Imports IronPdf
Imports IronPdf.Signing
Dim renderer As New ChromePdfRenderer()
' Generate PDF from HTML page
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>")
' Create digital signature with certificate for PDF files
Dim signature As New PdfSignature("certificate.pfx", "password") With {
.SigningContact = "legal@company.com",
.SigningLocation = "New York, NY",
.SigningReason = "Contract Approval",
.SignerName = "Authorized Signer" ' New property in v2025.8.8 for enhanced signature details
}
' Apply signature to PDF documents
pdf.Sign(signature)
pdf.SaveAs("signed-contract.pdf")
Para convertir elementos de formulario HTML estándar en campos de formulario PDF interactivos y rellenables, active la opción de renderizado CreatePdfFormsFromHtml. Esto conserva entradas de texto, casillas, botones de opción y menús desplegables como campos editables en el documento PDF generado.
using IronPdf;var renderer = new ChromePdfRenderer();// Enable HTML form to PDF form conversionrenderer.RenderingOptions.CreatePdfFormsFromHtml = true;string htmlForm = @" <h2>Employee Onboarding Form</h2> <form> <label>Full Name:</label> <input type='text' name='fullName' value='' /><br/> <label>Department:</label> <select name='department'> <option value='engineering'>Engineering</option> <option value='marketing'>Marketing</option> <option value='sales'>Sales</option> </select><br/> <label>Agree to Terms:</label> <input type='checkbox' name='agreeTerms' /> </form>";var pdf = renderer.RenderHtmlAsPdf(htmlForm);pdf.SaveAs("onboarding-form.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Enable HTML form to PDF form conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
string htmlForm = @"
<h2>Employee Onboarding Form</h2>
<form>
<label>Full Name:</label>
<input type='text' name='fullName' value='' /><br/>
<label>Department:</label>
<select name='department'>
<option value='engineering'>Engineering</option>
<option value='marketing'>Marketing</option>
<option value='sales'>Sales</option>
</select><br/>
<label>Agree to Terms:</label>
<input type='checkbox' name='agreeTerms' />
</form>";
var pdf = renderer.RenderHtmlAsPdf(htmlForm);
pdf.SaveAs("onboarding-form.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Enable HTML form to PDF form conversionrenderer.RenderingOptions.CreatePdfFormsFromHtml = TrueDim htmlForm AsString = " <h2>Employee Onboarding Form</h2> <form> <label>Full Name:</label> <input type='text' name='fullName' value='' /><br/> <label>Department:</label> <select name='department'> <option value='engineering'>Engineering</option> <option value='marketing'>Marketing</option> <option value='sales'>Sales</option> </select><br/> <label>Agree to Terms:</label> <input type='checkbox' name='agreeTerms' /> </form>"Dim pdf = renderer.RenderHtmlAsPdf(htmlForm)pdf.SaveAs("onboarding-form.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Enable HTML form to PDF form conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = True
Dim htmlForm As String = "
<h2>Employee Onboarding Form</h2>
<form>
<label>Full Name:</label>
<input type='text' name='fullName' value='' /><br/>
<label>Department:</label>
<select name='department'>
<option value='engineering'>Engineering</option>
<option value='marketing'>Marketing</option>
<option value='sales'>Sales</option>
</select><br/>
<label>Agree to Terms:</label>
<input type='checkbox' name='agreeTerms' />
</form>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlForm)
pdf.SaveAs("onboarding-form.pdf")
Advertencia: Cada campo de formulario en su HTML debe tener un atributo único name. Los nombres duplicados harán que los campos compartan el mismo valor en el PDF generado, llevando a un comportamiento inesperado cuando los usuarios llenen el formulario.
Para renderizar una sección específica de una página en lugar del documento completo, aísle el elemento objetivo antes de renderizar. La forma más directa utiliza la opción de renderizado JavaScript para reemplazar el cuerpo del documento con el contenido del elemento objetivo, combinado con WaitFor.HtmlQuerySelector() para asegurar que el elemento exista antes de la extracción. El fragmento a continuación preserva document.head para que las hojas de estilo y fuentes se mantengan — sin ese paso, las reglas CSS que dependen de selectores de ancestros se perderían en el PDF extraído.
Para escenarios del lado del servidor donde tiene acceso al HTML sin procesar, extraiga el fragmento objetivo con un analizador como AngleSharp y páselo a RenderHtmlAsPdf() — no es necesario ejecutar JavaScript.
using IronPdf;var renderer = new ChromePdfRenderer();renderer.RenderingOptions.EnableJavaScript = true;// Replace the body with only the target elementrenderer.RenderingOptions.JavaScript = @" var el = document.querySelector('#invoice-summary'); if (el) { var head = document.head.innerHTML; document.body.innerHTML = el.outerHTML; document.head.innerHTML = head; }";// Wait for the target element before JS executesrenderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);var pdf = renderer.RenderHtmlAsPdf(fullPageHtml);pdf.SaveAs("invoice-summary.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
// Replace the body with only the target element
renderer.RenderingOptions.JavaScript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
";
// Wait for the target element before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);
var pdf = renderer.RenderHtmlAsPdf(fullPageHtml);
pdf.SaveAs("invoice-summary.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()renderer.RenderingOptions.EnableJavaScript = True' Replace the body with only the target elementrenderer.RenderingOptions.JavaScript = " var el = document.querySelector('#invoice-summary'); if (el) { var head = document.head.innerHTML; document.body.innerHTML = el.outerHTML; document.head.innerHTML = head; }"' Wait for the target element before JS executesrenderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000)Dim pdf = renderer.RenderHtmlAsPdf(fullPageHtml)pdf.SaveAs("invoice-summary.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
' Replace the body with only the target element
renderer.RenderingOptions.JavaScript = "
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
"
' Wait for the target element before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000)
Dim pdf = renderer.RenderHtmlAsPdf(fullPageHtml)
pdf.SaveAs("invoice-summary.pdf")
Hay tres mecanismos para renderizar páginas que están detrás de la autenticación: credenciales de inicio de sesión de red, cookies personalizadas y encabezados de solicitudes HTTP. Estos cubren los escenarios de autenticación más comunes al convertir contenido web protegido a PDF.
Credenciales de inicio de sesión
Use ChromeHttpLoginCredentials para autenticación básica, de resumen (digest) o NTLM al convertir URLs protegidos a PDF.
using IronPdf;var renderer = new ChromePdfRenderer();// Configure network authenticationrenderer.LoginCredentials = new ChromeHttpLoginCredentials{NetworkUsername = "user@domain.com",NetworkPassword = "securePassword",AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic};var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports");pdf.SaveAs("authenticated-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure network authentication
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword",
AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic
};
var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports");
pdf.SaveAs("authenticated-report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Configure network authenticationrenderer.LoginCredentials = New ChromeHttpLoginCredentialsWith { .NetworkUsername = "user@domain.com", .NetworkPassword = "securePassword", .AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic}Dim pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports")pdf.SaveAs("authenticated-report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Configure network authentication
renderer.LoginCredentials = New ChromeHttpLoginCredentials With {
.NetworkUsername = "user@domain.com",
.NetworkPassword = "securePassword",
.AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic
}
Dim pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports")
pdf.SaveAs("authenticated-report.pdf")
Cookies y encabezados HTTP
Para la autenticación basada en token o sesión, adjunte cookies personalizadas y encabezados HTTP directamente a la solicitud de renderizado.
using IronPdf;var renderer = new ChromePdfRenderer();// Add session cookiesrenderer.RenderingOptions.CustomCookies["sessionId"] = "abc123token";renderer.RenderingOptions.CustomCookies["authToken"] = "bearer-xyz";// Add custom HTTP headers (e.g., API key or Bearer token)renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";var pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard");pdf.SaveAs("dashboard.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Add session cookies
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123token";
renderer.RenderingOptions.CustomCookies["authToken"] = "bearer-xyz";
// Add custom HTTP headers (e.g., API key or Bearer token)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard");
pdf.SaveAs("dashboard.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Add session cookiesrenderer.RenderingOptions.CustomCookies("sessionId") = "abc123token"renderer.RenderingOptions.CustomCookies("authToken") = "bearer-xyz"' Add custom HTTP headers (e.g., API key or Bearer token)renderer.RenderingOptions.CustomHttpRequestHeaders("Authorization") = "Bearer eyJhbGciOi..."Dim pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard")pdf.SaveAs("dashboard.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Add session cookies
renderer.RenderingOptions.CustomCookies("sessionId") = "abc123token"
renderer.RenderingOptions.CustomCookies("authToken") = "bearer-xyz"
' Add custom HTTP headers (e.g., API key or Bearer token)
renderer.RenderingOptions.CustomHttpRequestHeaders("Authorization") = "Bearer eyJhbGciOi..."
Dim pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard")
pdf.SaveAs("dashboard.pdf")
Consejos: Para inicios de sesión basados en formularios HTML (POST usuario/contraseña), considere usar HttpClient para autenticar primero, luego pase las cookies resultantes al diccionario CustomCookies para renderizar la página protegida.
¿Cómo puedo generar archivos PDF a partir de múltiples fragmentos HTML?
Para generar archivos PDF combinando fragmentos HTML, puedes fusionarlos . Esto crea informes de varias secciones o combina contenido de diferentes fuentes:
var renderer = new ChromePdfRenderer();PdfDocument part1 = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>");PdfDocument part2 = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>");var merged = PdfDocument.Merge(part1, part2);merged.SaveAs("Merged.pdf");// Alternative approach: copy specific pagesvar combinedDoc = new PdfDocument();combinedDoc.CopyPage(part1, 0); // Copy first pagecombinedDoc.CopyPage(part2, 0); // Copy first pagecombinedDoc.SaveAs("Combined.pdf");
var renderer = new ChromePdfRenderer();
PdfDocument part1 = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>");
PdfDocument part2 = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>");
var merged = PdfDocument.Merge(part1, part2);
merged.SaveAs("Merged.pdf");
// Alternative approach: copy specific pages
var combinedDoc = new PdfDocument();
combinedDoc.CopyPage(part1, 0); // Copy first page
combinedDoc.CopyPage(part2, 0); // Copy first page
combinedDoc.SaveAs("Combined.pdf");
Dim renderer = New ChromePdfRenderer()Dim part1 AsPdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>")Dim part2 AsPdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>")Dim merged = PdfDocument.Merge(part1, part2)merged.SaveAs("Merged.pdf")' Alternative approach: copy specific pagesDim combinedDoc = New PdfDocument()combinedDoc.CopyPage(part1, 0) ' Copy first pagecombinedDoc.CopyPage(part2, 0) ' Copy first pagecombinedDoc.SaveAs("Combined.pdf")
Dim renderer = New ChromePdfRenderer()
Dim part1 As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>")
Dim part2 As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>")
Dim merged = PdfDocument.Merge(part1, part2)
merged.SaveAs("Merged.pdf")
' Alternative approach: copy specific pages
Dim combinedDoc = New PdfDocument()
combinedDoc.CopyPage(part1, 0) ' Copy first page
combinedDoc.CopyPage(part2, 0) ' Copy first page
combinedDoc.SaveAs("Combined.pdf")
Esto ayuda a la hora de crear informes de varias secciones a partir de diferentes fragmentos HTML. También puedes agregar marcadores para mejorar la navegación.
¿Cómo convierto HTML a PDF en las API web?
En ASP.NET Web API, genere y devuelva archivos PDF sin guardarlos en el disco usando MemoryStream . Este patrón es ideal para aplicaciones Blazor y servicios RESTful:
[HttpGet("download")]public IActionResultGetPdf(){ var renderer = new ChromePdfRenderer(); string html = "<h1>Web Report</h1><p>Generated dynamically.</p>"; var pdf = renderer.RenderHtmlAsPdf(html); var bytes = pdf.BinaryData; // Optional: Add metadata pdf.MetaData.Author = "API Service"; pdf.MetaData.CreationDate = DateTime.Now; returnFile(bytes, "application/pdf", "report.pdf");}
[HttpGet("download")]
public IActionResult GetPdf()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Web Report</h1><p>Generated dynamically.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
var bytes = pdf.BinaryData;
// Optional: Add metadata
pdf.MetaData.Author = "API Service";
pdf.MetaData.CreationDate = DateTime.Now;
return File(bytes, "application/pdf", "report.pdf");
}
<HttpGet("download")>Public Function GetPdf() AsIActionResult Dim renderer = New ChromePdfRenderer() Dim html AsString = "<h1>Web Report</h1><p>Generated dynamically.</p>" Dim pdf = renderer.RenderHtmlAsPdf(html) Dim bytes = pdf.BinaryData ' Optional: Add metadata pdf.MetaData.Author = "API Service" pdf.MetaData.CreationDate = DateTime.Now ReturnFile(bytes, "application/pdf", "report.pdf")End Function
<HttpGet("download")>
Public Function GetPdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<h1>Web Report</h1><p>Generated dynamically.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim bytes = pdf.BinaryData
' Optional: Add metadata
pdf.MetaData.Author = "API Service"
pdf.MetaData.CreationDate = DateTime.Now
Return File(bytes, "application/pdf", "report.pdf")
End Function
Este patrón funciona muy bien para la generación de PDF del lado del servidor en aplicaciones web .NET 10. Puede integrarse con vistas CSHTML para aplicaciones MVC.
¿Cómo agregar encabezados, marcas de agua y seguridad?
Cómo agregar encabezados y pies de página profesionales
Los encabezados y pies de página que muestran números de página, fechas o marca hacen que los documentos de varias páginas sean mucho más legibles y profesionales. IronPDF los procesa como fragmentos HTML, por lo que puede utilizar el estilo CSS completo, incluidas imágenes y colores de marca:
using IronPdf;var renderer = new ChromePdfRenderer();renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter{MaxHeight = 50,HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",BaseUrl = new Uri(@"file:///C:/assets/")};renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter{MaxHeight = 30,HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",DrawDividerLine = true};renderer.RenderingOptions.MarginTop = 60;renderer.RenderingOptions.MarginBottom = 40;var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>");pdf.SaveAs("report-with-headers.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
MaxHeight = 50,
HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",
BaseUrl = new Uri(@"file:///C:/assets/")
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
MaxHeight = 30,
HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true
};
renderer.RenderingOptions.MarginTop = 60;
renderer.RenderingOptions.MarginBottom = 40;
var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>");
pdf.SaveAs("report-with-headers.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooterWith { .MaxHeight = 50, .HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>", .BaseUrl = New Uri("file:///C:/assets/")}renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooterWith { .MaxHeight = 30, .HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>", .DrawDividerLine = True}renderer.RenderingOptions.MarginTop = 60renderer.RenderingOptions.MarginBottom = 40Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>")pdf.SaveAs("report-with-headers.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.MaxHeight = 50,
.HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",
.BaseUrl = New Uri("file:///C:/assets/")
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.MaxHeight = 30,
.HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",
.DrawDividerLine = True
}
renderer.RenderingOptions.MarginTop = 60
renderer.RenderingOptions.MarginBottom = 40
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>")
pdf.SaveAs("report-with-headers.pdf")
Los marcadores de posición como {page} y {total-pages} se reemplazan automáticamente al momento de renderizar. Revise el tutorial de encabezados y pies de página para la inyección dinámica de fechas, colocación de logotipos y estilos de página alternos.
Aplicación de marcas de agua, cifrado y firmas digitales
Las marcas de agua protegen borradores de documentos e informes confidenciales. La protección con contraseña y la configuración de permisos restringen quién puede imprimir, copiar o editar un PDF. Las firmas digitales añaden una capa de autenticidad verificable para los contratos y documentos regulados. Puedes combinar los tres en un único flujo de trabajo:
using IronPdf;using System.Security.Cryptography.X509Certificates;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>");// Watermarkpdf.ApplyWatermark( "<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>", rotation: 45, opacity: 30);// Encryption and permissionspdf.SecuritySettings.UserPassword = "user123";pdf.SecuritySettings.OwnerPassword = "owner456";pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;pdf.SecuritySettings.AllowUserCopyPasteContent = false;// Digital signaturevar cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");var signature = new PdfSignature(cert){SigningContact = "Jane Smith",SigningLocation = "New York, NY",SigningReason = "Contract Approval"};pdf.Sign(signature);pdf.SaveAsRevision("signed-contract.pdf");
using IronPdf;
using System.Security.Cryptography.X509Certificates;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>");
// Watermark
pdf.ApplyWatermark(
"<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>",
rotation: 45,
opacity: 30
);
// Encryption and permissions
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
// Digital signature
var cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");
var signature = new PdfSignature(cert)
{
SigningContact = "Jane Smith",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval"
};
pdf.Sign(signature);
pdf.SaveAsRevision("signed-contract.pdf");
ImportsIronPdfImportsSystem.Security.Cryptography.X509CertificatesDim renderer As New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>")' Watermarkpdf.ApplyWatermark( "<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>", rotation:=45, opacity:=30)' Encryption and permissionspdf.SecuritySettings.UserPassword = "user123"pdf.SecuritySettings.OwnerPassword = "owner456"pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrintpdf.SecuritySettings.AllowUserCopyPasteContent = False' Digital signatureDim cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password")Dim signature As New PdfSignature(cert) With { .SigningContact = "Jane Smith", .SigningLocation = "New York, NY", .SigningReason = "Contract Approval"}pdf.Sign(signature)pdf.SaveAsRevision("signed-contract.pdf")
Imports IronPdf
Imports System.Security.Cryptography.X509Certificates
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>")
' Watermark
pdf.ApplyWatermark(
"<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>",
rotation:=45,
opacity:=30
)
' Encryption and permissions
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
' Digital signature
Dim cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password")
Dim signature As New PdfSignature(cert) With {
.SigningContact = "Jane Smith",
.SigningLocation = "New York, NY",
.SigningReason = "Contract Approval"
}
pdf.Sign(signature)
pdf.SaveAsRevision("signed-contract.pdf")
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.
4. Cómo implementar HTML a PDF en plataformas en la nube
La implementación de la conversión de HTML a PDF en entornos en la nube requiere una configuración específica para el renderizado sin cabeza, rutas de archivos temporales y asignación de recursos. Esta sección cubre las plataformas en la nube más comunes y los despliegues con contenedores con IronPDF.
Plataforma
Recursos mínimos
Paquete
AutoConfig
Ruta temporal
Elemento clave
Azure App Service
Nivel B1 (Básico)
IronPdf.Linux
true
/tmp
Los niveles gratuitos/compartidos fallan: sin GPU, poca memoria
Azure Functions (Windows)
Nivel B1
IronPdf
true
/tmp
Desmarque 'Ejecutar desde el archivo del paquete'
AWS Lambda
512 MB / tiempo de espera de 330s
IronPdf.Linux
true
/tmp (requerido)
El sistema de archivos predeterminado es de solo lectura
Docker (Ubuntu/Debian)
Dependiente de la imagen
IronPdf.Linux
false
Por defecto de la imagen
Establezca false — Dockerfile maneja deps
Cómo implementar en Azure
Al implementar en Azure Functions o App Service, deshabilite la aceleración de GPU y asegúrese de que su nivel de alojamiento proporcione suficiente memoria para el renderizado basado en Chrome. Agregue estas configuraciones al inicio de la aplicación, antes de cualquier llamada de renderizado.
Los sandboxes de Azure se ejecutan sin cabeza sin acceso a GPU, y los niveles gratuitos/compartidos (F1, D1) carecen de los recursos necesarios para Chrome. Apunte a un nivel B1 (Básico) o superior.
using IronPdf;// Azure sandboxes block GPU access — always disableIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;// Required on non-GUI Linux systemsIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>");pdf.SaveAs("azure-report.pdf");
using IronPdf;
// Azure sandboxes block GPU access — always disable
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Required on non-GUI Linux systems
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>");
pdf.SaveAs("azure-report.pdf");
ImportsIronPdf' Azure sandboxes block GPU access — always disableIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled' Required on non-GUI Linux systemsIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = TrueDim renderer As New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>")pdf.SaveAs("azure-report.pdf")
Imports IronPdf
' Azure sandboxes block GPU access — always disable
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
' Required on non-GUI Linux systems
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>")
pdf.SaveAs("azure-report.pdf")
Precaución: Los niveles gratuitos y compartidos de Azure App Service (F1, D1) no tienen suficientes recursos para el renderizado PDF basado en Chrome. Utilice al menos un nivel B1 (Básico) o superior para evitar errores de memoria insuficiente y tiempo de espera de procesos.
AWS Lambda requiere una implementación basada en Docker para el renderizado PDF basado en Chrome. El sistema de archivos predeterminado de Lambda es de solo lectura, por lo que todos los caminos temporales y de despliegue deben apuntar a /tmp.
Configure estas configuraciones en la parte superior de su manejador de funciones, antes de cualquier llamada de renderizado.
using Amazon.Lambda.Core;using IronPdf;public class PdfFunction{ public stringFunctionHandler(string input, ILambdaContext context) { // Lambda's only writable directory var tmpPath = "/tmp/";IronPdf.Installation.TempFolderPath = tmpPath;IronPdf.Installation.CustomDeploymentDirectory = tmpPath;IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled; // Let IronPDF install Chrome dependencies on first cold startIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true; context.Logger.LogLine("Rendering PDF..."); var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(input); // Save to /tmp before uploading to S3 or returning var outputPath = $"{tmpPath}output.pdf"; pdf.SaveAs(outputPath); return outputPath; }}
using Amazon.Lambda.Core;
using IronPdf;
public class PdfFunction
{
public string FunctionHandler(string input, ILambdaContext context)
{
// Lambda's only writable directory
var tmpPath = "/tmp/";
IronPdf.Installation.TempFolderPath = tmpPath;
IronPdf.Installation.CustomDeploymentDirectory = tmpPath;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
context.Logger.LogLine("Rendering PDF...");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(input);
// Save to /tmp before uploading to S3 or returning
var outputPath = $"{tmpPath}output.pdf";
pdf.SaveAs(outputPath);
return outputPath;
}
}
ImportsAmazon.Lambda.CoreImportsIronPdfPublic Class PdfFunction Public Function FunctionHandler(input AsString, context AsILambdaContext) AsString ' Lambda's only writable directory Dim tmpPath AsString = "/tmp/"IronPdf.Installation.TempFolderPath = tmpPathIronPdf.Installation.CustomDeploymentDirectory = tmpPathIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled ' Let IronPDF install Chrome dependencies on first cold startIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True context.Logger.LogLine("Rendering PDF...") Dim renderer As New ChromePdfRenderer() Dim pdf = renderer.RenderHtmlAsPdf(input) ' Save to /tmp before uploading to S3 or returning Dim outputPath AsString = $"{tmpPath}output.pdf" pdf.SaveAs(outputPath) Return outputPath End FunctionEnd Class
Imports Amazon.Lambda.Core
Imports IronPdf
Public Class PdfFunction
Public Function FunctionHandler(input As String, context As ILambdaContext) As String
' Lambda's only writable directory
Dim tmpPath As String = "/tmp/"
IronPdf.Installation.TempFolderPath = tmpPath
IronPdf.Installation.CustomDeploymentDirectory = tmpPath
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
' Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
context.Logger.LogLine("Rendering PDF...")
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(input)
' Save to /tmp before uploading to S3 or returning
Dim outputPath As String = $"{tmpPath}output.pdf"
pdf.SaveAs(outputPath)
Return outputPath
End Function
End Class
Por favor nota: Configure su función Lambda con al menos 512 MB de memoria y un tiempo de espera mínimo de 60 segundos. El renderizado basado en Chrome consume mucha memoria y los inicios en frío requieren tiempo de inicialización adicional para el motor de navegador integrado.
Para despliegues en Docker, use el paquete de NuGet IronPdf.Linux para reducir el tamaño de la imagen y evitar descargas de activos en tiempo de ejecución. Este paquete incluye binarios nativos de Linux preempaquetados optimizados para entornos de contenedores.
Establezca LinuxAndDockerDependenciesAutoConfig = false cuando su Dockerfile ya instale las dependencias de bibliotecas compartidas de Chrome a través de apt-get. La auto-instalación en tiempo de ejecución es redundante en ese caso y puede causar errores de permisos o inicios en frío más largos.
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# Install Chrome dependencies for PDF rendering
RUN apt-get update && apt-get install -y \
libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 \
libcups2 libdrm2 libxkbcommon0 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 \
libcairo2 libasound2 libxshmfence1 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /out .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Text
using IronPdf;// Dependencies handled by Dockerfile apt-get — disable runtime installIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = false;// No GPU in containersIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>");pdf.SaveAs("output.pdf");
using IronPdf;
// Dependencies handled by Dockerfile apt-get — disable runtime install
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = false;
// No GPU in containers
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>");
pdf.SaveAs("output.pdf");
ImportsIronPdf' Dependencies handled by Dockerfile apt-get — disable runtime installIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = False' No GPU in containersIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.DisabledDim renderer As New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>")pdf.SaveAs("output.pdf")
Imports IronPdf
' Dependencies handled by Dockerfile apt-get — disable runtime install
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = False
' No GPU in containers
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>")
pdf.SaveAs("output.pdf")
¿Cómo se puede optimizar y escalar el rendimiento de HTML a PDF en .NET Core?
El motor Chromium de IronPDF ya renderiza la mayoría de las páginas en < 1 s en hardware moderno, pero el rendimiento se puede multiplicar mediante procesos por lotes, habilitando el multihilo, y reduciendo la sobrecarga de Headless Chrome. ### 1. Agregar renderizados en un fondo de subprocesos
1. Renderizado por lotes en un grupo de hilos en segundo plano
// BatchRender.cs — Thread-safe on .NET 8+using IronPdf;using System.Threading.Tasks;var htmlSources = Directory.GetFiles("./html", "*.html");var renderer = new ChromePdfRenderer(); // reuse 1 instanceParallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>{ string html = File.ReadAllText(file); using PdfDocument pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));});
// BatchRender.cs — Thread-safe on .NET 8+
using IronPdf;
using System.Threading.Tasks;
var htmlSources = Directory.GetFiles("./html", "*.html");
var renderer = new ChromePdfRenderer(); // reuse 1 instance
Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
string html = File.ReadAllText(file);
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));
});
' BatchRender.cs — Thread-safe on .NET 8+ImportsIronPdfImportsSystem.Threading.TasksPrivate htmlSources = Directory.GetFiles("./html", "*.html")Private renderer = New ChromePdfRenderer() ' reuse 1 instanceParallel.ForEach(htmlSources, New ParallelOptionsWith {.MaxDegreeOfParallelism = Environment.ProcessorCount}, Sub(file) Dim html AsString = File.ReadAllText(file)Using pdf AsPdfDocument = renderer.RenderHtmlAsPdf(html) pdf.SaveAs(Path.ChangeExtension(file, ".pdf"))EndUsingEnd Sub)
' BatchRender.cs — Thread-safe on .NET 8+
Imports IronPdf
Imports System.Threading.Tasks
Private htmlSources = Directory.GetFiles("./html", "*.html")
Private renderer = New ChromePdfRenderer() ' reuse 1 instance
Parallel.ForEach(htmlSources, New ParallelOptions With {.MaxDegreeOfParallelism = Environment.ProcessorCount}, Sub(file)
Dim html As String = File.ReadAllText(file)
Using pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs(Path.ChangeExtension(file, ".pdf"))
End Using
End Sub)
5. Reutilizar PDFs de plantilla en lugar de renderizar de nuevo
5. Reutilizar plantillas PDF en lugar de volver a renderizar
Para corridas de facturas, crea un PDF de plantilla con marcadores de posición como [[name]] y realiza un reemplazo de texto en lugar de reconstruir HTML complejo. ### Lista de verificación rápida de ajuste
5. Comparar IronPDF con otras bibliotecas PDF de .NET
IronPDF es la solución preferida para muchos equipos cuando se trata de generación de PDF en C# gracias a su robusto motor de renderizado potenciado por Chromium, APIs intuitivas y mejoras frecuentes de producto. Compararemos IronPDF con otros convertidores de PDF para encontrar la mejor solución para sus necesidades de generación de PDF.
Matriz de decisión rápida: IronPDF frente a otros convertidores de PDF .NET
Solución
Cuándo utilizarlo
Best para
IronPDF
Conversión de sitios web modernos/HTML a PDF con fidelidad visual exacta.
Aplicaciones empresariales que requieren un motor de renderizado HTML confiable, contenido dinámico y soporte profesional.
wkhtmltopdf
Conversión de HTML simple en aplicaciones no críticas donde la representación obsoleta es aceptable.
Generación básica de documentos con HTML/CSS heredado.
Fusión de sincronización
Cuando ya haya invertido en el ecosistema Syncfusion o sea elegible para obtener una licencia comunitaria gratuita.
Organizaciones que utilizan múltiples componentes de Syncfusion.
Aspose.PDF
Manipulación compleja de PDF cuando la calidad de representación HTML es menos crítica.
Amplias funciones de edición de PDF más allá de la conversión a HTML.
Comparación de conversión de HTML a PDF en la vida real: Representación de la página de inicio de Reddit
Para evaluar la calidad del PDF de salida, probamos estas bibliotecas con la página principal de Reddit que contiene contenido web dinámico, CSS moderno y elementos HTML de JavaScript. Esta página sirve como un caso de prueba ideal para la generación de PDF de salida.
IronPDF ofrece resultados pixel-perfect, preservando todo el contenido web dinámico, el estilo de fuentes web modernas y los elementos interactivos exactamente como se muestran en Chrome, todo en tan solo unas pocas líneas de código.
Syncfusion
Syncfusion renderizó el PDF con la mayoría de las secciones y estilos ausentes, especialmente el contenido dinámico. Inicialmente bloqueado por la seguridad de Reddit. Lograr mejores resultados requiere una extensa configuración de línea de comandos, pero la salida sigue siendo incompleta.
Aspose.PDF
Aspose.PDF requirió primero una descarga manual de HTML (sin soporte para URL directo). Después de la conversión, el resultado carecía de un formato adecuado y se perdieron casi todas las secciones de contenido, lo que lo hace inadecuado para la web moderna con contenido dinámico.
wkhtmltopdf
wkhtmltopdf se completó rápidamente, pero produjo una página plana y estática que carece de contenido crítico como actualizaciones en vivo, elementos dinámicos y secciones interactivas. Esto demuestra la incompatibilidad de wkhtmltopdf con sitios web modernos impulsados por JavaScript.
Conclusión sobre el rendimiento y la calidad del PDF de salida
Para los desarrolladores .NET que necesitan un conversor confiable de HTML a PDF, IronPDF se destaca con un código mínimo, APIs fáciles de usar y mejoras frecuentes del producto.
En una prueba del mundo real en contenido web, ofreció los resultados más rápidos y precisos, mientras que Syncfusion quedó rezagado, Aspose requirió pasos adicionales y wkhtmltopdf careció de estilo moderno. IronPDF ofrece el mejor equilibrio de velocidad, precisión y simplicidad para los flujos de trabajo de conversión de HTML a PDF de hoy.
Por favor note:
Aspose, Syncfusion y wkhtmltopdf son marcas registradas de sus respectivos propietarios. Este sitio no está afiliado ni es patrocinado por ellos. Todos los nombres, logotipos y marcas pertenecen a sus propietarios, y las comparaciones se basan en la información públicamente disponible al momento de escribir.
Resumen
Esta guía cubrió todo lo necesario para convertir HTML a PDF en .NET: desde la conversión básica de cadenas hasta funciones avanzadas como procesamiento asíncrono, firmas digitales y generación de lotes. Demostramos tres métodos de conversión, configuraciones esenciales, funciones avanzadas y configuraciones de seguridad, y comparamos IronPDF con otras bibliotecas mediante pruebas del mundo real de generación de documentos dinámicos.
Mientras los competidores lucharon con sitios web modernos o requerían soluciones complejas, IronPDF ofreció resultados impecables con un código mínimo y un potente motor de renderización.
¿Listo para simplificar tu flujo de trabajo de PDF y experimentar una generación versátil de PDF en solo unas pocas líneas de código? Instala IronPDF a través del Administrador de Paquetes NuGet (o selecciona Administrar Paquetes NuGet en Visual Studio) y convierte tu primer HTML a PDF hoy.
Conversión de HTML a PDF en el contexto español: Facturae, VeriFactu y TicketBAI
La conversión de HTML a PDF tiene una aplicación regulatoria directa en España, donde múltiples sistemas fiscales exigen la generación de documentos PDF a partir de plantillas HTML.
Pipeline HTML → PDF para facturas VeriFactu
El sistema VeriFactu (anti-fraude de software de facturación, regulado por la AEAT) requiere que el software de facturación genere PDFs de facturas a partir de sus registros XML con huella encadenada. El pipeline recomendado con IronPDF es:
El motor de facturación del ISV genera el XML VeriFactu con la huella (hash SHA-256 encadenado).
Una plantilla HTML (Handlebars, Razor o XSLT → HTML) renderiza los datos de la factura.
ChromePdfRenderer.RenderHtmlAsPdf() genera el PDF.
TextStamper estampa la leyenda obligatoria VERI*FACTU (con asterisco entre "VERI" y "FACTU").
ImageStamper incrusta el código QR de verificación de la sede electrónica de la AEAT.
Nota para ISVs: El incumplimiento de VeriFactu puede acarrear sanciones de hasta 150.000 €/año para los proveedores de software de facturación. IronPDF actúa como componente dentro del software certificado del ISV; la certificación ante la AEAT es responsabilidad del proveedor.
En España, el uso de iText bajo licencia AGPL en software de facturación sujeto a VeriFactu expone al ISV a un riesgo triple: (1) la obligación de publicar el código fuente bajo AGPL, (2) el coste de la licencia comercial de iText si no se publica el código, y (3) la sanción VeriFactu de hasta 150.000 €/año si el software no cumple la normativa. IronPDF, bajo licencia comercial propietaria, elimina la exposición AGPL manteniendo la conformidad con VeriFactu.
Plantillas HTML para documentos AEAT: declaraciones y modelos fiscales
Los desarrolladores que generan PDFs de declaraciones fiscales de la AEAT (Modelo 303, Modelo 111, Modelo 190, Modelo 347) a partir de plantillas HTML pueden usar IronPDF para renderizar los formularios HTML con datos dinámicos. Configure RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print para obtener el diseño de impresión correcto y PaperSize = A4 para el formato A4 exigido por la AEAT. Si genera estos modelos a partir de informes heredados, la guía de migración desde SAP Crystal Reports a IronPDF en C# muestra cómo trasladar esas plantillas a HTML.
TicketBAI: representación PDF del tique por territorio foral
Los tiques TicketBAI para Bizkaia, Gipuzkoa y Araba se representan como PDF a partir de plantillas HTML específicas de cada hacienda foral. Si el entorno de generación es AWS Lambda (Linux), instale las fuentes para caracteres castellanos y euskera en el contenedor Docker (ver fuentes rotas en AWS Lambda). Configure InputEncoding = "UTF-8" para garantizar la correcta representación de los caracteres acentuados del castellano y del euskera en el PDF del tique.
LOPDGDD y generación de PDFs con datos personales
Al generar PDFs desde HTML que contienen datos personales (facturas con NIF/CIF del destinatario, contratos, nóminas), la LOPDGDD exige que el procesamiento sea seguro. Configure protección por contraseña con AES-256 usando SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256 sobre los PDFs que contengan datos personales antes de almacenarlos o transmitirlos, cumpliendo los requisitos de la AEPD.
Accesibilidad de PDFs para el sector público
Los organismos públicos españoles deben cumplir el Real Decreto 1112/2018 sobre accesibilidad de sitios web y aplicaciones del sector público. La guía de accesibilidad de PDFs en C# para el sector público español explica cómo generar documentos PDF etiquetados y accesibles conforme a esa normativa.
6. Solución de problemas y soporte técnico
¿Tienes problemas con los siguientes errores en la conversión de HTML a PDF? IronPDF ofrece soporte de ingenieros 24/7 mediante el widget de chat en https://ironpdf.com/
Soluciones rápidas a errores comunes
¿Lenta primera renderización? Normal. Chrome se inicializa en 2–3s, luego acelera.
¿Problemas en la nube? Usa al menos Azure B1 o recursos equivalentes.
¿Recursos faltantes? Configura rutas base o incrusta como base64.
¿Elementos faltantes? Añade RenderDelay para ejecución de JavaScript.
¿Memoria en renderización? Actualiza a v2025.9.4 para correcciones en HTML a PDF, sellos y encabezados/pies.
¿Problemas con campos de formulario (p.ej., áreas de texto largas, casillas de verificación)? Corregido en v2025.7.17; asegúrate de nombres únicos para casillas de verificación.
¿Recorte de encabezado/pie personalizado o caracteres especiales corruptos? Resuelto en v2025.8.8; prueba el ajuste de palabras y metadatos.
Obtenga ayuda de los ingenieros que construyeron IronPDF, 24/7
Puedes convertir HTML a PDF en C# utilizando una biblioteca de renderizado de Chrome que convierte HTML, CSS3 y JavaScript en PDF perfectos. Herramientas como IronPDF permiten renderizar a partir de URL, cadenas HTML o archivos y admiten cabeceras, autenticación y ajustes de impresión.
¿Cuál es la mejor biblioteca HTML a PDF for .NET?
La mejor biblioteca debería admitir la representación precisa de Chrome, la implementación multiplataforma y las características empresariales. IronPDF cubre todo esto: funciona en Windows, Linux, macOS y Docker, con soporte para seguridad, firmas, cumplimiento y aplicaciones escalables .NET.
¿Cuáles son las opciones gratuitas de HTML a PDF for .NET?
Rutas de código abierto como wkhtmltopdf, PuppeteerSharp y Playwright convierten HTML a PDF sin costo, pero intercambian conveniencia por mantenimiento — motores de renderizado más antiguos, binarios de navegador incluidos o configuración manual del servidor. IronPDF es comercial, con una prueba gratuita de 30 días que tiene todas las funciones y sin marcas de agua durante el desarrollo; las licencias de producción comienzan en $999. Ver precios →
¿Cómo puedo convertir cadenas HTML a PDF usando C#?
Para convertir cadenas HTML a PDF, usa la clase ChromePdfRenderer y su método RenderHtmlAsPdf. Pasa tu cadena HTML a este método, luego guarda el PDF usando SaveAs.
¿Cuáles son los pasos para convertir una URL de página web a un documento PDF en C#?
Puedes convertir una URL de página web directamente en un PDF usando el método RenderUrlAsPdf, lo que te permite conservar estilos, imágenes y elementos interactivos como formularios e hipervínculos.
¿Cómo convierto un archivo HTML a PDF en C#?
Usa ChromePdfRenderer.RenderHtmlFileAsPdf("path/to/file.html") para convertir archivos HTML locales a PDF. IronPDF resuelve automáticamente todas las rutas de recursos relativos (imágenes, CSS, JS).
¿Cómo convierto las Razor Pages de ASP.NET o las Vistas MVC a PDF?
IronPDF proporciona paquetes de extensiones dedicados — IronPdf.Extensions.Razor para Razor Pages y IronPdf.Extensions.Mvc.Core para Vistas MVC. Usa RenderRazorToPdf o RenderRazorViewToPdf con inyección de dependencias para convertir vistas directamente a PDF desde tus controladores. Ver guía de Razor →
¿Cómo aseguro que el contenido JavaScript se renderice correctamente en el PDF?
Habilita la representación de JavaScript configurando RenderingOptions.EnableJavaScript = true y agrega un retraso de renderizado usando RenderingOptions.WaitFor.RenderDelay para asegurar que el contenido dinámico esté completamente cargado antes de la conversión. Ver guía de WaitFor →
¿Por qué mi salida de HTML a PDF está en blanco o falta contenido?
Un PDF en blanco o parcial casi siempre significa que la página no había terminado de renderizarse cuando fue capturada, o sus recursos no se cargaron. Para contenido dinámico o impulsado por JavaScript, configure RenderingOptions.EnableJavaScript = true y agregue un WaitFor.RenderDelay (o WaitFor.HtmlQuerySelector) para que Chrome termine de pintar primero. Si faltan imágenes locales, CSS o fuentes, pase un BaseUrlPath para que las rutas relativas se resuelvan correctamente. Ver guía de WaitFor →
¿Cuál es el mejor método para agregar encabezados y pies de página a un PDF en C#?
Usa la clase TextHeaderFooter para encabezados y pies de página de texto simples, o la clase HtmlHeaderFooter para contenido HTML más complejo. Puedes incluir marcadores de posición dinámicos como {page}, {total-pages} y {date} para generación automática de contenido. Ver guía de encabezados y pies de página →
¿Cómo manejo saltos de página en la salida del PDF en C# .NET?
Controla los saltos de página en tus PDFs utilizando propiedades CSS como page-break-after: always y page-break-inside: avoid dentro de un bloque de media de impresión CSS. Ver guía de saltos de página →
¿Qué opciones están disponibles para configurar el tamaño del papel y la orientación en los PDFs?
Configura el tamaño del papel usando RenderingOptions.PaperSize (las opciones incluyen A4, Carta, Legal, etc.) y la orientación con RenderingOptions.PaperOrientation para Retrato o Paisaje. También se admiten tamaños personalizados en milímetros o pulgadas. Ver guía de tamaño de papel →
¿Puedo convertir páginas web autenticadas a PDF?
Sí. IronPDF admite cookies, encabezados HTTP personalizados y autenticación basada en formularios. Configura las cookies a través de ChromePdfRenderer.RenderingOptions.CustomCookies, o pasa encabezados de autenticación para autenticación basada en tokens. También se admite la autenticación Windows NTLM y Kerberos. Ver guía de cookies →
¿Puedo crear múltiples PDFs a partir de una plantilla HTML única en C#?
Sí, crea plantillas HTML con marcadores de posición, luego usa reemplazo de cadenas o bibliotecas de plantillado como Handlebars.NET. Sustituye los marcadores de posición con valores reales en tus datos iterados y genera PDFs usando RenderHtmlAsPdf.
¿Es posible asegurar mis PDFs generados con una contraseña?
Sí, puedes usar la propiedad SecuritySettings para configurar contraseñas de usuario y propietario, configurar permisos como imprimir y copiar, y aplicar cifrado AES256 con SecuritySettings.EncryptionAlgorithm. Ver guía de cifrado →
¿Puedo generar documentos compatibles con PDF/A desde HTML?
Sí. IronPDF admite los estándares PDF/A-1b, PDF/A-2b, PDF/A-3b y PDF/UA para cumplimiento de archivo y accesibilidad, lo cual la mayoría de los convertidores HTML a PDF no ofrecen. Ver guía PDF/A →
¿Cómo puedo optimizar el rendimiento para generar un gran volumen de PDFs?
Optimiza el rendimiento usando métodos asincrónicos como RenderHtmlAsPdfAsync para operaciones no bloqueantes. Reutiliza instancias de ChromePdfRenderer, procesa múltiples PDFs de forma concurrente utilizando Task.WhenAll, y asegúrate de tener recursos de servidor adecuados en un sistema de 64 bits. Ver guía asincrónica →
¿Cómo puedo combinar múltiples PDFs o incluir una página de portada en mi documento?
Usa el método estático PdfDocument.Merge para combinar múltiples PDFs. Genera tu página de portada por separado y combínala con tu documento principal para crear un PDF completo. Ver guía de combinación →
¿Puedo desplegar IronPDF en Azure, AWS, o Docker?
Sí. IronPDF funciona en Azure App Service, Azure Functions, AWS Lambda y contenedores Docker en Linux. Guías de configuración dedicadas e imágenes Docker están disponibles para cada plataforma. Ver guía de Azure → · Ver guía de AWS → · Ver guía de Docker →
Compatibilidad con .NET 10: ¿IronPDF admite .NET 10 de inmediato?
Sí — IronPDF es totalmente compatible con .NET 10. Según las notas de lanzamiento de IronPDF, la biblioteca está lista desde el primer día para proyectos .NET 10, sin necesidad de configuración adicional. Ya sea que estés utilizando aplicaciones web, de consola, de escritorio, o microservicios, IronPDF funciona "out of the box" con .NET 10.
¿Es IronPDF gratuito?
IronPDF ofrece una prueba gratuita de 30 días con funcionalidad completa y sin marcas de agua en el desarrollo. El uso en producción requiere una licencia comercial a partir de $999. Están disponibles los niveles Lite, Plus, Professional y Enterprise. Ver precios →
¿Cómo se compara la calidad de representación de esta biblioteca con otras opciones como wkhtmltopdf?
Esta biblioteca usa un motor de renderizado Chrome moderno para PDFs perfectos en píxeles, a diferencia del desactualizado motor WebKit de wkhtmltopdf. No requiere ejecutables de servidor, soporta JavaScript/CSS3 completo, recibe actualizaciones regulares y ofrece soporte profesional.
¿Por qué debería elegir esta biblioteca en lugar de PDFSharp para la conversión de HTML a PDF?
PDFSharp carece de conversión HTML a PDF integrada, requiriendo soluciones complicadas. Esta biblioteca ofrece conversión directa de HTML/URL/archivo con una API de alto nivel, soporte para tecnologías web modernas y actualizaciones regulares con soporte profesional. Ver comparación con PDFSharp →
¿Por qué es esta una mejor opción que iTextSharp para la conversión de HTML?
La versión gratuita de iTextSharp no admite la conversión nativa de HTML a PDF y tiene una API de bajo nivel compleja. Esta biblioteca proporciona una conversión de HTML sin problemas con una API intuitiva, soporte completo para CSS3/JavaScript, y sin restricciones de licencia AGPL. Ver comparación con iTextSharp →
¿Cómo se compara la calidad de renderizado de esta biblioteca con Aspose.PDF?
Esta biblioteca produce PDFs de calidad Chrome perfectamente pixelada, mientras que Aspose.PDF a menudo omite estilos y contenido dinámico. Aspose requiere descargas HTML manuales para la conversión de URL, pero esta biblioteca convierte URLs directamente con mayor precisión. Ver comparación con Aspose →
¿Por qué podría elegir esta biblioteca sobre Syncfusion PDF?
Si bien Syncfusion es capaz, el motor optimizado de Chrome de esta biblioteca funciona más rápido y maneja el contenido dinámico de manera más efectiva. Ofrece una API más sencilla y características adicionales como generación de OCR y código de barras. Ver comparación con Syncfusion →
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.