Converter uma página HTML em um documento PDF em C# é uma tarefa comum, frequentemente usada para criar faturas, relatórios, contratos e outros documentos comerciais a partir de modelos HTML. Essa conversão também é essencial para criar documentos estáticos, portáteis e prontos para impressão a partir de conteúdo web dinâmico.
O processo de conversão de uma página HTML em um documento PDF envolve as seguintes etapas:
- Abra o arquivo HTML de origem e analise o código da página HTML.
- Obtenha os arquivos CSS e JS usados na página HTML.
- Analise os estilos CSS nos arquivos CSS.
- Analise o código JavaScript em arquivos JS.
- Execute o código JavaScript e obtenha o código da página HTML resultante.
- Criar um novo documento PDF.
- Converte gráficos raster e vetoriais na página HTML (incluindo estilos CSS e transparência) em gráficos na página PDF e adiciona os gráficos ao documento PDF resultante.
- Converte texto na página HTML (incluindo estilos CSS) em texto na página PDF e adiciona o texto ao documento PDF resultante.
- Salve o documento PDF criado em um arquivo.
A especificação do padrão HTML5 (
https://html.spec.whatwg.org/print.pdf) contém 1553 páginas.
A especificação do padrão CSS2 (
https://www.w3.org/TR/CSS22/css2.pdf) contém 426 páginas.
A especificação do padrão JavaScript (
https://ecma-international.org/wp-content/uploads/ECMA-262_16th_edition_june_2025.pdf) contém 835 páginas.
As etapas para converter HTML em PDF e informações sobre as especificações de HTML5, CSS2 e JavaScript são fornecidas acima para deixar claro que, em geral, converter HTML em PDF é uma tarefa muito complexa se implementada do zero.
Ao mesmo tempo, essa tarefa complexa já está implementada em navegadores modernos, que renderizam páginas HTML perfeitamente e podem salvar a página HTML renderizada em um arquivo PDF. Portanto, surge uma pergunta razoável: é possível usar um navegador em um aplicativo C# para converter uma página HTML em um documento PDF?
Neste artigo, veremos como converter uma página HTML de qualquer complexidade em um documento PDF em um aplicativo C# de forma totalmente gratuita e com a máxima qualidade usando o Chromium.
O Chromium é um projeto de navegador de código aberto que é usado principalmente como base para a maioria dos navegadores modernos, incluindo Google Chrome, Microsoft Edge, Opera e outros. Ele foi projetado com foco em velocidade, segurança e estabilidade, e conta com contribuições significativas de desenvolvedores do Google, Microsoft e outras empresas.
Convertendo uma página HTML em um documento PDF em C# usando a linha de comando do Chrome
A maneira mais fácil de converter uma página HTML em um documento PDF é executar o seguinte comando do Chrome na linha de comando:
"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"
Aqui está uma breve descrição dos parâmetros usados na linha de comando do Chrome:
- --headless – especifica que o Chrome deve ser executado sem uma interface gráfica.
- --disable-gpu – especifica que a GPU deve ser desativada ao renderizar uma página HTML.Este parâmetro é necessário para compatibilidade com versões antigas do Chrome.
- --run-all-compositor-stages-before-draw – especifica que todas as etapas de renderização e composição devem ser concluídas antes da renderização da página HTML.
- --no-margins – especifica que a página HTML deve ser renderizada sem margens.
- --printBackground – especifica que a página HTML deve conter gráficos de fundo.
- --no-pdf-header-footer – especifica que o documento PDF gerado não deve conter cabeçalho/rodapé com informações do documento.
- --print-to-pdf – especifica o caminho para o arquivo PDF salvo. O caminho deve ser absoluto.
O comando acima pode ser executado a partir da linha de comando do Windows/Linux/macOS ou a partir de código C#.
Aqui está um código C# que demonstra como converter uma página HTML em um documento PDF em um aplicativo de console .NET usando o 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 conversão pode ser usado se o navegador Chrome estiver instalado no computador e você souber o caminho para o arquivo "chrome.exe".
O aplicativo .NET resultante tem um tamanho pequeno porque não contém nenhuma biblioteca adicional e depende inteiramente do navegador Chrome.
Convertendo uma página HTML em um documento PDF em C# usando o pacote NuGet CefSharp.OffScreen
O pacote NuGet CefSharp.OffScreen contém uma versão compilada da biblioteca CefSharp e permite que os desenvolvedores executem uma instância completa do navegador Chromium em segundo plano, sem uma interface de usuário visível.
Se você quiser usar a biblioteca CefSharp.OffScreen em um aplicativo .NET Framework, basta adicionar uma referência ao pacote NuGet CefSharp.OffScreen ao aplicativo .NET Framework.
Se você quiser usar a biblioteca CefSharp.OffScreen em um aplicativo .NET Core, basta adicionar uma referência ao pacote NuGet CefSharp.OffScreen.NETCore ao aplicativo .NET Core.
Aqui está o código C# para um aplicativo de console .NET que converte uma página HTML em um documento PDF usando a 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 conversão é independente do navegador Chrome e, neste caso, não é necessário compilar o CefSharp, pois os criadores do pacote NuGet CefSharp.OffScreen já fizeram isso.
O aplicativo .NET resultante é completamente independente e de tamanho grande (pouco mais de 300 MB) porque contém arquivos da biblioteca CefSharp.
Convertendo uma página HTML em um documento PDF em C# usando a biblioteca CefSharp
CefSharp é um projeto de código aberto que fornece um wrapper .NET para o Chromium Embedded Framework (CEF). O CefSharp permite que os desenvolvedores incorporem um navegador da web baseado no Chromium totalmente funcional diretamente em aplicativos de desktop C# ou VB.NET.
O repositório CefSharp está localizado no GitHub:
https://github.com/cefsharp/cefsharp
O repositório contém 15 projetos, incluindo um aplicativo de console de exemplo, um aplicativo WinForms de exemplo e um aplicativo WPF de exemplo.
Experimente executar o aplicativo WPF de exemplo (projeto "CefSharp.Wpf.Example.netcore") e você verá um aplicativo WPF com navegação de página semelhante ao Chrome. O aplicativo WPF inclui navegação por links, estilos CSS e código JavaScript - a experiência é exatamente como a do Chrome. No menu principal do aplicativo, você pode selecionar "Testes => Imprimir guia atual para PDF" e salvar a página HTML renderizada como um arquivo PDF.
Este método de conversão é independente do navegador Chrome, mas você precisará compilar o CefSharp manualmente a partir do código-fonte, o que é feito automaticamente ao compilar o projeto CefSharp no Visual Studio.
O aplicativo .NET resultante (o projeto "CefSharp.Wpf.Example.netcore") é completamente independente e tem um tamanho grande (pouco mais de 400 MB) porque contém arquivos de biblioteca do CefSharp.
Processando documentos PDF com o VintaSoft Imaging .NET SDK
A VintaSoft optou por não incluir a funcionalidade de conversão de páginas HTML em documentos PDF em seus SDKs porque a tarefa é muito complexa e já está implementada em navegadores web modernos.
Ao mesmo tempo, o
VintaSoft Imaging .NET SDK e o
VintaSoft PDF .NET Plug-in permitem criar, visualizar, verificar, imprimir, anotar, editar, proteger, assinar, otimizar, comprimir, converter e salvar documentos PDF e PDF/A no Windows, Linux e macOS.
Assim, o SDK da VintaSoft pode ser usado para processar o documento PDF criado, a saber:
Informações detalhadas sobre os recursos de processamento de documentos PDF usando
VintaSoft Imaging .NET SDK +
VintaSoft PDF .NET Plug-in podem ser encontradas aqui:
https://www.vintasoft.com/pt/vspdf-dotnet-index.html