前两天在谷歌搜资料的时候发现了我用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

最后修改:2024 年 02 月 27 日
如果觉得我的文章对你有用,请随意赞赏