Neste post, vou apresentar como converter códigos em HTML para PDF utilizando o JsReport, uma biblioteca de geração de relatórios baseada em JavaScript que pode ser integrada facilmente em projetos .NET.
O JsReport permite criar relatórios personalizados a partir de templates HTML, CSS e JavaScript, utilizando dados dinâmicos e recursos como gráficos, tabelas e imagens.
Pré-requisitos
- Visual Studio 2022 (.NET 7.0)
- Packages:
API
O primeiro passo é configurar a classe program.cs:
A extensão AddJsReport() é responsável por registrar a injeção de dependência do JsReport na solução:
Este código cria uma instância do conversor localmente, usando o binário do JsReport que é baixado automaticamente pelo pacote NuGet.
- O método KillRunningJsReportProcesses() é responsável por finalizar/liberar memória dos processos de geração do PDF anteriores.
- O método Configure() é responsável por realizar configurações adicionais do JsReport, neste caso, estamos configurando que as gerações de PDF sejam processadas no navegador Chrome.
- O método AsUtility() indica que vamos usar o JsReport como uma ferramenta auxiliar, sem armazenar os templates ou os relatórios gerados.
- O método Create() finaliza a configuração do JsReport.
Agora, podemos utilizar o JsReport para realizar as conversões. Para isso, é necessário criar um método na Controller que recebe um HTML como parâmetro e retorna um arquivo PDF como resultado:
O método RenderAsync() recebe um objeto do tipo RenderRequest, que contém as informações sobre o template e o formato do relatório. No nosso caso, o template é o HTML que recebemos como parâmetro. Por fim, retornamos esse conteúdo como um arquivo PDF usando o método File.
Testando
Para testar o nosso método, podemos criar um HTML simples com algum texto e uma imagem. Por exemplo:
<html>
<head>
<style>
h1 {
color: blue;
}
</style>
</head>
<body>
<h1>Convertendo HTML para PDF com o JsReport no .NET</h1>
<p>Este é um exemplo legal de como converter HTML para PDF usando o JsReport no .NET.</p>
<img src="https://raw.githubusercontent.com/dotnet/brand/main/logo/text-only/Black/dotnet-logo-text_Black%402x.png" alt=".NET logo" width="323" height="121">
</body>
</html>
Em seguida, passe o HTML como parâmetro ao chamar o endpoint api/converterhtml e clique em Execute:
O que resulta na geração do arquivo PDF:
Finalizando
Com o JsReport ficou muito mais simples converter códigos HTML para PDF mantendo a formatação e a imagem. Podemos usar templates mais complexos e adicionar mais recursos ao nosso relatório, como cabeçalhos, rodapés, numeração de páginas, etc. Para saber mais sobre o JsReport e suas funcionalidades, consulte a documentação oficial: https://jsreport.net/learn/dotnet-aspnetcore
Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-jsreport