Neste artigo eu vou mostrar como podemos gerar arquivos PDF em uma aplicação ASP .NET Core MVC. |
Para gerar arquivos PDF na ASP .NET Core temos que apelar para plugins de terceiros e neste artigo eu vou usar o biblioteca Rotativa.AspNetCore para gerar PDFs a partir da Views.
Essa ferramenta foi criada pelo italiano Giorgio Bozio, e a história você pode conferir neste link: http://letsfollowtheyellowbrickroad.blogspot.com.br/.
Para fazer esse trabalho podemos usar na linha de comando as ferramentas : wkhtmltopdf e wkhtmltoimage que são open-source. (veja o link: https://wkhtmltopdf.org/ )
Para usar na ASP .NET Core MVC vamos instalar o pacote Rotativa.AspNetCore em nosso projeto via Nuget.
A base de funcionamento deste plugin esta baseada no wkhtmltopdf que vai converter o HTML renderizado para PDF usando o motor WebKit, conforme explica o seu autor.
Então, si embora pro exemplo....
Recursos usados:
Criando o projeto no VS 2017
Abra o VS 2017 Community e crie um novo projeto ASP .NET Core usando o template Web Application(Model-View-Controller).
Após criar o projeto já podemos incluir a referência à biblioteca Rotativa.AspNetCore.
Incluindo o pacote Rotativa.AspNetCore
No menu Tools -> Nuget Package Manager clique em Manage Nuget Packages for solution;
Localize o pacote Rotativa.AspNetCore e instale no projeto clicando em Install:
Criando a pasta Rotativa no projeto
Vamos criar uma pasta chamada Rotativa no interior da pasta wwwroot.
A seguir nesta pasta vamos copiar os seguinte arquivos: help-wkhtmltoimage.txt, help-whhtmltopdf.txt, whhtmltopdf.exe, whhtmltoimage.exe
Alterando o arquivo de leiaute
Vamos agora abrir o
arquivo _Layout.cshml na pasta /Views/Shared
e incluir o código em azul mostrado abaixo substituindo
o código original:
...
<div
class="navbar-collapse collapse"> ... |
Agora vamos alterar o código da view Index.cshtml da pasta Views/Home :
@{
ViewData["Title"] = "Home Page";
}
<br />
<div>
<h3>Gerar arquivos PDF</h3>
</div>
|
Fizemos isso somente para exibir um link para Gerar PDF na página inicial.
Definindo a configuração no arquivo Startup
Precisamos definir no
método Configure da classe Startup uma
configuração para acessar o arquivo wkhtmltopdf.exe.
Para isso inclua o código abaixo:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
RotativaConfiguration.Setup(env);
}
|
Criando o controlador e view
Clique com o botão direito do mouse sobre a pasta Controllers e a seguir clique em Add -> Controller e escolha a opção MVC Controller Empty e clique Add;
Informe o nome GeraPDFController e a seguir defina o código abaixo neste controlador :
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
namespace AspCore_PDF.Controllers
{
public class GeraPDFController : Controller
{
public IActionResult VisualizarComoPDF()
{
return new ViewAsPdf("VisualizarComoPDF");
}
}
}
|
Neste código usamos a classe ViewAsPdf() passando o nome da View a partir da qual será gerado o arquivo PDF.
Para criar a view clique com o botão direito sobre o método Action VisualizarComoPDF e a seguir clique em Add View;
Aceite as definições conforme mostra a figura abaixo e clique em Add;
A seguir vamos definir o código na view para gerar o nosso arquivo PDF.
Definindo o código na view para gerar o PDF
Aqui colocamos o código do arquivo PDF que queremos gerar. Como exemplo eu vou criar alguns textos e exibir uma imagem:
@{
Layout = null;
}
<html>
<head>
<meta charset="utf-8">
<title>Gerar PDF</title>
</head>
<body>
<header>
<h1>Pedido</h1>
<address>
<p>Jose Carlos Macoratti</p>
<p>Rua Projetada , 100 - Centro<br>São Paulo - 03254-850</p>
<p>Telefone - (011) 555-1234</p>
</address>
<span>
<img src="~/images/maco10.gif" />
</span>
</header>
<article>
<address>
<p>JcmSoft<br> a/c - Macoratti</p>
</address>
<table class="meta">
<tr>
<th><span>Pedido</span></th>
<td><span>000001</span></td>
</tr>
<tr>
<th><span>Data</span></th>
<td><span>10, de Fevereiro, 2018</span></td>
</tr>
<tr>
<th><span>Valor</span></th>
<td><span>R$ 600,00</span></td>
</tr>
</table>
<br />
<table class="Estoque" border="1">
<thead>
<tr>
<th><span>Item</span></th>
<th><span>Descrição</span></th>
<th><span>Quantidade</span></th>
<th><span>Preço</span></th>
</tr>
</thead>
<tbody>
<tr>
<td><span>Super DVD .NET</span></td>
<td><span>Recursos de aprendizagem para .NET</span></td>
<td><span>4</span></td>
<td><span>100.00</span></td>
</tr>
</tbody>
</table>
<br />
<table class="Saldo">
<tr>
<th><span>Total</span></th>
<td><span>600.00</span></td>
</tr>
<tr>
<th><span>Pago</span></th>
<td><span>0.00</span></td>
</tr>
<tr>
<th><span>Saldo</span></th>
<td><span>600.00</span></td>
</tr>
</table>
</article>
<aside>
<h1><span>Notas Adicionais</span></h1>
<div>
<p>Macoratti .net - Quase tudo para .NET</p>
</div>
</aside>
</body>
</html>
|
Agora é só alegria...
Executando projeto iremos obter o seguinte resultado:
Na segunda parte do artigo veremos como gerar pdfs usando uma view fortemente tipada e definindo outras configurações.
Pegue o código do projeto aqui: AspCore_PDF.zip (sem as referências)
(Disse Jesus)"Mas a hora vem, e agora é, em que os
verdadeiros adoradores adorarão o Pai em espírito e em
verdade; porque o Pai procura a tais que assim o
adorem."
João 4:23
Referências: