Convertendo HTML para PDF em PHP

Hoje vamos entender como efetuar a conversão de um documento (X)HTML padrão para um documento PDF válido utilizando a biblioteca DOMPDF.

Instalando o DOMPDF

1. Faça o download do DOMPDF no site oficial da biblioteca. A versão que vou utilizar neste tutorial é a versão 0.5.1

2. Descompacte os arquivos do DOMPDF em um local acessível pelo seu servidor web.

3. Abra e edite o arquivo dompdf_config.inc.php.

  • Se você deixar o DOMPDF_PDF_BACKEND com o valor `auto`, o dompdf vai utilizar a extensão PDFLib se ela estiver instalada no seu servidor, caso contrário o dompdf vai utilizar a R&OS CPDF class (é uma biblioteca para criação de documentos PDF sem a necessidade da instalação de uma extensão adicional).
  • Dê permissão de escrita no caminho que aponta a variável DOMPDF_FONT_DIR (lib/fonts é o padrão).

4. Pronto!

Utilizando o DOMPDF

Vou dar um exemplo simples de utilização da biblioteca. Seguindo este exemplo, você consegue fazer tudo o que precisa para geração de arquivos PDF.

<?php
      $html = '
      <html>
      <head></head>
      <style>
      h1 {color:#333; size:20px; margin-bottom:5px;}
      h3 {color:#222;}
      </style>
      <body>
     
     <h1>IgorEscobar.com</h1>
     <h3>Desenvolvimento, Tecnologia e Informação, na ponta do lápis.</h3>
     
     </body>
     </html>';

     require_once("dompdf/dompdf_config.inc.php");
      
     $dompdf = new DOMPDF();
     $dompdf->load_html($html);
     $dompdf->set_paper('letter', 'landscape');
     $dompdf->render();
     $dompdf->stream("exemplo-01.pdf");
?>
  • O objeto load_html é responsável por receber o conteúdo HTML e fazer a conversão.
  • O objeto set_paper é responsável pela configuração do papel (formato) do arquivo pdf. No primeiro argumento, você escolhe o tamanho de cada folha; no segundo argumento, você escolhe se quer cada folha em paisagem ou fotografia.
  • No Parâmetro 1 você pode preencher com:4a0, 2a0, a0…a10, b0…b10, c0…c10, ra0…ra4, sra0…sra4, letter, legal, ledger, tabloid, executive, folio, commerical #10 envelope, catalog #10 1/2 envelope, 8.5×11, 8.5×14 e11x17.
  • No Parâmetro 2 você pode preencher com: portrait ou landscape.
  • O objeto render é responsável por imprimir, no documento, o código correspondente ao PDF e exibi-lo no browser.
  • O objeto stream é opcional. Se ele for setado, vai forçar o download do documento com o nome que você passar, caso contrário o documento será exibido na tela.

Resultado Final

DOMPDF 01DOMPDF 01

Dicas

  • Caso você precise gerar um documento PDF muito grande, é provável que o apache reclame do limite de memória. Para contornar este problema, basta aumentar a capacidade de memória alocada. Para isso é preciso alterar o memory_limit com a função ini_set do php. (ex: ini_set(“memory_limit”, “16M”); ).
  • O DOMPDF não funciona com todas as fontes. As fontes que são suportadas por ele podem ser encontradas em lib/fonts. Caso necessite instalar novas fontes, no site do oficial da biblioteca você pode encontrar maiores informações.
  • Caso você não consiga que as suas folhas de estilo sejam carregadas no corpo do pdf, coloque as regras diretamente no corpo do documento. Se mesmo assim não funcionar, coloque as regras utilizando a propriedade style em cada tag do html setando as mesmas, diretamente.

É isso, pessoal!

Posts Relacionados: