前两天在谷歌搜资料的时候发现了我用BookStack生成的内容,而且还是可以直接下载PDF的。好奇使然,我点击了一下,结果发现PDF中全是方块而不是方块字。
刚解决了LimeSurvey导出PDF的乱码问题,没想到这么快就得解决另一个了。
BookStack默认生成PDF用的是dompdf
,据作者在某个问题的回复中可以看到,采用这个方式是没办法改变中文乱码的问题的,只能使用wkhtmltopdf
方式。
安装wkhtmltopdf
可以使用yum install
直接安装,命令如下:
yum install wkhtmltopdf
只是这种方式安装的版本过低,可能会出现各类错误。如果真遇上了,建议还是手动安装。
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.centos7.x86_64.rpm -O wkhtmltox-0.12.6-1.centos7.x86_64.rpm
yum localinstall wkhtmltox-0.12.6-1.centos7.x86_64.rpm
然后安装字体配置工具
yum install -y fontconfig
安装完毕后将中文字体(比如Windows中的msyh.ttf或下载谷歌的Noto_Sans_SC字体)复制到linux系统usr/share/fonts下。再执行下面的命令:
fc-cache
配置BookStack
打开网站根目录下的.env
文件,在最后加入:
WKHTMLTOPDF=/usr/local/bin/wkhtmltopdf
ALLOW_UNTRUSTED_SERVER_FETCHING=true
保存后再次导出PDF,问题解决。
注意:BookStack的权限设置中,默认所有人都可以导出PDF,这也就是为什么谷歌在收录的时候直接把PDF导出的结果也给收进去了。如果怕别人一键下载了你的劳动成果,那么可以在权限配置中将导出功能取消掉。
参考资料
https://www.bookstackapp.com/docs/admin/pdf-rendering/
https://book.fanfou.dev/books/how-to-do/page/bookstack-pdf