Aguarde...

Gerando relatório com PHP

Publicado em 03/01/2013

Biblioteca MPDF

Biblioteca MPDF

Introdução

Fazer relatórios com PHP pode parecer uma tarefa árdua por ter que garimpar entre tantas bibliotecas mas nesse artigo ficará muito claro a sua simplicidade.

Nesse artigo vamos abordar a utilização de uma biblioteca chamada mPDF. Essa biblioteca é capaz de criar arquivos PDF a partir da linguagem HTML sendo possível inclusive a utilização de CSS.

Baixando e instalando

Faça o download em http://www.mpdf1.com/mpdf/download e descompacte na raiz do seu site. Se preferir, faça os teste em um projeto limpo para facilitar a configuração. Na minha estrutura, os diretórios ficaram assim:

www
 |
 |--testeMPDF
        |
        |--mpdf
        |
        |--index.php

Sendo que o diretório 'testeMPDF' é a raiz do projeto e 'mpdf' é a biblioteca já descompactada. O arquivo index.php ainda vamos criar adiante. Para que a biblioteca funcione é preciso que as seguintes pastas possuam permissão de escrita:
/ttffontdata
/tmp
/graph_cache

Testando

Para ver se tudo está em ordem basta abrir no seu navegador a seguinte url:
http://localhost/testeMPDF/mpdf/examples/example01_basic.php
Deverá abrir um relatório exemplo do mPDF. Com esse simples exemplo já é possível perceber a flexibilidade da biblioteca, principalmente se olharmos as duas últimas páginas.

Hello world

Vamos agora criar um clássico "hello world". Para isso crie um arquivo chamado index.php na raiz do projeto com o seguinte conteúdo:

<?php
include('mpdf/mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('

Hello World

'); $mpdf->Output(); exit; ?>

Para testar basta acessar dessa forma no seu navegador:
http://localhost/testeMPDF
Você pode agora criar qualquer relatório com HTML e persisti-lo em um PDF com essa biblioteca.

Um exemplo mais complexo

Vamos agora criar um exemplo com um HTML um pouco mais extenso e usando CSS, para isso crie um arquivo chamado conteudo.html na raiz do seu projeto com o seguinte conteúdo:



Título do seu relatório

Seção 1

Ainda assim, existem dúvidas a respeito de como a adoção de políticas descentralizadoras causa impacto indireto na reavaliação dos paradigmas corporativos.

Seção 2

Nunca é demais lembrar o peso e o significado destes problemas, uma vez que a adoção de políticas descentralizadoras afeta positivamente a correta previsão do remanejamento dos quadros funcionais.

Agora jogue fora altere o seu arquivo index.php para:

<?php 
//Carregando a biblioteca mPDF
include('mpdf/mpdf.php');
//Inicia o buffer, qualquer HTML que for sair agora sera capturado para o buffer
ob_start();
?>
A seguir você verá o seu relatório
<?php
//Fazendo o include de um HTML em outro arquivo, ficara retido no buffer
include('conteudo.html');

//Limpa o buffer jogando todo o HTML em uma variavel.
$html = ob_get_clean();
$mpdf=new mPDF();
$mpdf->WriteHTML($html);
//Colocando o rodape
$mpdf->SetFooter('{DATE j/m/Y H:i}|Página {PAGENO} de {nb}|www.gqferreira.com.br');
$mpdf->Output();
exit;
?>
CodeIgniter framework

CodeIgniter Framework

Integrando com o framework CodeIgniter

Para integrar a biblioteca ao seu projeto usando CodeIgniter é muito simples. Primeiramente descompacte dentro da pasta libraries da sua aplicação:

www
 |
 |--suaAplicacao
         |
         |--application
                 |
                 |--libraries
                        |
                        |--mpdf

Depois disso basta criar uma controller e fazer como faziamos antes mas substitua essas linhas:

include('mpdf/mpdf.php');
include('conteudo.html');

Por essas:

$this->load->library('mpdf/mpdf');
$this->load->view('conteudo.html');

Conclusão

Concluímos que é possível criar bons relatórios com php, em especial com essa biblioteca open-source. Há muitas bibliotecas parecidas pela internet mas de todas as que conheci, essa foi a que mais me impressionou por ser capaz de transformar HTML em arquivo PDF, o que facilita bastante para quem já está acostumado com o ambiente web.
Para mais detalhes você pode acessar a documentação do projeto em: http://mpdf1.com/manual/

Licença Creative Commons
Gerando relatório com PHP de Gustavo Ferreira é licenciado sob uma Licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada.

Comentarios (8) para Gerando relatório com PHP

Karlos Eduardo,   01/06/2013

Boa Gustavo...já tinha usado O MDPF a uns tempos atrás...e justamente a dica de carregar a pagina externa usando o buffer...muito bom.... vlw pela dica

Alex,   06/10/2013

Ótimo post Gustavo, porem eu não consegui integrar o framework CodeIgniter

da esse erro:

Forbidden

You don't have permission to access /programas/CrudLoja/application/controllers on this server.

Se alguém puder me ajudar eu agradeço..
Abraço

Gustavo,   06/10/2013

Você está tendo problema de permissões no diretório. Tente atribuir permissões com "# chmod 755 -R /programas/CrudLoja"

Para entender melhor as permissões, veja essa artigo:
http://rberaldo.com.br/chmod-permissoes-em-sistemas-linux-e-unix-like/

Eduardo,   22/11/2013

Essa biblioteca é muito boa.

Como fazer para que em todas as páginas apareçam o número de páginas? Pois, só esta aparecendo na última.

Eduardo,   22/11/2013

Essa biblioteca é muito boa.

Como fazer para que em todas as páginas apareçam o número de páginas? Pois, só esta aparecendo na última.

ISRAEL RUIZ,   04/09/2014

Muito bom, porém sou iniciante em codeigniter, você pode me passar um exemplo completo?

Wiliam Franklin Jacinty dos Santos,   03/12/2015

estou com esse erro nos relatorios, pode me dizer oq seria??

A PHP Error was encountered

Severity: 8192

Message: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

Filename: includes/functions.php

Line Number: 74

A PHP Error was encountered

Severity: 8192

Message: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

Filename: includes/functions.php

Line Number: 75

Wiliam Franklin Jacinty dos Santos,   03/12/2015

estou com esse erro nos relatorios, pode me dizer oq seria??

A PHP Error was encountered

Severity: 8192

Message: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

Filename: includes/functions.php

Line Number: 74

A PHP Error was encountered

Severity: 8192

Message: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

Filename: includes/functions.php

Line Number: 75

Gostou do artigo? Acha que poderia ser melhor em algum ponto? Dê o seu feedback!