html-pdf 在 CentOS 上的问题

在最近的项目中写了一个 Feature,大概的功能是获取一个产品的详情、渲染成 HTML、然后用 html-pdf 生成为 PDF 下载。


这是一个比较简单的功能,但是在今天测试的时候发现了问题:通过测试服务器下载文件「乱码」-- 文字显示都变成了一个个方块,只有数字显示正常,大概长这样:




乱码?
测试服务器是 CentOS,而我之前也没有遇到过这样的问题,因此「乱码」是率先进入我脑海的词汇。


于是乎,我在现有的代码上纠结了很久,主要尝试了下面两种方法:


声明了 Content-type 中的 charset:
res.set('Content-type', 'application/pdf; charset=utf-8');
2.在使用 html-pdf 生成的 Buffer 声明编码:


res.end(buffer, 'utf-8');
当然这两者都于事无补。


此后,搜索的关键词也从"response", "charset", "encoding","html-pdf"的排列组合变成了 "CentOS", "html-pdf", "font"。


皇天不负有心人,总算在 Github 上找到了一个相关的 issue: CentOS text does not render :


Solved by install system fonts.
循着这条线索,很快在 StackOverFlow 上找到了解决问题的问题,解决方法如下:


yum install cjkuni-ukai-fonts
这样,生成的 PDF 文件就不再「乱码」了。


当然,也可以安装更完整的中文字体支持,如下:


yum groupinstall "chinese support"
"html-pdf"模块使用的 PhantomJS 模拟 Webkit 访问之前模板生成 HTML 然后用 "Screen Capture" 的方式生成 PDF 文件:


Since PhantomJS is using WebKit, a real layout and rendering engine, it can capture a web page as a screenshot. Because PhantomJS can render anything on the web page, it can be used to convert contents not only in HTML and CSS, but also SVG and Canvas.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值