Convertendo HTML em PDF no Zend Framework utilizando html2fpdf

Em: Zend

26 mai 2009

Olá 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.

1 Resposta para Convertendo HTML em PDF no Zend Framework utilizando html2fpdf

Avatar

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’.

Comentário

Sobre o autor

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

Categorias

Arquivos

  • Sergio: Excelente! trabalho muito bom, mas seria bom ter um link para o download completo. Obrigado! [...]
  • Sergio: Excelente!!! muy buen trabajo, pero sería bueno tener un link con la descarga completa. Gracias! [...]
  • Percival: Olá tenho algumas duvidas, sou novo em vaadin e seu post esta bom, mas "BiometriaApplication" que r [...]
  • Jonathan Welzel: Ótimo tutorial. Já tinha visto um exemplo baseado nesse padrão de gerenciamento de sessões por r [...]
  • Arthur: Amigo, tentei fazer o que vc disse no passo-a-passo essa integração do hibernate com o vaadin. Eu [...]