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:

  1. Carregar uma página.
  2. Preencher a página com dados.
  3. Configurar a impressora.
  4. 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.

Obtenha 30 dias de teste para indivíduos e empresas
Pegue sua licença gratuita

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:

Documento PDF gerado em C# pelo DotNetBrowser

Documento PDF gerado em C# pelo DotNetBrowser

Código fonte 

Pode encontrar o código-fonte desta aplicação no nosso repositório GitHub.

Descobrir mais