最近在研究如何用PHP生成pdf文档,首先测试了tcpdf,但是它对html的样式支持不尽人意最后放弃了。
dompdf进入了我的视野,马上安装体验了一番
composer require dompdf/dompdf
现在假定你的环境是支持composer的
/**
* 生成dompdf
*/
public function create_dompdf()
{
$dompdf = new Dompdf();
$html = View::fetch('reportv2');
$dompdf->loadHtml($html,'UTF-8');
$dompdf->setPaper('A4','portrait');
$dompdf->render();
$filename = 'dom_'. date('His') .'.pdf';
$dompdf->stream($filename);
}
上述是调用Dompdf的代码,比较简单, 参照文档即可。运行结果如下
现在关键问题来了,如何正常显示中文呢
参考了此文章,并在此基础上进行了实际操作验证。
解决Dompdf中文乱码问题https://blog.csdn.net/hwhsong/article/details/88579332第一步:下载Dompdf的工具包
该工具包的Git地址为:https://github.com/dompdf/utils。
下载完成后,解压,复制其中的load_font.php文件到项目下的vendor/dompdf/dompdf目录下,与lib和src目录同级。
第二步:修改load_font.php文件
因为把该文件直接复制放在了dompdf目录下,因此需要修改加载autoloader的路径
// 1. [Required] Point to the composer or dompdf autoloader
//require_once "vendor/autoload.php";
require_once dirname(dirname(__DIR__)) . '/autoload.php';
第三步:下载字体文件
可以使用任意支持中文的字体文件,这里以微软雅黑(msyh)为例,该字体涉及版权,需要自行搜索下载,下载完成后,我们把该字体文件 msyh.ttf 直接放在load_font.php同一目录
第四步:安装字体文件
在放置load_font.php的dompdf目录下,使用系统命令行工具执行该文件,具体命令如下:
php load_font.php msyh msyh.ttf
注意:命令中的字体名称msyh不要加引号,否则后续将不可用。执行结果参考:
第五步:检查字体是否安装成功
如果字体安装成功,则可以在项目的vendor/dompdf/dompdf/lib/fonts目录中看到新生成的 msyh.ttf及 msyh.ufm文件。并且可以在该目录下的 installed-fonts.json 文件中看到如下相关信息:
{
"msyh": {
"normal": "msyh_normal_adfabab12a9c7844decdb414a59f4a61",
"bold": "D:\\xampp\\htdocs\\test\\vendor\\dompdf\\dompdf\/lib\/fonts\/msyh",
"italic": "D:\\xampp\\htdocs\\test\\vendor\\dompdf\\dompdf\/lib\/fonts\/msyh",
"bold_italic": "D:\\xampp\\htdocs\\test\\vendor\\dompdf\\dompdf\/lib\/fonts\/msyh"
}
}
使用中文字体:
关键的一句:body {font-family: "msyh";},指定字体名称
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>2022</title>
<link href="layui/css/layui.css" rel="stylesheet">
<style>
body {
font-family: "msyh";
}
</style>
</head>
<body>
<div class="layui-container">
<div class="layui-row">
<div class="layui-col-md12">
<h3>你好,中国!Hello China! 2022</h3>
</div>
</div>
</div>
</body>
</html>
看看效果吧!
然而这仅仅是开始,后面还遇到了好多问题。
dompdf中文乱码、换行解决方案https://blog.csdn.net/kelinfeng16/article/details/84135308