Convertendo HTML para PDF em PHP
Igor Escobar on Out 10th 2008
Hoje vou ensinar 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
- 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
- Descompacte os arquivos do DOMPDF em um local acessível pelo seu servidor web.
- 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 onde aponta a variável
DOMPDF_FONT_DIR(lib/fonts é o padrão)
- 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 a partir
-
<?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>
-
';
-
?>
-
<?php
-
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. O Primeiro argumento você escolhe o tamanho de cada folha, o segundo argumento você escolhe se você quer cada folha em paisagem ou fotografia.
-
- No Parametro 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.5x11, 8.5x14 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, ele vai forçar o download do documento com o nome que você passar, caso contrário o documento será exibido na téla.
Resultado Final
Dicas
- Caso você precise gera 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 suportada 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, caso mesmo assim não funcionar, coloque as regras utilizando a propriedade style em cada tag do html setando as mesmas, diretamente.
É isso pessoal!
Aproveito e faço o convite para quem ainda não assinou, assinar o conteúdo RSS do meu blog!
[ ]'s
Filed in Curiosidades, PHP, Utilidades | 5 responses so far

Neto Out 10th 2008 at 09:03 pm 1
Muito loca essa class PHP, valeu pela dica!
Rafael Lucio Dez 1st 2008 at 07:09 pm 2
É boa mesmo.. só fiquei curioso por uma coisa….
ela é capaz de renderizar até imagens?
Igor Escobar Dez 1st 2008 at 07:26 pm 3
Funciona assim cara
Garota Geek Dez 10th 2008 at 08:33 am 4
Igor, em comparação com a classe fpdf o que acha? Vale a pena migrar?
Igor Escobar Dez 10th 2008 at 09:15 am 5
@Garota Geek
Gostei muito desta biblioteca por que consegui resultados muito mais satisfatórios do que a FPDF.
O Suporte que esta biblioteca da para folhas de estilo ea própria estilização inline é muito bacana, muio próxima do que realmente é, testei as 2 já e a que tive melhores resultados em todos os sentidos foi sem dúvida a DOMPDF, eu recomendo.
Pode ser que para você a FPDF seja melhor, não sei, é tudo questão de avaliar cada caso.