Biblioteca mPDF para gerar relatórios em PHP

Gerar PDF com a biblioteca mPDFNeste artigo vamos falar sobre gerar relatórios em PDF com a biblioteca mPDF no PHP, precisei dessa funcionalidade a um tempo atrás e sofri um pouco até encontrar essa biblioteca mPDF.
 
Todos sabem que o PHP não possui uma IDE para geração de relatórios ainda, até existem projetos interessantes como é o caso da biblioteca PHPJasperReport que pode ser utilizada em conjunto com a IDE iReport (excelente editor de relatórios em JAVA), mas essa biblioteca não contém diversas funcionalidades de quebra de relatório, sub-relatórios, imagens e etc., além do projeto estar parado.

 

 

Outra opção é a biblioteca fpdf, muito conhecida pelos desenvolvedores PHP, onde podemos construir os relatórios literalmente na “unha”. Essa biblioteca trabalha orientada a objetos então toda a parte de construção de linhas, customizações de cores, posicionamento do relatório com margens é feita utilizando métodos específicos da classe fpdf, mas além desse trabalho todo aparentemente o projeto está parado desde 2011. Iniciei meus relatórios com essa biblioteca, até cheguei a desenvolver um ou dois relatórios para o cliente, mas o layout, disposição dos dados e a complexidade de manutenção não me agradavam.

 

Biblioteca mPDF solução dos problemas!

Então pesquisando cheguei a “8º maravilha do mundo … rssrsr” a biblioteca mPDF. Essa biblioteca trabalha com a estrutura do relatório em HTML e a estilização com folhas de estilo CSS, com ela temos maior poder de customização no relatório. Basicamente você escreve um código HTML, exemplo uma tabela, estiliza ela com CSS e passa esses conteúdos para o objeto instanciado a partir da biblioteca mpdf, chamando os métodos adequados temos um PDF sendo exibido no navegador e com a opção de ser gravado na máquina do usuário.
 
Transformar HTML em PDF com mPDF

Transformar HTML em PDF com mPDF

 
Agora chega de conversa e vamos por a mão na massa, vou demonstrar como construir um relatório simples baseado em uma tabela para cadastro de  clientes.
 
1 – Devemos efetuar download da biblioteca mPDF e copiá-lo para pasta raiz do projeto.
 
2 – Para organizar será construído uma classe reportCliente que extenda a classe mpdf, para isso devemos colocar um require_once() direcionando para os fontes da biblioteca mPDF e também será utilizado uma conexão com um banco de dados no MySQL, como já é de costume vamos usar essa classe de conexão postada em um artigo anterior.

Observação: Nesse artigo está sendo utilizado uma classe para gerar o relatório, mas nada impede que seja instanciado um objeto mpdf e através dele seja chamado os métodos necessários.

 

Algumas observações sobre essa classe, claro que ela pode ser melhorada e modificada de acordo a necessidade do relatório, pode se ainda construir uma classe abstrata com algumas implementações para serem reaproveitadas nas classes descedentes. Explicação para cada método:
 
__construct($css, $titulo): Esse método recebe 2 parâmetros, o primeiro é caminho para o arquivo CSS e o segundo é o título que será exibido no topo do relatório. Observem que é chamado o método $this->setCSS() o mesmo será explicado adiante.
 
setarCSS($file): Esse método recebe como parâmetro o caminho do arquivo CSS, verifica se o mesmo existe e carrega o conteúdo do arquivo no atributo $css;
 
getHeader(): Esse método configura o cabeçalho do arquivo PDF, podemos colocar as informações que acharmos importantes, número de página, datas, nome de relatório, emissor e etc., tudo dentro de uma variável contendo código HTML e usando tabela para facilitar o alinhamento, posteriormente o método retorna essa variável.
 
getFooter(): Esse método é muito parecido com o getHeader(), ele configura o rodapé do arquivo PDF, podemos colocar as informações que acharmos importantes, número de página, datas, nome de relatório, emissor e etc., tudo dentro de uma variável contendo código HTML e usando tabela para facilitar o alinhamento, posteriormente o método retorna essa variável.
 
getTabela(): Esse método é quem realmente monta a tabela contendo os dados, nele é construído a estrutura da tabela HTML e adicionado o retorno do banco de dados, observem que foi executada uma consulta e posteriormente o array com os dados foi percorrido preenchendo a tabela. Idêntico quando construímos uma página com tabela, sempre atribuindo o código HTML para uma variável e no final o método retorna essa variável.
 
BuildPDF(): Esse método é responsável em setar alguns parâmetros de configuração como charset, tamanho da folha e passar o conteúdo HTML e CSS chamando os métodos acima para capturar o retorno e atribuir para os métodos herdados (WriteHTML(), SetHTMLHeader() e SetHTMLFooter()) da classe mpdf.
 
Exibir($name): Esse método recebe um parâmetro $name, que será o nome do arquivo PDF se o usuário decidir gravá-lo em disco, internamente é chamado o método herdado da classe mpdf Output() que recebe como parâmetro o nome do arquivo e a ação que deverá ser executada quando for chamado a exibição do relatório, abaixo as opções:

I – Envia o arquivo para ser exibido no navegador se o mesmo possuir o plugin Adobe instalado e salva com o nome passado como parâmetro se o usuário clicar em “Save as”.
D – Força um download com o nome do arquivo passado como parâmetro.
F – Salva em um diretório local com o nome passado como parâmetros (incluir o caminho do diretório).
S Devolve o documento em forma de string.

Post relacionado:  Dicas de Segurança com PHP

3 – Criar folha de estilo CSS bem simples para ser utilizada na estilização do relatório:

Para finalizar segue abaixo a página index.php onde foi chamado a classe reportCliente, essa página foi construída com um form simples contendo apenas um botão submit. Esse form será submetido na mesma página e vai chamar a construção e exibição do relatório:

 

Resultado no navegador:

Ao pressionar o botão “Gerar relatório” será aberta uma nova aba no navegador para exibir o relatório em PDF:
 
Relatório PDF

Relatório PDF

 
Link para baixar o arquivo Relatório de Clientes.pdf.
 
Nesse exemplo construí um relatório bem “carnavalesco” colocando umas cores, fundo verde e sombra no título, mas existem diversas possibilidades de customizações que podem ser feitas e o melhor de tudo isso, utilizando CSS o que pessoalmente achei uma maravilha.
 
Dica: Não abusem do CSS3, ele não está totalmente implementado pela biblioteca mPDF, tive uma experiência ruim quando fui testar meus relatórios no IE 9 tudo por causa de alguns estilos do CSS3.
 
Bom pessoal acessem a documentação da biblioteca mPDF, pois não apresentei nem 1% do poder dessa biblioteca, existem vários métodos e atributos interessantes e que podem ser explorados da melhor maneira possível.
 
Até a próxima …

Se gostou compartilhe esse post nas redes sociais, ajude o blog DevWilliam a crescer!

Tags:
Show Buttons
Hide Buttons