Este tutorial passo a passo mostra como gerar arquivos PDF em C# com o DotNetBrowser.
Existem muitas bibliotecas de PDF no mundo .NET. Mas é mais fácil para nós gerar PDFs com um navegador integrado. Uma vez que o DotNetBrowser pode funcionar inteiramente fora da tela, pode utilizá-lo em servidores, tanto em Windows como em Linux.
O algoritmo é simples:
- Carregar uma página.
- Preencher a página com dados.
- Configurar a impressora.
- Imprimir a página como PDF.
Passo 1: Criar um projeto
Para a nossa tarefa, não precisamos da interface do usuário. Por conseguinte, criamos uma aplicação de console.
Abra o Terminal ou a linha de comandos, navegue até a pasta necessária, e execute o seguinte comando:
dotnet new console -o PdfGeneration
Passo 2: Integrar o DotNetBrowser
Altere a pasta para PdfGeneration
e adicione o pacote DotNetBrowser do NuGet:
# Para Windows:
dotnet add package DotNetBrowser
# Para outras plataformas:
dotnet add package DotNetBrowser.Linux-x64
dotnet add package DotNetBrowser.Linux-arm64
dotnet add package DotNetBrowser.macOS-x64
dotnet add package DotNetBrowser.macOS-arm64
Depois disso, obtenha a sua licença gratuita para começar a utilizar o DotNetBrowser.
Passo 3: Carregar a página
Crie uma aplicação de console simples que inicie o DotNetBrowser e carregue a página com o modelo:
class Program
{
private static async Task Main()
{
var options = new EngineOptions.Builder
{
RenderingMode = RenderingMode.OffScreen,
LicenseKey = "your license key"
}.Build();
using var engine = EngineFactory.Create(engineOptions);
using var browser = engine.CreateBrowser();
// A página é um recurso no projeto.
var pageUrl = Path.GetFullPath("template.html");
await browser.Navigation.LoadUrl(pageUrl);
}
}
Esta é uma página normal num browser normal. Assim, utilize qualquer biblioteca JavaScript (por exemplo, plotly.js ou D3.js), WebGL, gráficos SVG ou qualquer outra tecnologia disponível no Chromium.
Passo 4: Preencher a página com dados
Para preencher a página com dados, utilize a API DOM ou execute qualquer código JavaScript. Vamos utilizar um par de funções JavaScript que incorporamos na página:
private static void FillInData(IBrowser browser)
{
var accountNumber = "123-4567";
var name = "Dr. Emmett Brown";
var address = "1640 Riverside Drive";
var reportingPeriod = "Oct 25 - November 25, 1985";
browser.MainFrame.ExecuteJavaScript(
$"setBillInfo('{accountNumber}', '{name}', '{address}', '{reportingPeriod}')"
);
var dayCost = 500; // Dólares.
var dayUsage = 1.21; // Gigawatts.
var nightCost = 312;
var nightUsage = 88;
browser.MainFrame.ExecuteJavaScript(
$"addCharge('Day Tariff', {dayUsage}, {dayCost});" +
$"addCharge('Night Tariff', {nightUsage}, {nightCost});"
);
}
Passo 5: Configurar a impressão
Diga ao browser para imprimir automaticamente e configurar as definições de impressão:
private static TaskCompletionSource<string> ConfigurePrinting(IBrowser browser)
{
// Dizer ao browser para imprimir automaticamente em vez de mostrar a pré-visualização de impressão.
browser.RequestPrintHandler =
new Handler<RequestPrintParameters, RequestPrintResponse>(
p => RequestPrintResponse.Print()
);
TaskCompletionSource<string> whenCompleted = new();
// Quando o browser imprime uma página HTML.
browser.PrintHtmlContentHandler =
new Handler<PrintHtmlContentParameters, PrintHtmlContentResponse>(
parameters =>
{
// Utilizar a impressora PDF.
var printer = parameters.Printers.Pdf;
var job = printer.PrintJob;
// Gerar um nome aleatório para o arquivo PDF.
var guid = Guid.NewGuid().ToString();
var path = Path.GetFullPath($"{guid}.pdf");
job.Settings.PdfFilePath = path;
// Remover as áreas brancas nos lados.
job.Settings.PageMargins = PageMargins.None;
// Remove os cabeçalhos e rodapés do navegador padrão.
job.Settings.PrintingHeaderFooterEnabled = false;
job.PrintCompleted += (_, _) => whenCompleted.SetResult(path);
// Prosseguir com a impressão.
return PrintHtmlContentResponse.Print(printer);
});
return whenCompleted;
}
Passo 6: Gerar arquivo PDF
Junte tudo, comece a imprimir e aguarde até estar terminado:
private static async Task Main()
{
var engineOptions = new EngineOptions.Builder
{
RenderingMode = RenderingMode.OffScreen,
LicenseKey = "a sua chave de licença"
}.Build();
using var engine = EngineFactory.Create(engineOptions);
using var browser = engine.CreateBrowser();
await browser.Navigation.LoadUrl(Path.GetFullPath("template.html"));
FillInData(browser);
var whenPrintCompleted = ConfigurePrinting(browser);
browser.MainFrame.Print();
var resultPath = await whenPrintCompleted.Task;
}
Resultados
Executar o programa:
dotnet run
E abra o arquivo PDF gerado:
Código fonte
Pode encontrar o código-fonte desta aplicação no nosso repositório GitHub.
Descobrir mais
- Escolher entre DotNetBrowser e WebView2
- Escolher entre DotNetBrowser e CefSharp
- Extensões do Chrome no DotNetBrowser