mPDF是一个PHP类库,它由UTF-8编码的HTML生成PDF文件。
Software: mPDF, Unicode-HTML Free PDF generator *
Version: 6.0
使用composer安装;或者直接将mPDF项目包全部拷贝至资源引入目录,此处不再赘述。
/*打印PDF详情页
* $url, 域名;
* $pro_id, 项目Id;
* $pro_types,机构类型;
* $waterMark,水印文字;
* $pro_serial,项目编号;
*/
function printPdf($url, $pro_id, $pro_types, $waterMark, $pro_serial)
{
require_once("libs/mpdf/mpdf.php");
$mpdf = new mPDF('utf-8', 'A4', '', '宋体', 0, 0, 20, 10);
//添加水印;
$mpdf->SetWatermarkText($waterMark, 0.1);//水印文字,透明度
$mpdf->showWatermarkText = true; //开启水印
if (preg_match("/([\x81-\xfe][\x40-\xfe])/", $waterMark, $match)) {
$mpdf->watermark_font = 'GB';
}
//获取内容;
$mpdf->useAdobeCJK = true;
$html = file_get_contents($url . '?m=Surveyor&a=surveyorDetail&act=detail&pro_id=' . $pro_id . '&pro_types=' . $pro_types);
//设置PDF页脚内容
$footer = '页码: {PAGENO} / {nb}
';
//添加页眉和页脚到pdf中
$mpdf->SetHTMLFooter($footer);
//设置pdf显示方式
$mpdf->SetDisplayMode('fullpage');
//创建pdf文件
$mpdf->WriteHTML($html);
//输出pdf
$mpdf->Output($pro_serial . '.pdf', 'I');//'D';下载模式
exit;
}
$mpdf = new mPDF('utf-8', 'A4', '', '宋体', 0, 0, 20, 10);
config_lang2fonts.php
中找到对应的代码,选择的语言不同默认的字体也是不同的,这里我们默认的是宋体。为避免在php封装函数中涉及大量的HTML混合文本,在项目使用应用中,采用file_get_contents
函数,获取需要生成PDF文档的网页版详情页,然后将mPDF的类调用进行二次封装。
$html = file_get_contents($url . '?m=Surveyor&a=surveyorDetail&act=detail&pro_id=' . $pro_id . '&pro_types=' . $pro_types);
//添加水印;
$mpdf->SetWatermarkText($waterMark, 0.1);//水印文字,透明度
$mpdf->showWatermarkText = true; //开启水印
if (preg_match("/([\x81-\xfe][\x40-\xfe])/", $waterMark, $match)) {
$mpdf->watermark_font = 'GB';
}
$mpdf->Output($filename,$type);
//$type='I';在线预览模式
//$type='D';下载模式
//$type='f';生成后保存到服务器
//$type='s';返回字符串,此模式下$filename会被忽视
为了便于排版,项目初期采用table表格进行排版。一是为了配合word文档的排版模式,而是表格的排版也是简单实用。
<table align="center" border="1" cellpadding="0" width="90%">
<tr>
<td colspan="4" class="title_td">机构信息td>
tr>
<tr>
<td align="center" width="30%" class="evenTd">机构名称td>
<td colspan="3" align="center">{$data1["agency_name"]}td>
tr>
<tr>
<td align="center" class="evenTd">机构负责人td>
<td colspan="3" align="center">{$data1["agency_contact"]}td>
tr>
<tr>
<td align="center" class="evenTd">联系方式td>
<td colspan="3" align="center">{$data1["agency_phone"]}td>
tr>
<tr>
<td align="center" class="evenTd">机构地址td>
<td colspan="3" align="center">{$data1["agency_address"]}td>
tr>
<tr>
<td align="center" class="evenTd">机构级别td>
<td colspan="3" align="center">{$data1["agency_level"]}td>
tr>
table>
<table style="overflow: wrap">
$mpdf->shrink_tables_to_fit=0
<table autosize="1">
<div style="width: 89.5%;border: 1px solid #000;margin:0 auto;text-align: left;font-size:16px;overflow: wrap;">
<div style="float: left;display: inline;width: 15%;" class="evenTd">传承脉络div>
<div style="float: left;display: inline;width: 85%;">{$data3["pro_vein"]}div>
div>
换成div的排版,成功解决。
@lockdata.cn