需求:需要将HTML页面生成PDF文档
开发语言:PHP
使用TCPDF第三方类库进行生成,下载地址:http://sourceforge.net/projects/tcpdf/
核心代码:
1 public static function writePdf($content) 2 { 3 $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 4 $pdf->SetCreator(PDF_CREATOR); 5 6 $pdf->SetHeaderData("logo.jpg", 70, 'wanglibao Agreement' . '', ''); 7 $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); 8 $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); 9 $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); 10 $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); 11 $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 12 $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); 13 $pdf->AddPage(); 14 $pdf->setPageMark(); 15 $pdf->SetFont('stsongstdlight', '', 13); 16 $title = <<<EOD 17 <h2>标题</h2> 18 EOD; 19 20 $pdf->writeHTML($content, true, false, false, false, ''); 21 // $pdf->writeHTML($content, true, 0, true, true); 22 // $pdf->writeHTMLCell(0, 0, '', '', $content, 0, 1, 0, true, 'C', true); 23 $pdf->lastPage(); 24 $pdf->Output(date('Y-m-d') . '.pdf', 'I'); 25 }
TCPDF存在的问题:
问题:当页面中有表格的时候,有的时候TCPDF不将表格显示出来,或者是一个黑色的区块,导致不能正常的显示。
解决办法:使用TCPDF中的样式即可解决。
<table cellpadding="1" cellspacing="1" border="1" style="text-align:center;"> <tr> <td>C</td> <td>2C</td> <td>3C</td> <td>4F</td> </tr> <tr> <td>1C</td> <td>2C</td> <td>3C</td> <td>4F</td> </tr> </table>
问题:汉字显示??或者其他乱码,不能正常显示。
解决办法:
该问题分为两个,一个是PDF标题中汉字出现乱码。方案是设置$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN,'',PDF_FONT_SIZE_MAIN); 其中PDF_FONT_NAME_MAIN就是设置头部的字体编码。将PDF_FONT_NAME_MAIN设置为msungstdlight即可。
另一个是页面中出现乱码。同样是设置编码。在$pdf->writeHtml();或者$pdf->Cell();等之前设置$pdf->SetFont(msungstdlight,'', 字体大小);即可