[英]How to create a pdf file from an HTML using php, and then save it on the server
我最近遇到了同樣的問題,當您的 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;
}
我們將在 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ó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.