Convertir una página HTML a un documento PDF en C# es una tarea común, que se usa a menudo para crear facturas, informes, contratos y otros documentos comerciales a partir de plantillas HTML. Convertir una página HTML a un documento PDF en C# también es esencial para crear documentos estáticos, portátiles y listos para imprimir a partir de contenido web dinámico.
El proceso de convertir una página HTML a un documento PDF implica los siguientes pasos:
- Abrir el archivo HTML fuente y analizar el código de la página HTML.
- Obtener los archivos CSS y JS utilizados en la página HTML.
- Analizar los estilos CSS en los archivos CSS.
- Analizar el código JavaScript en los archivos JS.
- Ejecutar el código JavaScript y obtener el código de la página HTML resultante.
- Crear un nuevo documento PDF.
- Convertir los gráficos rasterizados y vectoriales de la página HTML (incluidos los estilos CSS y la transparencia) a gráficos en la página PDF y agregar los gráficos al documento PDF resultante.
- Convertir el texto de la página HTML (incluidos los estilos CSS) a texto en la página PDF y agregar el texto al documento PDF resultante.
- Guarde el documento PDF creado en un archivo.
Especificación del estándar HTML5 (
https://html.spec.whatwg.org/print.pdf) contiene 1553 páginas.
Especificación del estándar CSS2 (
https://www.w3.org/TR/CSS22/css2.pdf) contiene 426 páginas.
Especificación del estándar JavaScript (
https://ecma-international.org/wp-content/uploads/ECMA-262_16th_edition_june_2025.pdf) contiene 835 páginas.
Los pasos para convertir HTML a PDF e información sobre las especificaciones de HTML5, CSS2 y JavaScript se proporcionan arriba para dejar claro que, en general, convertir HTML a PDF es una tarea muy compleja si se implementa desde cero.
Al mismo tiempo, esta tarea compleja ya está implementada en los navegadores web modernos, que renderizan páginas HTML perfectamente y pueden guardar la página HTML renderizada en un archivo PDF. Por lo tanto, surge una pregunta razonable: ¿es posible usar un navegador web en una aplicación C# para convertir una página HTML a un documento PDF?
En este artículo, veremos cómo convertir una página HTML de cualquier complejidad a un documento PDF en una aplicación C# de forma totalmente gratuita y con la máxima calidad usando Chromium.
Chromium es un proyecto de navegador web de código abierto que se utiliza principalmente como base para la mayoría de los navegadores web modernos, incluidos Google Chrome, Microsoft Edge, Opera y otros. Está diseñado teniendo en cuenta la velocidad, la seguridad y la estabilidad, y cuenta con importantes contribuciones de desarrolladores de Google, Microsoft y otras empresas.
Convertir una página HTML a un documento PDF en C# usando la línea de comandos de Chrome
La forma más sencilla de convertir una página HTML a un documento PDF es ejecutar el siguiente comando de Chrome desde la línea de comandos:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --disable-gpu —run-all-compositor-stages-before-draw --no-margins --printBackground=true --no-pdf-header-footer --print-to-pdf="D:\result.pdf" "https://www.vintasoft.com/index.html"
Aquí hay una breve descripción de los parámetros utilizados en la línea de comandos de Chrome:
- --headless: especifica que Chrome debe ejecutarse sin una interfaz gráfica.
- --disable-gpu: especifica que la GPU debe estar deshabilitada al renderizar una página HTML.Este parámetro es necesario para la compatibilidad con versiones anteriores de Chrome.
- --run-all-compositor-stages-before-draw – especifica que todas las etapas de renderizado y composición deben completarse antes de que se renderice la página HTML.
- --no-margins – especifica que la página HTML debe renderizarse sin márgenes.
- --printBackground – especifica que la página HTML debe contener gráficos de fondo.
- --no-pdf-header-footer – especifica que el documento PDF generado no debe contener un encabezado/pie de página con información del documento.
- --print-to-pdf – especifica la ruta al archivo PDF guardado. La ruta debe ser absoluta.
El comando anterior se puede ejecutar desde la línea de comandos de Windows/Linux/macOS o desde código C#.
Aquí hay un código C# que demuestra cómo convertir una página HTML a un documento PDF en una aplicación de consola .NET usando Chrome:
using System.Diagnostics;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
string chromePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
string sourceUrl = "https://www.vintasoft.com/index.html";
string resultPdfFilePath = @"D:\result.pdf";
string chromeArgsTemplate =
"--headless --no-pdf-header-footer --no-margins --disable-gpu --run-all-compositor-stages-before-draw --printBackground=true --print-to-pdf=\"{0}\" {1}";
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = chromePath,
Arguments = string.Format(chromeArgsTemplate, resultPdfFilePath, sourceUrl),
UseShellExecute = false,
CreateNoWindow = false
};
using (Process process = Process.Start(startInfo))
{
process.WaitForExit();
}
Console.WriteLine("HTML page is converted to the PDF document.");
}
}
}
Este método de conversión se puede usar si el navegador web Chrome está instalado en la computadora y conoce la ruta al archivo "chrome.exe".
La aplicación .NET resultante es de tamaño pequeño porque no contiene ninguna biblioteca adicional y depende completamente del navegador web Chrome.
Convertir una página HTML a un documento PDF en C# usando el paquete nuget CefSharp.OffScreen
El paquete nuget CefSharp.OffScreen contiene una versión compilada de la biblioteca CefSharp y permite a los desarrolladores ejecutar una instancia completa del navegador web Chromium en segundo plano sin una interfaz de usuario visible.
Si desea utilizar la biblioteca CefSharp.OffScreen en una aplicación .NET Framework, simplemente agregue una referencia al paquete NuGet CefSharp.OffScreen a la aplicación .NET Framework.
Si desea utilizar la biblioteca CefSharp.OffScreen en una aplicación .NET Core, simplemente agregue una referencia al paquete NuGet CefSharp.OffScreen.NETCore a la aplicación .NET Core.
Aquí está el código C# para una aplicación de consola .NET que convierte una página HTML en un documento PDF utilizando la biblioteca CefSharp.OffScreen:
using CefSharp;
using CefSharp.OffScreen;
using System;
using System.Threading.Tasks;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
string sourceUrl = "https://www.vintasoft.com/index.html";
string resultPdfFilePath = @"D:\result.pdf";
Task task = ConvertHtmlToPdfUsingCefSharpOffScreen(sourceUrl, resultPdfFilePath);
task.Wait();
Console.WriteLine("HTML page is converted to the PDF document.");
Console.ReadKey();
}
static async Task ConvertHtmlToPdfUsingCefSharpOffScreen(string url, string pdfPath)
{
// if CEF is not initialized
if (Cef.IsInitialized == null || Cef.IsInitialized == false)
{
// create CEF settings
CefSettings settings = new CefSettings();
// initialize CEF
Cef.Initialize(settings);
}
// create Chromium web browser
using (ChromiumWebBrowser browser = new ChromiumWebBrowser(url))
{
// wait while page will be loaded
await browser.WaitForInitialLoadAsync();
// create PDF print settings
PdfPrintSettings printSettings = new PdfPrintSettings
{
MarginType = CefPdfPrintMarginType.None,
PrintBackground = true,
Landscape = false,
Scale = 1.0,
PreferCssPageSize = true,
DisplayHeaderFooter = false
};
// print web page to a PDF file
await browser.PrintToPdfAsync(pdfPath, printSettings);
}
}
}
}
Este método de conversión es independiente del navegador web Chrome y, en este caso, no es necesario compilar CefSharp usted mismo, ya que los creadores del paquete NuGet CefSharp.OffScreen ya lo han hecho.
La aplicación .NET resultante es completamente independiente y de gran tamaño (poco más de 300 MB) porque contiene archivos de la biblioteca CefSharp.
Convertir una página HTML a un documento PDF en C# usando la biblioteca CefSharp
CefSharp es un proyecto de código abierto que proporciona un envoltorio .NET para Chromium Embedded Framework (CEF). CefSharp permite a los desarrolladores integrar un navegador web basado en Chromium totalmente funcional directamente en aplicaciones de escritorio C# o VB.NET.
El repositorio de CefSharp se encuentra en GitHub:
https://github.com/cefsharp/cefsharp
El repositorio contiene 15 proyectos, incluyendo una aplicación de consola de ejemplo, una aplicación WinForms de ejemplo y una aplicación WPF de ejemplo.
Intente ejecutar la aplicación WPF de ejemplo (proyecto "CefSharp.Wpf.Example.netcore") y verá una aplicación WPF con navegación de página similar a Chrome. La aplicación WPF incluye navegación de enlaces, estilos CSS y código JavaScript; se siente igual que Chrome. En el menú principal de la aplicación, puede seleccionar el menú "Pruebas => Imprimir pestaña actual a PDF" y guardar la página HTML renderizada como un archivo PDF.
Este método de conversión es independiente del navegador web Chrome, pero deberá compilar manualmente CefSharp desde el código fuente, lo que se hace automáticamente al compilar el proyecto CefSharp en Visual Studio.
La aplicación .NET resultante (el proyecto "CefSharp.Wpf.Example.netcore") es completamente independiente y tiene un tamaño grande (poco más de 400 MB) porque contiene archivos de biblioteca de CefSharp.
Procesamiento de documentos PDF con VintaSoft Imaging .NET SDK
VintaSoft optó por no incluir funcionalidad para Convirtiendo páginas HTML a documentos PDF en sus SDK porque la tarea es muy compleja y ya está implementada en los navegadores web modernos.
Al mismo tiempo,
VintaSoft Imaging .NET SDK y
VintaSoft PDF .NET Plug-in le permiten crear, ver, verificar, imprimir, anotar, editar, proteger, firmar, optimizar, comprimir, convertir y guardar documentos PDF y PDF/A en Windows, Linux y macOS.
En consecuencia, el SDK de VintaSoft se puede utilizar para procesar el documento PDF creado, a saber:
Información detallada sobre las capacidades de procesamiento de documentos PDF usando
VintaSoft Imaging .NET SDK +
VintaSoft PDF .NET Plug-in se pueden encontrar aquí:
https://www.vintasoft.com/es/vspdf-dotnet-index.html