Criando PDFs em Asp.NET MVC com Rotativa

Por Gilberto Castro|
Atualizado: Jul 2023 |
Publicado: Set 2017

Rotativa é uma biblioteca de conversão de arquivos HTML em PDF em ASP.NET MVC baseado na ferramenta wkhtmltopdf.
Com ele os códigos em HTML e CSS podem ser aproveitados para criar um arquivo PDF.
O Rotativa necessita do executável wkhtmltopdf.exe para criar os arquivos.
Ele deve ser instalado como um pacote nuget comum [1]
Apenas com o controller adicionado como mostrado mais abaixo, o rotativa gera o PDF correspondente à página HTML.
Para ajustes mais específicos, o mesmo ainda apresenta a opção de receber uma série de comandos por meio do parâmetro ”CustomSwitches” no controller. Com isso é possível mudar o tamanho da fonte assim como seu tipo, e também fazer uso de um cabeçalho (header) e rodapé (footer).
Os recursos de cabeçalho e rodapé são limitados mas podem ser usados de duas maneiras: carregando arquivos header e footer no comando “CustomSwitches” com as instruções ou passando apenas as instruções específicas.
Por exemplo, usando apenas os comandos em CustomSwitches se pode incluir um título no header e uma numeração no rodapé. Uma limitação é não se ter a opção de usar um header carregado de um arquivo e um footer passado via comandos. Ou os dois vem de arquivos carregados ou os dois vem de comandos pelas instruções.
Outro tipo de limitação encontrada está no carregamento de imagens para compor o header/footer do pdf. Este só é possível até o momento por meio de um header/footer vindo de um arquivo.

Como usar:

  • Inicialmente vá ao gerenciador de pacotes Nuget e instale o pacote:

gerenciador de pacotes Nuget e instale o pacote

  • Após a instalação temos o arquivo .exe na pasta Rotativa como mostrado abaixo:

arquivo .exe na pasta Rotativa

Para gerar o PDF, basta criar o conteúdo HTML da mesma forma que uma página web estática. O Rotativa irá ler esse conteúdo e gerar o PDF.
Para customizar cabeçalho e rodapé, seguem os códigos.

  • No Controller devemos implementar o seguinte código para execução
No exemplo temos a customização através de string.
No exemplo temos a customização através de string.

Os comandos passados em CustomSwitches são feitos por meio de uma string. Logo é possível se concatenar algum valor no meio desta para que seja exibida como texto no cabeçalho ou rodapé.
Os principais comandos estão exemplificados acima e são estes:

  • –header-center \”texto\” : responsável por escrever um texto no cabeçalho, no caso na região central do mesmo. Center pode ser substituído por right ou left;
  • –header-spacing \”valor\”: este tem como objetivo determinar o espaçamento do cabeçalho no início das páginas. O valor pode ser positivo ou negativo, passando assim a se sobrepor ao texto que não compõe o cabeçalho. Também é válido para –footer-spacing \”valor\”;
  • –header-font-name \”font\” : comando para mudança do tipo de fonte do cabeçalho. Também se aplica para –footer-font-name \”font\”;
  • –header-font-size \”size\” : comando para mudança do tamanho da fonte a ser exibida no cabeçalho. Também se aplica para –footer-font-size \”size\”;
  • –footer-right \”Pag: [page] de [toPage]\” : comando para exibir a numeração das páginas do arquivo pdf. Também pode ser usado no cabeçalho assim como ter sua posição e modos de escrita alterados.

No exemplo acima ainda foi passado outro parâmetro para customização do pdf, o “pageMargins”. Este tem como função alterar as margens do arquivo gerado, porém esta ação é feita de modo geral, atingindo o texto incluindo o header/footer.
Para o caso do cabeçalho e rodapé serem gerados por arquivos separados temos as seguintes alterações:

4

Neste caso temos os dados do header e do footer definidos em duas Views no formato HTML! Atente para o fato de que este comando não funciona com arquivos em CSHTML!
Os comandos de mudança de fonte e espaçamento ainda funcionam, porém ao tentar se incluir um texto este não surte mais efeito, mesmo que apenas um (footer ou header ) esteja sendo usado.
Os arquivos de header e footer abaixo fazem a mesma função de quando os parâmetros são passados na string, ou seja, mostram a numeração da página no footer e um título no header.

Os arquivos são:
Header:

Header

 

Footer:

Footer

No arquivo de footer temos uma série de parâmetros internos do rotativa que devem ser acessados como é mostrado acima.

Outros tipos comandos e mais informações podem ser obtidas nas fontes abaixo:
Displaying headers and footers in a PDF generated by Rotativa(MVC):
https://bhavdiptala.blogspot.com.br/2016/05/displaying-headers-and-footers-in-pdf.html
Rotativa PDF em ASP .NET MVC
http://www.tiselvagem.com.br/desenvolvimento/asp-net/mvc-rotativa-pdf/
Rotativa
http://rotativaforpdf.blogspot.com.br/2015/03/rotativa.html

Os códigos aqui apresentados podem ser encontrados em:
https://github.com/GilbertoCastro/Rotativo

Referências
[1] https://www.nuget.org/packages/Rotativa

 

Quer saber mais?

Desenvolvimento de Software

Confira outros artigos

Veja outros artigos de Desenvolvimento de Software