Como criar um arquivo pdf a partir de um HTML usando php e depois salvá-lo no servidor

Tenho um projeto para salvar páginas criadas dinamicamente com o php e armazená-las no servidor.

Estou planejando armazenar uma réplica da página como um pdf; com todas as suas imagens, mesas e layout.

Eu tentei usar essas ferramentas:

  • DOMPDF
  • FPDF

Mas eu honestamente não acho que está indo no caminho certo

Ter alguma solução ou essas ferramentas poderiam resolver esse problema?

De forosdelweb

Nós vamos criar uma class para fazer a conversão em convertToPDF.php

 'ejemplo' , 'pdfs/nuevo-ejemplo' if empty --> it will be random $content : content of the pdf $body : true or false. true --> add; , ,  to $content false --> do not alter the $content $style : the path of the CSS. It could be empty To load the css --> needs $body = true; $mode : true or false. true --> save the file on the server and then show it false --> ask where to save it $paper_1 : size of the paper[*] $paper_2 : style of the paper[*] [*] To see more options: --> http://code.google.com/p/dompdf/wiki/Usage#Invoking_dompdf_via_the_command_line /*----------------------------------------------------------*/ require_once("dompdf/dompdf_config.inc.php"); function doPDF($path='',$content='',$body=false,$style='',$mode=false,$paper_1='a4',$paper_2='portrait') { if( $body!=true and $body!=false ) $body=false; if( $mode!=true and $mode!=false ) $mode=false; if( $body == true ) { $content='      ' .$content. ' '; } if( $content!='' ) { //Añadimos la extensión del archivo. Si está vacío el nombre lo creamos $path!='' ? $path .='.pdf' : $path = crearNombre(10); //Las opciones del papel del PDF. Si no existen se asignan las siguientes:[*] if( $paper_1=='' ) $paper_1='a4'; if( $paper_2=='' ) $paper_2='portrait'; $dompdf = new DOMPDF(); $dompdf -> set_paper($paper_1,$paper_2); $dompdf -> load_html(utf8_encode($content)); //ini_set("memory_limit","32M"); //opcional $dompdf -> render(); //Creamos el pdf if($mode==false) $dompdf->stream($path); //Lo guardamos en un directorio y lo mostramos if($mode==true) if( file_put_contents($path, $dompdf->output()) ) header('Location: '.$path); } } function crearNombre($length) { if( ! isset($length) or ! is_numeric($length) ) $length=6; $str = "0123456789abcdefghijklmnopqrstuvwxyz"; $path = ''; for($i=1 ; $i<$length ; $i++) $path .= $str{rand(0,strlen($str)-1)}; return $path.'_'.date("dm-Y_H-is").'.pdf'; } 

O próximo passo é criar uma página nesse caso index.php

  Aquí pondriamos por ejemplo la consulta $html='  
Nombre Tipo Imagen Comentario Unidades Precio unidad
pensandoo icono iconito pensativo 3 10
fiesta icono 3 iconito festejando 1 24
silbando icono bombilla silbando 19 50
no no no icono 2 negacion 5 1
' ?> ... pero no tiene css if ( isset($_POST['PDF_6']) ) doPDF('',$html,true,'style.css',true); if ( isset($_POST['PDF_7']) ) doPDF('pdfs/nuevo-ejemplo',$html,true,'style.css',true); //lo guardamos en la carpeta pdfs ?>

PHP

FOROSDELWEB

Mostrar PDF sin CSS
Mostrar PDF con CSS
Mostrar PDF con CSS sin definir el nombre
Mostrar PDF con CSS y cambiando el formato de la hoja
Guardar y abrir PDF sin CSS
Guardar y abrir PDF con CSS sin definir el nombre
Guardar en otro directorio y abrir PDF con CSS

Finalmente você pode ter o arquivo para o estilo style.css

 body{ font:12px Arial, Tahoma, Verdana, Helvetica, sans-serif; background-color:#BECEDC; color:#000; } a h1{ font-size:35px; color:#FFF; } h2{ color:#FC0; font-size:15px; } table{ width:100%; height:auto; margin:10px 0 10px 0; border-collapse:collapse; text-align:center; background-color:#365985; color:#FFF; } table td,th{ border:1px solid black; } table th{ color:#FC0; } .menu{ background-color:#69C; color:#FFF; } .menu a{ color:#FFF; } 

Eu tive esse mesmo problema recentemente e encontrei fpdf para ser muito complicado quando seu HTML contém texto formatado e imagens. Eu tinha o administrador do meu servidor instalar Webkit HTML para PDF. Isso funciona muito bem.

Este pacote analisará a folha de estilo, as imagens, as tabelas e qualquer outro elemento no documento HTML, como se você tivesse aberto um navegador da Web usando o webkit e salvou a página da Web como um PDF.

http://code.google.com/p/wkhtmltopdf/

 /** * Use wkhtmltopdf to convert an HTML file to PDF * * @param string URL to web page * @param string Path to PDF file to be written * * @return boolean True if the command succeeded; false otherwise */ function htmlToPdf($source, $dest) { // Build command $command = "/usr/bin/wkhtmltopdf $source $dest 2>&1"; exec($command, $output); $s = sizeof($output) - 1; if (substr($output[$s], -4, 4) == 'Done') { return true; } return false; }