Converter HTML para PDF em PHP
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 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 ![]()
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"! ![]()
Maravilhoso
Valeu pelo post.
Baixei o dompdf mas esta dando erro na classe
Oi Cristiano, qual erro você está tendo?
Queria saber aonde eu adiciono a linha de comando para definir o tamanho da pagina no dompdf
Josué, da uma olhada na documentação do dompdf:
http://www.digitaljunkies.ca/dompdf/doc/
Olá… sua matéria é boa, mas gostaria de saber se ele tb converte arquivos .php…
abs
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
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!!!
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
?>
Na minha maquina funciono normalmente mais joguei pro servidor e não funciono, nem da erro nem nada…
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!!!
Desculpa… o código nao foi completo:
load_html($html);
$dompdf->render();
$dompdf->stream(”Teste HTML.pdf”);
?>
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”);
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?
estou com o seguinte erro:
Parse error: parse error in c:\dompdf\include\functions.inc.php on line 240
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!