by Stiod Desenvolvimento Web
Assine nosso RSS

Converter HTML para PDF em PHP

Rafael SDM Sierra
No Gravatar

Esse tipo de trabalho é muito usado em projetos que o cliente precisa de versões impressas de relatórios, e existem algumas formas de se converter um html pra pdf pelo shell do linux, usando `html2ps` e `ps2pdf`, porém, nem sempre seu cliente vai ter isso instalado no servidor (e nem sempre ele será linux).

Por isso existe uma biblioteca chamada dompdf, ela converte diretamente um html para um pdf, seu uso é extremamente simples, basta que você importe o arquivo dele
[php]
// Lembre-se que esse caminho pode variar dependendo de sua instalacao
require_once("lib/dompdf/dompdf_config.inc.php");
$dompdf = new DOMPDF();
$html = "Teste de PDF \

Teste de HTML pra PDF

Foo bar

\

fuba

";
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("Teste HTML.pdf");
[/php]

E pronto, quando você abrir essa página no navegador ele já irá trazer o documento PDF :D
A biblioteca dompdf suporta CSS também, o que ajuda muito na hora de gerar o pdf "bunitin, mais informações podem ser encontradas direto no site oficial http://dompdf.sourceforge.net

Mais um post da série "facil de mais"! :)

16 Responses to “Converter HTML para PDF em PHP”

  1. Marcelo Rodrigo WiebbellingNo Gravataron 11 Sep 2007 at 10:58 pm

    Maravilhoso :) Valeu pelo post.

  2. cristianoNo Gravataron 13 Sep 2007 at 8:55 pm

    Baixei o dompdf mas esta dando erro na classe :(

  3. Rafael "SDM" SierraNo Gravataron 14 Sep 2007 at 11:05 am

    Oi Cristiano, qual erro você está tendo?

  4. JosuéNo Gravataron 08 Oct 2007 at 10:22 am

    Queria saber aonde eu adiciono a linha de comando para definir o tamanho da pagina no dompdf

  5. Rafael "SDM" SierraNo Gravataron 08 Oct 2007 at 3:40 pm

    Josué, da uma olhada na documentação do dompdf:

    http://www.digitaljunkies.ca/dompdf/doc/

  6. Marcos TavaresNo Gravataron 30 Oct 2007 at 8:52 am

    Olá… sua matéria é boa, mas gostaria de saber se ele tb converte arquivos .php…

    abs

  7. Rafael "SDM" SierraNo Gravataron 30 Oct 2007 at 2:00 pm

    Marcos, se o que você quer é converter o código-fonte PHP, basta abri-lo com o “fopen” e jogar o conteúdo do arquivo dentro do $html, mas se o que você quer é jogar o resultado de execução de um script PHP, então você pode usar o output buffer[1] e o include para resolver seu problema

    [1] - http://br.php.net/manual/en/ref.outcontrol.php

  8. MarcosNo Gravataron 30 Oct 2007 at 2:37 pm

    Olá…

    Na verdade eu gostaria de pegar uma página em PHP e transformá-lo em PDF… ou seja.. o cliente ao clicar em um determinado link, a página que será aberta será convertida em PDF, e a página é em PHP…eu nunca usei o output buffer[1], vc poderia me dar uma explicação sobre esse comando?

    Obrigado pela força e abraços!!!

  9. Rafael "SDM" SierraNo Gravataron 30 Oct 2007 at 4:02 pm

    Marcos, pra você pegar o conteúdo de um script PHP, você pode fazer algo como:

    < ?
    ob_start();
    include("pagina_que_voce_quer.php");
    $html = ob_get_contents()
    ob_end_clean();
    // E aqui você gera o PDF
    ?>

  10. Raphael AzeredoNo Gravataron 31 Oct 2007 at 11:53 am

    Na minha maquina funciono normalmente mais joguei pro servidor e não funciono, nem da erro nem nada…

  11. MarcosNo Gravataron 01 Nov 2007 at 4:14 pm

    Obrigado pelaforça Rafael, eu fiz dessa forma:

    load_html($html);
    $dompdf->render();
    $dompdf->stream(”Teste HTML.pdf”);
    ?>

    e deu esse erro:

    Warning: is_readable() [function.is-readable]: open_basedir restriction in effect. File(/imagens/contrato_testeira.jpg) is not within the allowed path(s): (/home/restricted/home/saquaremaempresarial:/tmp:/usr/share/pear) in /home/restricted/home/saquaremaempresarial/public_html/biblioteca/include/image_cache.cls.php on line 131

    Fatal error: Uncaught exception ‘PDFlibException’ with message ‘PDFlib::rect() expects parameter 4 to be double, string given’ in /home/restricted/home/saquaremaempresarial/public_html/biblioteca/include/pdflib_adapter.cls.php:591 Stack trace: #0 /home/restricted/home/saquaremaempresarial/public_html/biblioteca/include/pdflib_adapter.cls.php(591): PDFlib->rect(0, 792, 640, ‘auto’) #1 /home/restricted/home/saquaremaempresarial/public_html/biblioteca/include/block_renderer.cls.php(58): PDFLib_Adapter->filled_rectangle(0, 0, 640, ‘auto’, Array) #2 /home/restricted/home/saquaremaempresarial/public_html/biblioteca/include/renderer.cls.php(180): Block_Renderer->render(Object(Table_Frame_Decorator)) #3 /home/restricted/home/saquaremaempresarial/public_html/biblioteca/include/renderer.cls.php(91): Renderer->_render_frame(’block’, Object(Table_Frame_Decorator)) #4 /home/restricted/home/saquaremaempresarial/public_html/biblioteca/include/renderer.cls.php(132): Renderer->render(Object(Table_Frame_Decorator)) #5 /home/restricted/home in /home/restricted/home/saquaremaempresarial/public_html/biblioteca/include/pdflib_adapter.cls.php on line 591

    O que pode ser????

    abrços!!!

  12. MarcosNo Gravataron 01 Nov 2007 at 4:16 pm

    Desculpa… o código nao foi completo:

    load_html($html);
    $dompdf->render();
    $dompdf->stream(”Teste HTML.pdf”);
    ?>

  13. MarcosNo Gravataron 01 Nov 2007 at 4:17 pm

    ini_set(”allow_url_fopen”, 1);
    $contrato = $_GET['idContrato'];

    require_once(’/home/restricted/home/saquaremaempresarial/public_html/biblioteca/dompdf_config.inc.php’);

    ob_start();
    include(”http://www.saquaremaempresarial.com.br/contrato_fechado.php?idContrato=$contrato”);
    $html = ob_get_contents();
    ob_end_clean();

    $dompdf = new DOMPDF();
    //$html = “$pagina”;
    $dompdf->load_html($html);
    $dompdf->render();
    $dompdf->stream(”Teste HTML.pdf”);

  14. battistiNo Gravataron 08 Nov 2007 at 10:42 am

    Esta dompdf é muito boa mas tem umas limitações que estão me deixando de cabelo em pé, estou pensando em partir para uma solução proprietária. Alguém ai conhece alguma que seja boa?

  15. junior oliveiraNo Gravataron 28 Nov 2008 at 11:50 am

    estou com o seguinte erro:
    Parse error: parse error in c:\dompdf\include\functions.inc.php on line 240

  16. junior oliveiraNo Gravataron 28 Nov 2008 at 12:45 pm

    sobre: Parse error: parse error in c:\dompdf\include\functions.inc.php on line 240 - ja esta Ok.
    agora pagina fica em branco, e não aparece o PDF…

    valeu!

Trackback URI | Comments RSS

Leave a Reply