目录
一、安装TCPDF类库
二、安装字体
三、使用TCPDF导出PDF文件
目的:PHP通过TCPDF类库导出文件为PDF。
开发语言及类库:ThinkPHP、TCPDF
效果图如下
一、安装TCPDF类库
在项目根目录使用composer安装TCPDF,安装完成后会在vendor目录下生成tecnickcom文件夹,就是TCPDF类库
composer require tecnickcom/tcpdf
二、安装字体
有时候导出的文件是乱码,是因为TCPDF不支持中文,所以需要下载中文字体,字体在网上可以搜索下载,把下载好的字体(ttf格式)放到“\tecnickcom\tcpdf\tools\”目录下,在此目录打开CMD,输入
php tcpdf_addfont.php -i .\msyh.ttf
执行成功后,在“\tecnickcom\tcpdf\fonts\”文件夹下生成相应的文件
三、使用TCPDF导出PDF文件
TCPDF类库和字体安装好后,就可以引用TCPDF导出PDF文件了
<?php
use tecnickcom\tcpdf\tcpdf;
public function exportPDF(){
$objPDF = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// 是否显示页眉
$objPDF->setPrintHeader(false);
// 是否显示页脚
$objPDF->setPrintFooter(true);
// 设置页脚的字体
$objPDF->setFooterFont(Array('msyh', '', '8'));
// 设置页脚距离底部的距离
$objPDF->SetFooterMargin('7');
// 设置默认等宽字体
$objPDF->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// 设置行高
$objPDF->setCellHeightRatio(1.5);
// 设置是否自动分页 距离底部多少距离时分页
$objPDF->SetAutoPageBreak(TRUE, '10');
$objPDF->setFontSubsetting(true);
$objPDF->AddPage();
// 设置字体
$objPDF->SetFont('msyh', '', 12, '', true);
// 调用拼接html代码方法
$pdf_html = $this->pdf_html($info,$list,$title);
$objPDF->writeHTMLCell(0, 0, '', '', $pdf_html, 0, 1, 0, true, '', true);
// 输出 四种模式 I输出、D下载、F保存本地、S输出二进制字符串
$objPDF->Output('test.pdf', 'D');
}
上面pdf_html方法是拼接html代码,里面的HTML代码可以根据自己需要修改。CSS样式并不是所有都支持,但也可以用其他HTML标签的代替,比如说font-weight就不支持,可以使用<b></b>代替。
public function pdf_html($info,$list,$title)
{
$html = '';
$html .= '<h2 style="text-align:center;"><b>'.$title.'</b></h2>
<table style="text-align:right">
<tr><td>班级:'.$info['grade'].'_'.$info['year'].$info['season'].'</td></tr>
<tr><td>总人数:'.$info['student'].'; 已交卷:'.$info['cmit'].'</td></tr>
<tr><td>导出时间:'.date('Y-m-d H:i:s',time()).'</td></tr>
</table>';
foreach ($list as $k => $v) {
$html .= '<div>
【'.$v['type'].'】 第'.($k+1).'题:'.$v['title'].'<br><span style="color: green;">【正确答案:'.$v['answer'].'】</span><b style="color: #1E9FFF"> 正确率:'.$v['percent'].'%</b>
</div>
<table border="1" style="text-align:center">
<colgroup>
<col width="40%">
<col width="10%">
<col width="50%">
<col>
</colgroup>
<tr style="background:#f2f2f2; ">
<th>选项</th>
<th>选择次数 / 人</th>
<th>比例</th>
</tr>
<tr>
<td style="text-align:left">A:'.$v['option_A'].'</td>
<td>'.$v['sel_A'].'</td>
<td>'.$v['percent_A'].'%</td>
</tr>
<tr>
<td style="text-align:left">B:'.$v['option_B'].'</td>
<td>'.$v['sel_B'].'</td>
<td>'.$v['percent_B'].'% </td>
</tr>
<tr>
<td style="text-align:left">C:'.$v['option_C'].'</td>
<td>'.$v['sel_C'].'</td>
<td> '.$v['percent_C'].'% </td>
</tr>
<tr>
<td style="text-align:left">D:'.$v['option_D'].'</td>
<td>'.$v['sel_D'].'</td>
<td> '.$v['percent_D'].'% </td>
</tr>
<tr>
<td style="text-align:left">E:'.$v['option_E'].'</td>
<td>'.$v['sel_E'].'</td>
<td> '.$v['percent_E'].'% </td>
</tr>
<tr>
<td style="text-align:left">F:'.$v['option_F'].'</td>
<td>'.$v['sel_F'].'</td>
<td> '.$v['percent_F'].'% </td>
</tr>
<tr>
<td style="text-align:left">G:'.$v['option_G'].'</td>
<td>'.$v['sel_G'].'</td>
<td> '.$v['percent_G'].'% </td>
</tr>
<tr>
<th>作答人数:'.$v['cmit_num'].' 人次</th>
<th></th>
<th></th>
</tr>
</table><br/>';
}
return $html;
}