公司的某项业务需要与用户线上签订协议,即用户在线手写一个签名,后台将公司公章信息和用户的签名以及合同信息生成一份PDF文件,供用户查看和下载。
比对了一些插件,我们最终决定使用dompdf这个插件,插件的github在这里:https://github.com/dompdf/dompdf。
// 引入命名空间
use Dompdf\Dompdf;
// 初始化dompdf对象
$dompdf = new Dompdf();
// 加载html文档内容
$dompdf->loadHtml('hello world');
// 设置纸张类型和方向
$dompdf->setPaper('A4', 'landscape');
// 渲染HTML为PDF
$dompdf->render();
// 流输出
$dompdf->stream();
插件对于字体和编码问题是这样形容的:
PDF documents internally support the following fonts: Helvetica, Times-Roman, Courier, Zapf-Dingbats, & Symbol. These fonts only support Windows ANSI encoding. In order for a PDF to display characters that are not available in Windows ANSI, you must supply an external font. Dompdf will embed any referenced font in the PDF so long as it has been pre-loaded or is accessible to dompdf and reference in CSS @font-face rules. See the font overview for more information on how to use fonts. The DejaVu TrueType fonts have been pre-installed to give dompdf decent Unicode character coverage by default. To use the DejaVu fonts reference the font in your stylesheet, e.g. body { font-family: DejaVu Sans; } (for DejaVu Sans). The following DejaVu 2.34 fonts are available: DejaVu Sans, DejaVu Serif, and DejaVu Sans Mono.
尝试了一下,默认带的字体是无法渲染中文的,使用CSS的@font
-face
引入会报错(也可能是我打开方式不对)。这样就只好自己引入一个字体了。
插件给了一个安装语言文件的工具,地址再这里:https://github.com/dompdf/utils。
使用步骤:
php load_font.php simkai /path/to/simkai.ttf
这样,我们就可以在html文档的css中使用font-family
属性来指定字体了。
html {
font-family: simkai;
}
插件应该是无法直接显示网络图片,所以需要将图片转换为BASE64格式才能显示。 将HTML文档中的所有图片转换为BASE64的方式:
function imgToBase64($html) {
$html = preg_replace_callback('/<img(?:.*?)src="(.*?)"(?:.*?)\/?>/', function($matches) {
$imageInfo = getimagesize($matches[1]);
$base64 = "" . chunk_split(base64_encode(file_get_contents($matches[1])));
$base64_image = 'data:' . $imageInfo['mime'] . ';base64,' . $base64;
return str_replace($matches[1], $base64_image, $matches[0]);
}, $html);
return $html;
}
这样转换其实性能影响挺大的,感觉性能不太好可以加一下缓存。
以上就是使用PHP转换HTML为PDF文档的方法以及常见问题解决办法,有没有帮到你呢~~
文章作者ianzhi,原文地址:https://www.dnote.cn/users/ianzhi/posts/shiyongPHPjiangHTMLzhuanhuanchengPDFwenjian%EF%BC%8Cjiejuewufashiyongchajiandewenti
文章版权归作者所有,转载请保留此声明。