用php打印到pdf?

时间:2010-12-29 08:53:27

标签: php pdf printing

我有一张类似以下发票的表格

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
 dir="<?php echo $direction; ?>"
 lang="<?php echo $lang; ?>"
 xml:lang="<?php echo $lang; ?>">
 <head> <title><?php echo $title;
 ?></title> <link rel="stylesheet"
 type="text/css" href="theme/<?php echo
 $template;
 ?>/stylesheet/stylesheet.css" />
 <style type="text/css"> body {
 background: #FFFFFF; } </style>
 </head> <body>

 <div style="page-break-after: always;
 "> <table width="100%">   <tr>
     <td width="auto" align="left"><a href="<?php echo $url_logo; ?>"
 title="<?php echo $_name; ?>"><?php
 echo "<img src=".$logo." alt=\"Logo
 Store\" style=\"border: none;\" />";
 ?></a></td>
     <td width="*" valign="middle"><h1><?php echo
 $heading_title; ?></h1></td>   </tr>
 </table><div class="line"></div>  
 <div class="div_">
     <table width="100%">
       <tr>
         <td>  
           <?php echo $_address; ?><br />
          <?php if ($telephone) { ?>
           <?php echo $store_telephone; ?><br />
           <?php } ?>
           <?php echo $_email; ?><br />         </td>
         <td align="right" valign="top">        <table>
             <?php if ($invoice_id) { ?>
             <tr>
               <td><b><?php echo $txt_invoice_id; ?></b></td>
               <td>:&nbsp;<?php echo $invoice_id; ?></td>
             </tr>
             <?php } ?> <?php if ($historys) { ?> <?php foreach ($historys as $history) { ?
             <tr>
               <td><b><?php echo $column_date_added; ?></b></td>
               <td>:&nbsp;<?php echo $history['date_added']; ?></td>
             </tr>
             <tr>
               <td><b><?php echo $column_status; ?></b></td>
               <td>:&nbsp;<?php echo $history['status']; ?></td>
             </tr>      <?php } ?>      <?php } ?>
             <tr>
               <td><b><?php echo $txt_order_id; ?></b></td>
               <td>:&nbsp;<?php echo $order_id; ?></td>
             </tr>      <?php if ($shipping_method) { ?>
             <tr>
               <td><b><?php echo $txt_shipping_method; ?></b></td>
               <td>:&nbsp;<?php echo $shipping_method; ?></td>
             </tr>      <?php } ?>
             <tr>
               <td><b><?php echo $txt_payment_method; ?></b></td>
               <td>:&nbsp;<?php echo $payment_method; ?></td>
             </tr>
           </table>
          </td>
       </tr>
     </table>   </div> </div> </body> </html>
通过http://www.mysite.com/index.php?print=page/invoice&id=952访问

发票表单 和发票延期是.tpl

我尝试过使用FPDF(http://www.fpdf.org/),但失败了,似乎FPDF与css不匹配,于是我尝试使用tcpdf(http://www.tcpdf.org) )关于来自http://www.tcpdf.org/examples/example_054.phps,但是只有PHP代码可见错误:例如<?php echo $history['status']; ?>

有没有人有经验或有问题?请在这里分享,或者有相同的样品?提前谢谢

3 个答案:

答案 0 :(得分:3)

最大的问题是,没有能够很好地处理HTML代码的库。

dom-pdf是一个非常好的,但是嵌套表仍有很大的问题。我猜你应该这样做。它也可以处理一下css。

安全问题: 要解决DOMPDF的安全问题,只需稍微修改DOMPDF以仅在cgi模式下运行,防止来自外部源的任何访问,并且只能从您的应用程序调用。

如果您可以自己创建表,我强烈建议您使用fpdf。你将无法处理任何CSS,但fpdf有很多格式化的可能性。

对于dom-pdf你有一个来自上面的kinjal的链接。和你已经找到的fpdf。

答案 1 :(得分:3)

正如Helle所说,FPDF是一个非常巧妙的工具,用于从PHP生成PDF。虽然使用FPDF,但您必须深入研究其手册,因为它不会将HTML转换为PDF。根据我的经验,FPDF使用起来相当简单,你不应该有太多麻烦。

答案 2 :(得分:1)

wkhtml使用WebKit渲染引擎,因此产生了出色的结果。有关详细信息,请参阅Converting html to pdf in php?上的答案。