最近在做一个笔记网站,想要做一个把笔记转成pdf的功能.尝试了许多方案,最终几乎完美地解决了,在此记录以供参考.
前记
在正文之前,介绍一下尝试过的解决方案以及踩的坑.
使用LibreOffice的命令行
composer包: viterbit/liboffice-converter
这个方案只要在linux中安装了中文字体,基本不会出现中文乱码问题,但是无法使用css样式等.
centos7安装字体命令
yum groupinstall Fonts
使用spipu/html2pdf
这也是一个比较流行的composer包,经过github上的资料,虽然解决了中文乱码的问题,但是还有其他问题:
- 无法使用css和样式
- 默认会出现中文乱码
- 对于不支持的标签会直接报错,比如
<header></header>
,<xmp></xmp>
第三个问题虽然可以简单地写一个字符串替换,但还是不够完美,而且无法使用css样式.
使用dompdf/dompdf
这个算是至此为止最好的解决方案了,有如下好处:
- 支持css和样式
- 支持H5的规则,css 的
@import
,url()
都能正常使用 - PHP原生
- 默认有乱码问题,但是有很好的方案,直接在css引入字体就行,不过要注意使用完整uri,比如
http://xxx.ttf
这个方案似乎是最好的,但是最终会出现一个奇怪的问