繁体   English   中英

如何使用 php 从 HTML 创建 pdf 文件,然后将其保存在服务器上

[英]How to create a pdf file from an HTML using php, and then save it on the server

我有一个项目来保存用 php 动态创建的页面并将它们存储在服务器上。

我打算将页面的副本存储为 pdf; 以及他们所有的图像、表格和布局。

我尝试使用这些工具:

但老实说,我不认为它走在正确的轨道上

有什么解决方案或者这些工具可以解决这个问题吗?

我最近遇到了同样的问题,当您的 HTML 包含格式化文本和图像时,我发现 fpdf 太复杂了。 我让我的服务器管理员将 Webkit HTML 安装到 PDF。 它工作得很好。

该包将解析 HTML 文档中的样式表、图像、表格和任何其他元素,就像您使用 webkit 打开 Web 浏览器并将网页保存为 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;
}

来自forosdelweb

我们将在 convertToPDF.php 中创建一个类来进行转换

<?php 
/*----------------------------------------------------------/* 

$path     : name of the file pdf (without the extension) 
                i.e.: --> 'ejemplo' , 'pdfs/nuevo-ejemplo' 
                if empty --> it will be random 

$content  : content of the pdf 

$body     : true or false. 
                true  --> add; <doctype>, <body>, <head> 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=' 
        <!doctype html> 
        <html> 
        <head> 
            <link rel="stylesheet" href="'.$style.'" type="text/css" /> 
        </head> 
        <body>' 
            .$content. 
        '</body> 
        </html>'; 
    } 

    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("d-m-Y_H-i-s").'.pdf';     
} 

下一步是在这种情况下创建一个页面 index.php

<?php 

include('convertToPDF.php'); 

//$html= --> Aquí pondriamos por ejemplo la consulta 
$html=' 
<img src="http://pxd.me/dompdf/www/images/title.gif"/> 

<table> 
    <tr> 
        <th>Nombre</th> 
        <th>Tipo</th> 
        <th>Imagen</th> 
        <th>Comentario</th> 
        <th>Unidades</th> 
        <th>Precio unidad</th>     
    </tr>     
    <tr> 
        <td>pensandoo</td> 
        <td>icono</td> 
        <td><img src="http://static.forosdelweb.com/fdwtheme/images/smilies/scratchchin.gif"/></td> 
        <td>iconito pensativo</td> 
        <td>3</td> 
        <td>10</td> 
    </tr> 
    <tr> 
        <td>fiesta</td> 
        <td>icono 3</td> 
        <td><img src="http://static.forosdelweb.com/fdwtheme/images/smilies/porra.gif"/></td> 
        <td>iconito festejando</td> 
        <td>1</td> 
        <td>24</td> 
    </tr> 
    <tr> 
        <td>silbando</td> 
        <td>icono</td> 
        <td><img src="http://static.forosdelweb.com/fdwtheme/images/smilies/silbar.gif"/></td> 
        <td>bombilla silbando</td> 
        <td>19</td> 
        <td>50</td> 
    </tr> 
    <tr> 
        <td>no no no</td> 
        <td>icono 2</td> 
        <td><img src="http://static.forosdelweb.com/fdwtheme/images/smilies/negar.gif"/></td> 
        <td>negacion</td> 
        <td>5</td> 
        <td>1</td> 
    </tr> 
</table> 
' 

?> 

<?php 

if ( isset($_POST['PDF_1']) ) 
    doPDF('ejemplo',$html,false); 

if ( isset($_POST['PDF_2']) ) 
    doPDF('ejemplo',$html,true,'style.css'); 

if ( isset($_POST['PDF_3']) ) 
    doPDF('',$html,true,'style.css'); 

if ( isset($_POST['PDF_4']) ) 
    doPDF('ejemplo',$html,true,'style.css',false,'letter','landscape');  

if ( isset($_POST['PDF_5']) ) 
    doPDF('ejemplo',$html,true,'',true); //asignamos los tags <html><head>... 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     
?> 

<!doctype html> 
<html> 

<head> 
    <link rel="stylesheet" href="style.css" type="text/css" /> 
</head> 

<table class="header"> 
    <tr> 
        <td><a href="http://www.forosdelweb.com/f18/" target="_blank"><h1>PHP</h1></a></td> 
        <td><a href="http://www.forosdelweb.com/" target="_blank"><h2>FOROSDELWEB</h2></a></td> 
    </tr> 
</table> 

<table class="menu"> 
    <tr> 
        <td>Ejemplos para: <strong>dompdf</strong></td> 
        <td><a href="http://code.google.com/p/dompdf/wiki/Usage" target="_blank">Documentaci&oacute;n</a></td> 
        <td><a href="http://code.google.com/p/dompdf/source/browse/trunk/dompdf/dompdf_config.custom.inc.php?r=399" target="_blank">Define()</a></td> 
        <td><a href="http://pxd.me/dompdf/www/examples.php#samples" target="_blank">Ejemplos de dompdf</a></td> 
    </tr> 
</table> 

<body> 

<?php echo $html ?> 

<form  action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST"> 
<table> 
  <tr> 
    <td>Mostrar PDF sin CSS</td> 
    <td><input name="PDF_1" type="submit" value="CREAR" /></td> 
  </tr> 
  <tr> 
    <td>Mostrar PDF con CSS</td> 
    <td><input name="PDF_2" type="submit" value="CREAR" /></td> 
  </tr> 
  <tr> 
    <td>Mostrar PDF con CSS sin definir el nombre</td> 
    <td><input name="PDF_3" type="submit" value="CREAR" /></td> 
  </tr> 
  <tr> 
    <td>Mostrar PDF con CSS y cambiando el formato de la hoja</td> 
    <td><input name="PDF_4" type="submit" value="CREAR" /></td> 
  </tr> 
  <tr> 
    <td>Guardar y abrir PDF sin CSS</td> 
    <td><input name="PDF_5" type="submit" value="CREAR" /></td> 
  </tr> 
  <tr> 
    <td>Guardar y abrir PDF con CSS sin definir el nombre</td> 
    <td><input name="PDF_6" type="submit" value="CREAR" /></td> 
  </tr> 
  <tr> 
    <td>Guardar en otro directorio y abrir PDF con CSS</td> 
    <td><input name="PDF_7" type="submit" value="CREAR" /></td> 
  </tr>   

</table> 

</form> 

</body> 
</html> 

最后,您可以拥有样式 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; 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM