Geração de PDFs indolor no PHP

12 de fevereiro de 2012 ~ Tags:

Tempos atrás escrevi um artigo sobre como gerar PDF dentro do Rails usando a gem wicked_pdf e o wkhtmltopdf. Como escrevi no post anterior, o wkhtmltopdf usa Webkit, a engine de renderização do Safari / Chrome para gerar a visualização do documento. Isso o torna superior se comparado com bibliotecas do PHP como o FPDF, pois, geralmente, essa bibliotecas possuem dificuldades para reproduzir efeitos de CSS.

Em um novo projeto, estou usando novamente o wkhtmltopdf, mas agora dentro do PHP. No post anterior, indiquei que você pode usar o binário disponível no site, entretanto no servidor atual, tive alguns problemas com isso. Então, se possível, compile o wkhtmltopdf direto da fonte.

Compilação passo-a-passo

Instale em seu servidor alguns pacotes que irá precisar:

  1. apt-get install openssl build-essential xorg libssl-dev libxrender-dev git-core

… e obtenha o código fonte recente do wkhtmltopdf:

  1. git clone git://github.com/antialize/wkhtmltopdf.git wkhtmltopdf
  2. git clone git://gitorious.org/+wkhtml2pdf/qt/wkhtmltopdf-qt.git wkhtmltopdf-qt

Veja, para usar o wkhtmltopdf você precisará do QT. Nesse caso também vamos compilá-lo manualmente:

  1. cd wkhtmltopdf-qt
  2. git checkout staging
  3. QTDIR=. ./bin/syncqt
  4. ./configure -nomake tools,examples,demos,docs,translations -opensource -prefix "../wkqt"
  5. make -j3 && make install
  6. cd ..

Com o QT gerado, você finalmente poderá compilar o wkhtmltopdf:

  1. cd wkhtmltopdf
  2. ../wkqt/bin/qmake
  3. make && make install

Não inventei a receita acima, mas ela funcionou perfeitamente no Debian. Com a compilação a pasta /usr/bin ganhou 2 novos executáveis: wkhtmltopdf e wkhtmltoimage. Com isso você já pode usar o utilitário pelo shell. Se quiser testá-lo, experimente:

PHP

Dentro do próprio site do wkhtmltopdf há uma classe em PHP para utilizar o aplicativo dentro do seu site, entretanto, optei por uma classe disponível no Github. Um simples exemplo, tirado do próprio repositório:

  1. try {
  2.     $wkhtmltopdf = new Wkhtmltopdf(array('path' => APPLICATION_PATH . '/../public/uploads/'));
  3.     $wkhtmltopdf->setTitle("Title");
  4.     $wkhtmltopdf->setHtml("Content");
  5.     $wkhtmltopdf->output(Wkhtmltopdf::MODE_DOWNLOAD, "file.pdf");
  6. } catch (Exception $e) {
  7.     echo $e->getMessage();
  8. }

O que o exemplo não mostra é como definir uma mensagem de rodapé. Só depois de algum tempo, percebi que o wkhtmltopdf busca um arquivo externo. No meu aplicativo, defino o rodapé dinamicamente:

  1. $wkhtmltopdf->setFooterHtml("footer.php?msg='Hello World!'");

Sem comentários ainda

Últimos textos do blog

Tagcloud

abraweb acadêmico actionscript ajax apache apple arteccom asp autosimulado backup benchmark beta bh blogosfera bookmarklet bookmarklets brasil browser censura chrome chucknorris cms codestacker concurso crítica css dashboard deployment desenvolvimento design dicas divinópolis dotmac download dreamhost economia editor empreendedorismo empreendorismo encontro estatísticas extreme programming feedburner firefox fireworks flash flickr ftp game git globo gmail golive google greasemonkey guerrilha hack host howto htaccess html humor ie inss internet banking iphone ipod is® javascript jquery layout leopard linux listas live locomotive mac meme microsoft miguxês minasonrails mod_rails mp3 msn mysql off tropic opensocial opera orkut oscommerce parser passenger pc personalidade pesquisa php plugin plugins pog portfolio produtividade publicidade rails raspberry refurbished regex resenha review ria rss ruby rádio safari sandbox screencast screensaver script.aculo.us seo shoutcast silverlight software spam startup stevejobs subversion suporte swf switch são paulo teste textmate trabalho tumblelog tumblr tutorial twitter ui uml usabilidade validação viral wallop web2.0 webalizer webdesign webdevelopment webkit webmail webmobile webobjects webstandards windows wordpress xml yahoo youtube

Veja todos os textos →