Convertir HTML a PDF en .NET Core usando C# con IronPDF
Generar PDFs de alta fidelidad directamente desde HTML es un requerimiento rutinario en aplicaciones modernas de .NET: informes, facturas y boletos necesitan una salida perfecta de píxeles que coincida con la interfaz de usuario web. IronPDF agiliza este flujo de trabajo al ofrecer una única API de C# para renderizar HTML, vistas Razor y sitios web completos en documentos PDF que cumplen con los estándares. Al final de esta guía, un desarrollador podrá convertir URLs, HTML sin procesar o vistas MVC en un proyecto ASP.NET Core y desplegar el mismo código en entornos de Windows, Linux, Docker o sin servidor.
Inicio rápido: Crear un PDF desde HTML en .NET Core
Convierte sin esfuerzo HTML a PDF en .NET Core usando la biblioteca IronPDF. Esta guía proporciona un ejemplo simple para comenzar rápidamente renderizando contenido HTML en un PDF de alta calidad con código mínimo. Perfecto para desarrolladores que buscan integrar la creación de PDF en sus aplicaciones con facilidad.
Empieza a crear PDF con NuGet ahora:
Instalar IronPDF con el gestor de paquetes NuGet
Copie y ejecute este fragmento de código.
var pdf = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello World</h1>");Despliegue para probar en su entorno real
Empieza a utilizar IronPDF en tu proyecto hoy mismo con una prueba gratuita
Flujo de trabajo mínimo (5 pasos)
- Instale el paquete NuGet
IronPdf - Convertir laURLde un sitio web con
RenderUrlAsPdf - Renderizar HTML sin procesar mediante
RenderizarHtmlAsPdf - Exportar una vista MVC a PDF
- Ajustar el tamaño del papel, los márgenes, los encabezados y los pies de página
Lista de inicio rápido
- Instalar –
Install-Package IronPdf - Renderizar una URL –
ChromePdfRenderer.RenderUrlAsPdf() - Renderizar HTML sin procesar –
ChromePdfRenderer.RenderHtmlAsPdf() - Exportar una vista Razor –
ChromePdfRenderer.RenderHtmlAsPdfAsync() - Ajustar la salida – aprovecha
ChromePdfRenderer.RenderingOptions
Qué cubre este tutorial
- Conversión de URL, cadena HTML y vista Razor
- Configuración de papel, márgenes y tipo de medios
- Despliegue multiplataforma (Windows, Linux, Docker)
- Postprocesamiento: combinar, añadir marcas de agua, proteger con contraseña y firmar digitalmente PDFs
- Ejemplo completo: aplicación MVC de reserva de boletos
Cómo empezar con IronPDF
Comience a usar IronPDF en su proyecto hoy con una prueba gratuita.
¿Cómo se instala la biblioteca PDF en .NET Core?
Instalar la biblioteca es una sola línea en cualquier proyecto .NET 8 y sigue siendo compatible con .NET 9 preview y el próximo lanzamiento de .NET 10. Usa la Consola del Administrador de Paquetes de NuGet y el administrador de paquetes resolverá automáticamente cada dependencia para los objetivos Windows, Linux, Docker y sin servidor.
PM> Install-Package IronPdf # .NET 8 LTS and higherPM> Install-Package IronPdf # .NET 8 LTS and higherdotnet add package IronPdf dentro de la carpeta de su proyecto.Una vez instalado, confirma que todo esté conectado convirtiendo cualquierURLpública:
// Program.cs — .NET 8 LTS
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a live website to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");
// Persist to disk
pdf.SaveAs("website-snapshot.pdf");// Program.cs — .NET 8 LTS
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a live website to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");
// Persist to disk
pdf.SaveAs("website-snapshot.pdf");' Program.cs — .NET 8 LTS
Imports IronPdf
Private renderer = New ChromePdfRenderer()
' Render a live website to PDF
Private PdfDocument As using
' Persist to disk
pdf.SaveAs("website-snapshot.pdf")Cómo funciona
ChromePdfRendererinicia una instancia Chromium aislada bajo el capó--no se requiere una instalación separada de Chrome.RenderUrlAsPdfcaptura el DOM completamente renderizado, incluyendo contenido impulsado por JavaScript, consultas de medios CSS y fuentes.- El
PdfDocumentresultante expone métodos auxiliares para combinar, proteger con contraseña o firmar digitalmente la salida--capacidades cubiertas más adelante en este tutorial.
Para más detalles sobre matices de despliegue (Azure App Service, AWS Lambda, Linux local), consulta la guía de instalación dedicada y las páginas de configuración avanzada de NuGet. Consejos internos de CI/CD para Docker y clústeres de K8s se cubren en mejores prácticas de despliegue en Docker.
¿Cómo puede un servicio .NET Core convertir laURLde un sitio web en PDF?
Una sola llamada al RenderUrlAsPdf es suficiente: pasa cualquierURLpúblicamente alcanzable y IronPDF devuelve un PDF completamente renderizado y que cumple con los estándares. El código a continuación está dirigido a .NET 8 LTS y se compila sin cambios en .NET 9 preview, así como en el próximo lanzamiento de .NET 10 en 2025.
Ejemplo paso a paso
// Program.cs — .NET 8 LTS-compatible
using IronPdf;
// 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// 2. Create a reusable renderer instance
var renderer = new ChromePdfRenderer
{
RenderingOptions =
{
// Force A4 portrait output and apply @media print styles
PaperSize = PdfPaperSize.A4,
CssMediaType = PdfCssMediaType.Print
}
};
// 3. Convert Microsoft Docs home page to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/");
// 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf");// Program.cs — .NET 8 LTS-compatible
using IronPdf;
// 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// 2. Create a reusable renderer instance
var renderer = new ChromePdfRenderer
{
RenderingOptions =
{
// Force A4 portrait output and apply @media print styles
PaperSize = PdfPaperSize.A4,
CssMediaType = PdfCssMediaType.Print
}
};
// 3. Convert Microsoft Docs home page to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/");
// 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf");' Program.cs — .NET 8 LTS-compatible
Imports IronPdf
' 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
' 2. Create a reusable renderer instance
Dim renderer = New ChromePdfRenderer With {
.RenderingOptions = {
PaperSize = PdfPaperSize.A4,
CssMediaType = PdfCssMediaType.Print
}
}
' 3. Convert Microsoft Docs home page to PDF
Using pdf As PdfDocument = renderer.RenderUrlAsPdf("https://learn.microsoft.com/")
' 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf")
End UsingPor qué funciona
ChromePdfRendererinicia una instancia de Chromium aislada--sin dependencia de sistema Chrome, manteniendo las imágenes de Docker ligeras.RenderUrlAsPdfespera a que el DOM y JavaScript terminen antes de hacer la captura, de modo que las aplicaciones de página única se renderizan correctamente.- Establecer
CssMediaTypeen Print indica al motor que use reglas específicas de impresión, coincidiendo con la salida Imprimir → Guardar como PDF de un navegador. - El
PdfDocumentresultante puede cifrarse, firmarse digitalmente, combinarse o rasterizarse--capacidades cubiertas en secciones posteriores.
renderer.LoggingOptions.DebugMode = true y siga la headless-Chrome debug guide para inspeccionar en vivo DevTools durante el renderizado.Recursos relacionados
- Referencia API -
ChromePdfRenderer.RenderUrlAsPdf - Referencia API -
PdfDocument.SaveAs - Tutorial - Despliegue de IronPDF en contenedores Docker
¿Cómo convierto HTML sin formato en un PDF en .NET Core?
Pasar una cadena HTML—o el marcado renderizado de una vista Razor—a ChromePdfRenderer.RenderHtmlAsPdf produce instantáneamente un PDF que cumple con los estándares. El método inicia el motor Chromium integrado de IronPDF, por lo que no se requiere la instalación de un navegador externo ni la dependencia de WebView. El mismo código que se muestra a continuación se compila en .NET 8 LTS hoy y sigue siendo compatible con .NET 9 y el lanzamiento programado de .NET 10 en noviembre de 2025.
Ejemplo - generar un PDF a partir de un fragmento HTML
// Program.cs — compatible with .NET 8 and newer
using IronPdf;
// Sample HTML fragment (could also be read from a file, Razor view, or CMS)
const string html = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Quarterly Report</title>
<style>
body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
header { margin-bottom:2rem; }
h1 { color:#3056d3; }
table { width:100%; border-collapse:collapse; margin-top:1rem; }
th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
tr:nth-child(even){ background-color:#f8f9fa; }
</style>
</head>
<body>
<header><h1>Q2 Revenue Summary</h1></header>
<table>
<thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
<tbody>
<tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
<tr><td>IronOCR for .NET</td><td>890,000</td></tr>
<tr><td>IronXL for .NET</td><td>610,000</td></tr>
</tbody>
</table>
</body>
</html>
""";
// 1. Create a renderer once and reuse it across conversions
var renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A4, // ISO-standard paper size
PaperOrientation = PdfPaperOrientation.Portrait,
CssMediaType = PdfCssMediaType.Screen, // Respect on-screen CSS
RenderDelay = 100, // Wait 100 ms for JS/animations
FallbackEncoding = "utf-8" // Handle non-ASCII correctly
}
};
// 2. Render the HTML fragment
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
// 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf");// Program.cs — compatible with .NET 8 and newer
using IronPdf;
// Sample HTML fragment (could also be read from a file, Razor view, or CMS)
const string html = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Quarterly Report</title>
<style>
body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
header { margin-bottom:2rem; }
h1 { color:#3056d3; }
table { width:100%; border-collapse:collapse; margin-top:1rem; }
th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
tr:nth-child(even){ background-color:#f8f9fa; }
</style>
</head>
<body>
<header><h1>Q2 Revenue Summary</h1></header>
<table>
<thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
<tbody>
<tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
<tr><td>IronOCR for .NET</td><td>890,000</td></tr>
<tr><td>IronXL for .NET</td><td>610,000</td></tr>
</tbody>
</table>
</body>
</html>
""";
// 1. Create a renderer once and reuse it across conversions
var renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A4, // ISO-standard paper size
PaperOrientation = PdfPaperOrientation.Portrait,
CssMediaType = PdfCssMediaType.Screen, // Respect on-screen CSS
RenderDelay = 100, // Wait 100 ms for JS/animations
FallbackEncoding = "utf-8" // Handle non-ASCII correctly
}
};
// 2. Render the HTML fragment
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
// 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf");' Program.cs — compatible with .NET 8 and newer
Imports IronPdf
' Sample HTML fragment (could also be read from a file, Razor view, or CMS)
Private Const html As String = "<!DOCTYPE html>
<html lang=""en"">
<head>
<meta charset=""utf-8"">
<title>Quarterly Report</title>
<style>
body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
header { margin-bottom:2rem; }
h1 { color:#3056d3; }
table { width:100%; border-collapse:collapse; margin-top:1rem; }
th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
tr:nth-child(even){ background-color:#f8f9fa; }
</style>
</head>
<body>
<header><h1>Q2 Revenue Summary</h1></header>
<table>
<thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
<tbody>
<tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
<tr><td>IronOCR for .NET</td><td>890,000</td></tr>
<tr><td>IronXL for .NET</td><td>610,000</td></tr>
</tbody>
</table>
</body>
</html>"
' 1. Create a renderer once and reuse it across conversions
Private renderer = New ChromePdfRenderer With {
.RenderingOptions = {
PaperSize = PdfPaperSize.A4,
PaperOrientation = PdfPaperOrientation.Portrait,
CssMediaType = PdfCssMediaType.Screen,
RenderDelay = 100,
FallbackEncoding = "utf-8"
}
}
' 2. Render the HTML fragment
Private PdfDocument As using
' 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf")Qué demuestra el código
- Chromium integrado -- IronPDF incorpora el motor Chromium, garantizando paridad HTML5, CSS3 y JavaScript con navegadores modernos.
- Dependencia única -- Una instalación ligera de NuGet cubre Windows, Linux, Docker y Azure/AWS sin bibliotecas de sistema adicionales.
- Opciones de renderizado --
PaperSize,CssMediaType, yRenderDelayreflejan la configuración de impresión del navegador para que los PDFs coincidan con los diseños en pantalla. - Objetivo a prueba de futuro -- La superficie de la API es la misma en .NET 8, .NET 9 STS y el próximo .NET 10, por lo que el mantenimiento a largo plazo es mínimo.
- Ganchos de posprocesamiento --
PdfDocumentexpone ayudantes para la fusión, la protección por contraseña y firmas digitales, todos ellos tratados más adelante en esta guía.
Más lectura: ve el paso a paso tutorial de HTML-cadena-a-PDF y la documentación completa de la API de ChromePdfRenderer.
¿Cómo se puede exportar una vista MVC de ASP .NET Core a PDF?
IronPDF renderiza una vista Razor completamente procesada ( .cshtml ) de la misma manera que lo haría un navegador y transmite el resultado como un PdfDocument. El flujo de trabajo a continuación mantiene limpia la lógica del controlador, no requiere complementos de navegador y funciona en .NET 8 LTS, .NET 9 preview, y el lanzamiento programado de .NET 10 en noviembre de 2025.
Ejemplo de controlador de extremo a extremo
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models; // TicketViewModel
public class TicketsController : Controller
{
private readonly ChromePdfRenderer _renderer;
public TicketsController()
{
_renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A5, // Compact ticket size
PaperOrientation = PdfPdfOrientation.Portrait,
FitToPaperWidth = true,
CssMediaType = PdfCssMediaType.Print,
Margins = new PdfMargins(5, 10, 5, 10) // mm
}
};
}
// GET /Tickets/Print/42
public async Task<IActionResult> Print(int id)
{
TicketViewModel vm = await _service.GetTicketAsync(id);
// 1. Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm);
// 2. Convert HTML → PDF
using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);
// 3. Stream back as a file
return File(pdf.BinaryData, "application/pdf",
$"ticket-{id}.pdf");
}
}// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models; // TicketViewModel
public class TicketsController : Controller
{
private readonly ChromePdfRenderer _renderer;
public TicketsController()
{
_renderer = new ChromePdfRenderer
{
RenderingOptions =
{
PaperSize = PdfPaperSize.A5, // Compact ticket size
PaperOrientation = PdfPdfOrientation.Portrait,
FitToPaperWidth = true,
CssMediaType = PdfCssMediaType.Print,
Margins = new PdfMargins(5, 10, 5, 10) // mm
}
};
}
// GET /Tickets/Print/42
public async Task<IActionResult> Print(int id)
{
TicketViewModel vm = await _service.GetTicketAsync(id);
// 1. Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderViewAsync(
HttpContext, "~/Views/Tickets/Print.cshtml", vm);
// 2. Convert HTML → PDF
using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);
// 3. Stream back as a file
return File(pdf.BinaryData, "application/pdf",
$"ticket-{id}.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comQué ilustra este código
- No hay archivos temporales -- la vista Razor se representa en memoria, luego se pasa directamente a
RenderHtmlAsPdf, evitando I/O de disco y condiciones de carrera en carpetas temporales. - Salida del tamaño de boletos --
PaperSize = A5y márgenes estrechos mantienen los boletos para imprimir en casa compactos. - Estilos de impresión consistentes --
CssMediaType = Printaplica las mismas reglas de CSS@media printque utilizan los navegadores. - Transmisión binaria --
pdf.BinaryDatatransmite el documento sin tocar el sistema de archivos; ideal para puntos finales de API y funciones Lambda. - Renderizador reutilizable --ChromePdfRendererse instancia una vez por controlador y se reutiliza, minimizando el costo inicial. - Renderer reutilizable --
ChromePdfRendererse instancia una vez por controlador, luego se reutiliza, minimizando el gasto en la generación de procesos.
Margenes, Cabecera, Pie de página, Marca de agua
Próximo paso: agregar cifrado, firmas digitales o fusionar múltiples boletos en un solo archivo. Vea el ejemplo de fusión y el tutorial de firma digital.
¿Cómo puedo ajustar el tamaño del papel, los márgenes, los encabezados, las marcas de agua y la seguridad antes de la renderización?
IronPDF expone un único objeto ChromePdfRenderOptions que controla todos los aspectos de la salida: dimensiones del papel, orientación, encabezados y pies de página, temporización de JavaScript, marcas de agua, cifrado y firmas digitales, todo sin plugins adicionales del navegador.
Muestra de código - aplicar varias opciones a la vez
// AdvancedOptions.cs — .NET 8 compatible
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure everything in one place
renderer.RenderingOptions = new ChromePdfRenderOptions
{
// 1. Page layout
PaperSize = PdfPaperSize.A4, // ISO size
PaperOrientation = PdfPdfOrientation.Portrait,
Margins = new PdfMargins { Top = 20, Bottom = 25, Left = 15, Right = 15 }, // mm
// 2. Timing & media
CssMediaType = PdfCssMediaType.Print, // Respect @media print
EnableJavaScript = true,
RenderDelay = 200, // Wait 200 ms for animations
// 3. Headers & footers (HTML gives full design freedom)
HtmlHeader = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
HtmlFooter = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",
// 4. Watermark
Watermark = new HtmlStamp
{
HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
VerticalAlignment = VerticalAlignment.Center,
HorizontalAlignment = HorizontalAlignment.Center
},
// 5. Security
SecurityOptions = new PdfSecurityOptions
{
OwnerPassword = "StrongOwnerPwd!",
UserPassword = "ReadOnly",
AllowUserPrinting = false,
AllowUserCopyPasteContent = false
}
};
// Render any HTML
using PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>");
// Digitally sign with a PFX certificate (optional)
pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval");
// Save
pdf.SaveAs("advanced-options-demo.pdf");// AdvancedOptions.cs — .NET 8 compatible
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure everything in one place
renderer.RenderingOptions = new ChromePdfRenderOptions
{
// 1. Page layout
PaperSize = PdfPaperSize.A4, // ISO size
PaperOrientation = PdfPdfOrientation.Portrait,
Margins = new PdfMargins { Top = 20, Bottom = 25, Left = 15, Right = 15 }, // mm
// 2. Timing & media
CssMediaType = PdfCssMediaType.Print, // Respect @media print
EnableJavaScript = true,
RenderDelay = 200, // Wait 200 ms for animations
// 3. Headers & footers (HTML gives full design freedom)
HtmlHeader = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
HtmlFooter = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",
// 4. Watermark
Watermark = new HtmlStamp
{
HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
VerticalAlignment = VerticalAlignment.Center,
HorizontalAlignment = HorizontalAlignment.Center
},
// 5. Security
SecurityOptions = new PdfSecurityOptions
{
OwnerPassword = "StrongOwnerPwd!",
UserPassword = "ReadOnly",
AllowUserPrinting = false,
AllowUserCopyPasteContent = false
}
};
// Render any HTML
using PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>");
// Digitally sign with a PFX certificate (optional)
pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval");
// Save
pdf.SaveAs("advanced-options-demo.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comPor qué son importantes estas opciones
- Encabezados y pies de HTML soportan tokens Razor, CSS, y JavaScript--útil para números de página dinámicos o para branding.
HtmlStamppermite que una sola línea cree marcas de agua de marca con control total de HTML + CSS.- Opciones de seguridad permiten encriptación de 128 bits, contraseñas propietario/usuario y permisos granulares sin herramientas externas.
- Firmas digitales añaden un sello criptográfico directamente en el código, manteniendo la autenticidad legal y la evidencia de manipulación.
- Ayudantes de extracción como
ExtractAllTextyExtractAllImagesinvierten el proceso cuando se requiere análisis. - Ayudantes de extracción como
ExtractAllTextyExtractAllImagesinvierten el proceso cuando se requiere análisis.
Referencia rápida - Ajustes populares
`PaperSize`, `PaperOrientation`, `Margins`, `CssMediaType`, `RenderDelay`
PaperSize, PaperOrientation, Margins, CssMediaType, RenderDelay
`HtmlHeader`, `HtmlFooter`, marcadores Razor, tokens de número de página
HtmlHeader, HtmlFooter, marcadores de posición dinámicos Razor, tokens de número de página
`Watermark`, `HtmlStamp`, opacidad, alineación
Watermark, HtmlStamp, opacidad, alineación
`SecurityOptions`, `SignAndStamp`, contraseñas propietario/usuario, AES 128 bits, sellado de certificado
SecurityOptions, SignAndStamp, contraseñas de propietario/usuario, sellado de certificados
Próximas tareas: fusionar múltiples PDFs, extraer texto e imágenes, y desplegar en Docker o sin servidor. ## ¿Cómo puedo desplegar código de generación de PDF a Docker en Linux y Windows?
¿Cómo puedo implementar código de generación de PDF en Docker en Linux y Windows?
La clave es copiar los binarios publicados en una imagen de tiempo de ejecución delgada y, en Linux, agregar las dos bibliotecas nativas que IronPDF requiere (libnss3 y libatk1.0-0). La clave es copiar los binarios publicados en una imagen de tiempo de ejecución delgada y, en Linux, agregar las dos bibliotecas nativas que IronPDF requiere (libnss3 y libatk1.0-0).
Archivo Docker multietapa (Ubuntu 22.04)
####### ---------- stage 1 ----------
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyPdfApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
####### ---------- stage 2 ----------
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy
######## Install two native libs required by Chromium
RUN apt-get update && \
apt-get install -y --no-install-recommends libnss3 libatk1.0-0 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyPdfApp.dll"]mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2022-no se necesitan paquetes adicionales porque las DLL de Chromium están incluidas.Script de validación de principio a fin
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.comdocker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com- La acción de la API llama internamente a
ChromePdfRenderer.RenderUrlAsPdfigual que en la Sección2. - La huella de memoria se mantiene por debajo de 200 MB incluso durante grandes renderizados.ConsejosConsejo de resolución de problemas: Si los registros del contenedor indican un error "libnss3.so no encontrado", confirma que
libnss3ylibatk1.0-0estén presentes.
libnss3 como libatk1.0-0 están presentes. Las imágenes alpinas no son compatibles porque la biblioteca musl C carece de los símbolos necesarios.Recursos internos
- Tutorial - Despliegue de IronPDF en contenedores Docker
- Cómo - Ejecutar IronPDF en Azure App Service Linux
- Referencia API -
ChromePdfRendererclass
¿Cómo puedo abrir, combinar, poner marcas de agua y extraer contenido de PDF existentes en .NET Core?
IronPDF trata cada PDF—ya sea generado por IronPDF, Adobe® Acrobat o herramientas de terceros—como un objeto PdfDocument de primera clase que puede abrirse, editarse, asegurarse y re-guardarse sin pérdida de calidad. La misma superficie de API funciona actualmente en .NET 8 LTS y compila sin cambios en .NET 9 preview y en la próxima versión .NET 10.
Muestra unificada - abrir → fusionar → marca de agua → extraer
// ManipulateExistingPdf.cs — .NET 8 LTS compatible
using IronPdf;
using System.Linq;
// Step 1: Open two existing files (password-protected PDFs are supported)
PdfDocument invoice = PdfDocument.FromFile("invoice.pdf", "ReadOnly"); // open with user pwd
PdfDocument tAndCs = PdfDocument.FromFile("terms.pdf"); // no pwd required
// Step 2: Merge them (invoice pages first, then T&Cs)
PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs); // 1-liner merge
// Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp(
"<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);"
+ "width:100%;text-align:center;'>CONFIDENTIAL</div>",
verticalAlignment : VerticalAlignment.Center,
horizontalAlignment : HorizontalAlignment.Center);
// Step 4: Extract all text and the first image for audit purposes
string fullText = mergedPdf.ExtractAllText();
var image = mergedPdf.ExtractAllImages().FirstOrDefault();
// Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf");// ManipulateExistingPdf.cs — .NET 8 LTS compatible
using IronPdf;
using System.Linq;
// Step 1: Open two existing files (password-protected PDFs are supported)
PdfDocument invoice = PdfDocument.FromFile("invoice.pdf", "ReadOnly"); // open with user pwd
PdfDocument tAndCs = PdfDocument.FromFile("terms.pdf"); // no pwd required
// Step 2: Merge them (invoice pages first, then T&Cs)
PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs); // 1-liner merge
// Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp(
"<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);"
+ "width:100%;text-align:center;'>CONFIDENTIAL</div>",
verticalAlignment : VerticalAlignment.Center,
horizontalAlignment : HorizontalAlignment.Center);
// Step 4: Extract all text and the first image for audit purposes
string fullText = mergedPdf.ExtractAllText();
var image = mergedPdf.ExtractAllImages().FirstOrDefault();
// Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf");' ManipulateExistingPdf.cs — .NET 8 LTS compatible
Imports IronPdf
Imports System.Linq
' Step 1: Open two existing files (password-protected PDFs are supported)
Private invoice As PdfDocument = PdfDocument.FromFile("invoice.pdf", "ReadOnly") ' open with user pwd
Private tAndCs As PdfDocument = PdfDocument.FromFile("terms.pdf") ' no pwd required
' Step 2: Merge them (invoice pages first, then T&Cs)
Private mergedPdf As PdfDocument = PdfDocument.Merge(invoice, tAndCs) ' 1-liner merge
' Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp("<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);" & "width:100%;text-align:center;'>CONFIDENTIAL</div>", verticalAlignment := VerticalAlignment.Center, horizontalAlignment := HorizontalAlignment.Center)
' Step 4: Extract all text and the first image for audit purposes
Dim fullText As String = mergedPdf.ExtractAllText()
Dim image = mergedPdf.ExtractAllImages().FirstOrDefault()
' Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf")Por qué es importante
- Marca de agua –
ApplyStamp(aliasHtmlStamp) incrusta superposiciones HTML/CSS totalmente estilizadas--logo, código QR, o texto diagonal--en páginas seleccionadas sin rasterización. - Extracción de contenido –
ExtractAllTextyExtractAllImagesextraen texto UTF-8 en bruto o flujos de imágenes binarias para archivado posterior o pipelines de IA. - Extracción de contenido -
ExtractAllTextyExtractAllImages - Cumplimiento de estándares abiertos – IronPDF conserva la estructura original del PDF (fuentes, capas, metadatos XMP) para que la salida siga siendo compatible con Adobe® Reader y otros visualizadores ISO 32000-1.
- A prueba de futuro – La API evita ensamblajes de interoperabilidad y llamadas Win32 GDI, por lo que el código se ejecuta sin cambios en Windows, Linux, Docker y próximas SKUs sin servidor en .NET 10.
¿Necesitas dividir, rotar o eliminar páginas? Consulta el tutorial completo de edición de nivel de página para operaciones granulares.
¿Necesita dividir, rotar o eliminar páginas? Vea el tutorial de edición a nivel de página para operaciones detalladas.
¿Cómo se pueden cifrar y firmar digitalmente los PDF en .NET Core?
Ambas APIs residen en el mismo objeto PdfDocument, por lo que el flujo de trabajo es idéntico en .NET 8 LTS hoy y se compila sin cambios en la vista previa de .NET 9 y el próximo lanzamiento de .NET 10. Ambas API residen en el mismo PdfDocument objeto, por lo que el flujo de trabajo es idéntico en .NET 8 LTS hoy y compila sin cambios en la vista previa de .NET 9 y la próxima versión de .NET 10.
Ejemplo - aplicar AES de 256 bits, bloquear los derechos de impresión y añadir una firma visible
// SecureAndSign.cs — .NET 8 LTS compatible
using IronPdf;
// Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf");
// Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = new PdfSecuritySettings
{
EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256Bit,
OwnerPassword = "IronAdmin!2025",
UserPassword = "ReadOnly",
AllowUserPrinting = PdfPrintSecurity.Disabled,
AllowUserCopyPasteContent = false,
AllowUserAnnotations = false
};
// Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(
certificatePath : "./certs/ironsoftware.pfx",
authority : "Iron Software Ltd.",
location : "Chicago, IL",
reason : "Final approval"
);
// Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf");// SecureAndSign.cs — .NET 8 LTS compatible
using IronPdf;
// Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf");
// Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = new PdfSecuritySettings
{
EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256Bit,
OwnerPassword = "IronAdmin!2025",
UserPassword = "ReadOnly",
AllowUserPrinting = PdfPrintSecurity.Disabled,
AllowUserCopyPasteContent = false,
AllowUserAnnotations = false
};
// Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(
certificatePath : "./certs/ironsoftware.pfx",
authority : "Iron Software Ltd.",
location : "Chicago, IL",
reason : "Final approval"
);
// Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf");' SecureAndSign.cs — .NET 8 LTS compatible
Imports IronPdf
' Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
Private pdf As PdfDocument = PdfDocument.FromFile("financial-report.pdf")
' Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = New PdfSecuritySettings With {
.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256Bit,
.OwnerPassword = "IronAdmin!2025",
.UserPassword = "ReadOnly",
.AllowUserPrinting = PdfPrintSecurity.Disabled,
.AllowUserCopyPasteContent = False,
.AllowUserAnnotations = False
}
' Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(certificatePath := "./certs/ironsoftware.pfx", authority := "Iron Software Ltd.", location := "Chicago, IL", reason := "Final approval")
' Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf")Entre bastidores
- Granularidad de permisos -- propiedades como
AllowUserPrintingalternan derechos por acción;yAllowUserFormData - Granularidad de permisos -- propiedades como
AllowUserPrintingyAllowUserFormDataalternan derechos por acción; - Encriptación AES-256 - IronPDF envuelve la carga con claves AES aprobadas por el NIST, bloqueando accesos no autorizados. - API de ventanilla única -- tanto el cifrado como la firma modifican la misma instancia
PdfDocument, evitando múltiples pasadas de archivos y preservando las fuentes internas, capas y metadatos.ConsejosConsejo de resolución de problemas: si Adobe Reader informa "firma inválida", asegúrate de que el PFX contenga un certificado raíz de confianza y que las cadenas dereason/locationestén limpias de ASCII.
reason/location están limpias de ASCII.Configuraciones básicas de seguridad
`PdfDocument.SignAndStamp` — ruta PFX, autoridad, ubicación, razón, marca de tiempo
PdfDocument.SignAndStamp - Ruta PFX, autoridad, ubicación, motivo, marca de tiempo
Recursos internos para profundizar
- Tutorial - Proteger un PDF con contraseña
- Ejemplo - Firmar digitalmente un PDF
- Referencia API -
PdfSecuritySettings
¿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 renderizados por lotes, habilitando el multi-threading y recortando la sobrecarga de Chrome sin cabeza. ### 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 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+
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+
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)ChromePdfRendereres a prueba de hilos; -Parallel.ForEachsatura cada núcleo de CPU;Parallel.ForEachsatura cada núcleo de CPU; en los servidores típicos, el rendimiento aumenta entre 4 y 6 veces en comparación con un bucle de un solo hilo.- Si las solicitudes de ASP.NET se acumulan, mueva los renderizados pesados a un servicio de fondo alojado o a una cola de mensajes para mantener bajos los tiempos de respuesta.
2. Recortar el coste de inicio de Chrome
La agrupación ayuda, y contenedores Linux deben incluir dos bibliotecas nativas: La falta de bibliotecas se manifiesta como el error "libnss3.so no encontrado" en registros de Docker.
RUN apt-get update && \
apt-get install -y --no-install-recommends libnss3 libatk1.0-0Missing either library manifests as a libnss3.so not found error in Docker logs.
Recommended Chrome flags (automatically applied by IronPDF) include --disable-gpu and --no-sandbox to reduce memory and root-user issues in containers.
3. Esperar a que JavaScript se retrase con RenderDelay o WaitFor
Consulta el Tutorial de espera para promesas personalizadas y sondeo de DOM.
renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";renderer.RenderingOptions.RenderDelay = 200 ' ms
' OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";Consulte el tutorial WaitFor dedicado para promesas personalizadas y sondeo del DOM.
4. Habilitar el registro de depuración para una solicitud
renderer.LoggingOptions.DebugMode = true;
renderer.LoggingOptions.LogsToConsole = true;
renderer.LoggingOptions.LogFilePath = "./logs/ironpdf-debug.log";renderer.LoggingOptions.DebugMode = true;
renderer.LoggingOptions.LogsToConsole = true;
renderer.LoggingOptions.LogFilePath = "./logs/ironpdf-debug.log";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, cree un PDF de plantilla con marcadores de posición como [[name]] y realice un reemplazo de texto en lugar de reconstruir HTML complejo. ### Lista de verificación rápida de ajuste
Lista de comprobación de ajuste rápido
Parallel.ForEach, async/await, reutilización de un único ChromePdfRenderer
Use aspnet:8.0-jammy; instale libnss3 + libatk1.0-0; flags --no-sandbox, --disable-gpu
RenderDelay, WaitFor(), línea de tiempo de registro DevTools para hidrataciones lentas de SPA
Lecturas adicionales
- Cómo - Generar PDFs con async / multithreading
- Solución de problemas - [Centro de asistencia al rendimiento](/resolución de problemas/ironpdf-asistencia al rendimiento/)
- Ejemplo - Demostración de renderizado por hilos
¿Dónde puedo descargar una versión de prueba gratuita, elegir una licencia y encontrar asistencia experta? {#anchor-10-resources}
Un clave de prueba de 30 días se emite al instante desde el formulario Iniciar prueba gratuita y desbloquea todas las funciones, incluyendo HTML-a-PDF, firmas digitales y cifrado, sin marcas de agua.
Después de evaluar la biblioteca, elija una licencia desarrollador, despliegue o empresa perpetua; cada plan incluye actualizaciones menores gratuitas, derechos de uso para desarrollo/staging/producción y una garantía de devolución de dinero de 30 días. Aplicar la clave es una línea de código (IronPdf.License.LicenseKey = "SU-CLAVE";) y puede ser automatizado en tuberías de CI/CD.
Documentación completa—guías de inicio rápido, referencia API y videos tutoriales—disponibles en el portal de documentos y se actualiza con cada lanzamiento de .NET.
Las preguntas de ingeniería reciben respuestas en un día hábil a través de chat en vivo, correo electrónico o teléfono del equipo de soporte con sede en Chicago.
Las preguntas frecuentes sobre ajuste de rendimiento y despliegue se agrupan en el Centro de Asistencia de Rendimiento.
Enlaces rápidos
| Recurso | URL | Por qué importa |
|---|---|---|
| Obtenga una clave de prueba de 30 días | https://ironpdf.com/demos/ | Desbloquea todas las funciones sin marcas de agua |
| Licencias y precios | https://ironpdf.com/licensing/ | Planes perpetuos o de suscripción; Iron Suite agrupa 10 bibliotecas |
| Referencia API | https://ironpdf.com/object-reference/api/ | Documentación completa de clases, por ejemplo ChromePdfRenderer |
| Portal de documentos | https://ironpdf.com/docs/ | Guías, tutoriales, proyectos de muestra |
| Asistencia de rendimiento | https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ | Consejos de optimización y escalabilidad |
| Contactar soporte | [https://Iron Software.com/contact-us/](https://Iron Software.com/contact-us/) | Chat en directo, correo electrónico, asistencia telefónica |
Siguientes pasos
- Clonar el repositorio de muestra que demuestra todas las funciones principales, desde el renderizado de vistas MVC hasta el cifrado AES-256.
- Conecte la clave de prueba en una solución existente y ejecute las pruebas unitarias para validar la compatibilidad entre plataformas.
- Reserve una demostración en vivo con el equipo de ingeniería para recomendaciones específicas del proyecto.
Con estos recursos en mano, cualquier equipo de .NET puede enviar PDFs perfectos a producción—localmente, en Docker o sin servidor—en un solo sprint.
Preguntas Frecuentes
¿Cómo puedo convertir HTML a PDF en .NET Core?
Puedes convertir HTML a PDF en .NET Core usando la biblioteca IronPDF. Primero, instala el paquete NuGet de IronPDF, luego crea una instancia de ChromePdfRenderer. Usa el método RenderHtmlAsPdf para convertir cadenas HTML en PDFs.
¿Cómo convierto un URL de sitio web a un documento PDF?
Para convertir un URL de sitio web a un documento PDF, instala el paquete NuGet de IronPDF, crea una instancia de ChromePdfRenderer, y usa el método RenderUrlAsPdf para renderizar el URL en un PDF. El resultado se puede guardar usando el método SaveAs.
¿Cuál es la mejor manera de convertir vistas de Razor a PDFs?
La mejor manera de convertir vistas de Razor a PDFs es usando IronPDF. Primero, renderiza la vista Razor a una cadena HTML, luego pasa esta cadena al método RenderHtmlAsPdf para crear un documento PDF.
¿Cómo puedo mejorar la seguridad de mis documentos PDF?
Mejora la seguridad de PDF usando IronPDF aplicando cifrado AES-256, estableciendo contraseñas y controlando permisos de usuario. Configura estas opciones a través de la propiedad SecuritySettings para restringir acciones como impresión y edición.
¿Qué opciones están disponibles para personalizar el renderizado de PDF?
IronPDF proporciona varias opciones de renderización a través de la clase ChromePdfRenderOptions, incluidas configuraciones de tamaño de papel, orientación, márgenes y aplicación de tipos de medios CSS. También puedes agregar encabezados, pies de página, y marcas de agua para una salida de documentos personalizada.
¿Cómo implemento una aplicación de generación de PDF en un contenedor Docker?
Para implementar una aplicación de generación de PDF en un contenedor Docker, configura dependencias de Linux en tu Dockerfile y establece permisos de usuario. Utiliza IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig para la gestión automática de dependencias.
¿Cómo puedo agregar marcas de agua a un PDF usando C#?
Puedes agregar marcas de agua a PDFs usando IronPDF utilizando la propiedad Watermark con objetos HtmlStamp. Para opciones avanzadas, la clase HtmlStamper permite un posicionamiento personalizado y efectos de transparencia.
¿Puedo agregar firmas digitales a documentos PDF?
Sí, puedes agregar firmas digitales a PDFs usando la clase PdfSignature de IronPDF. Usa el método Sign en un PdfDocument y proporciona un archivo de certificado para asegurar la integridad y autenticidad del documento.
¿Cómo puedo optimizar el rendimiento de generación de PDFs en .NET Core?
Optimiza el rendimiento de generación de PDFs reutilizando una instancia segura para hilos de ChromePdfRenderer, habilitando multi-threading y eliminando banderas innecesarias de inicio de Chrome sin cabeza. Estas prácticas ayudan a mejorar la eficiencia de tu aplicación.
¿Funciona el ejemplo de HTML a PDF de .NET Core en este tutorial con .NET 10?
Sí. IronPDF es totalmente compatible con .NET 10, por lo que puedes usar el ejemplo de HTML a PDF de ChromePdfRenderer de este tutorial en proyectos de .NET 10 sin cambiar el código principal. La principal diferencia es que debes orientar a .NET 10 al crear el proyecto y luego instalar el paquete más reciente de IronPdf desde NuGet para generar PDFs perfectos a partir de HTML, vistas Razor o URLs.







