Em: Zend
26 mai 2009Olá pessoal,
Após um bom tempo sem artigos, estou de volta!
A tarefa de criar documentos PDF sempre foi uma “pedra no sapato” de qualquer programador PHP, haja vista que era um processo trabalhoso, que exige testes e mais testes de posicionamento e ainda sim não se chegava a um resultado satisfatório.
Para sanar esse problema, foi criada uma classe chamada fpdf, que por si só já nos era muito útil com seus métodos para estilização de texto e alguns outros recursos. Mas ainda não era o suficiente, pois a formatação e quebra de linhas ainda eram difíceis.
Surgiu então a classe html2fpdf que, na minha opinião, resolveu o problema, pois agora poderíamos estilizar um código html (com algumas limitações, é claro) e gerar o PDF com base nele.
Como atualmente utilizo Zend Framework, resolvi reunir as vantagens das classes acima em um Action Helper:
<?php /** * Action Helper para gerar PDF a partir de HTML usando HTML2PDF * * @uses Zend_Controller_Action_Helper_Abstract * @uses HTML2FPDF (http://html2fpdf.sourceforge.net) * @uses FPDF (www.fpdf.org) * * @author Rubens Gadelha * * @param string $html * @param 'I'|'D'|'F'|'S' $dest * * Saidas: * I: Envia para a saída padrão * D: Download do arquivo * F: Salva em um arquivo local * S: Retorna como string */ class Zend_Controller_Action_Helper_Html2Pdf extends Zend_Controller_Action_Helper_Abstract { public function direct($html, $output, $dest = 'D') { $pdf = new HTML2FPDF(); $pdf->AddPage(); $pdf->WriteHTML(utf8_decode($html)); $pdf->Output($output, $dest); } } ?>
Para utilizá-lo, é muito fácil:
1. Salve o código acima em um arquivo chamado Html2Pdf.php na pasta helpers do seu projeto;
2. Faça o download do html2fpdf aqui;
3. Descompacte-o dentro da pasta library do seu projeto;
4. Inclua essa pasta no include_path que, geralmente está configurado no arquivo de bootstrap:
<?php set_include_path('.' . PATH_SEPARATOR . '../library/' . PATH_SEPARATOR . '../application/default/models/' . PATH_SEPARATOR . get_include_path() // inclua a linha abaixo . PATH_SEPARATOR . '../library/html2fpdf/'); ?>
5. No Controller, insira a linha abaixo na ação onde você deseja gerar o PDF:
<?php // Desabilita o layout $this->_helper->layout->disableLayout(); // Gera o PDF $this->_helper->html2Pdf($html, $file, 'D'); // Evita que o arquivo busque a respectiva view exit; ?>
Onde:
$html é o código base para geração do arquivo
$file é o nome do arquivo
‘D’ é um parâmetro que força o download do arquivo.Os parâmetros possíveis são:
I: Envia para a saída padrão
D: Download do arquivo
F: Salva em um arquivo local
S: Retorna como string
Para mais detalhes sobre código html compatível, acesse a página do html2fpdf.
Rubens Gadelha é formado em Webdesign & Webmaster (hoje Desenvolvimento de Web e Comércio Eletrônico) pela Universidade Estadual Vale do Acaraú - UVA e dedica algumas horas do dia à boa leitura e autodidática.
Atualmente trabalha como Programador Web, focado na linguagem PHP e no Zend Framework, bibliotecas de javascript como JQuery e o uso de CMS’s como Drupal. Os bancos de dados MySQL e PostGres também fazem parte do seu dia-a-dia.
Dedica suas horas vagas ao aprofundamento na linguagem Java
1 Resposta para Convertendo HTML em PDF no Zend Framework utilizando html2fpdf
Diego
agosto 28th, 2009 às 18:48
Ótima dica!
Só preciso estudar um pouco mais a classe html2pdf pra ver se faz o que preciso implementar.
Tentei manipular umas tabelas de várias maneiras e não ficou como eu esperava. Com a classe dompdf deu certo.
Uma dica: Eu uso ‘$this->_helper->viewRenderer->setNoRender ();’ pra não renderizar a view, em vez de ‘exit’.