使用wkhtmltopdf时,Unicode字符会被转换为损坏的符号

5

我有一些包含Unicode字符的HTML代码,已经以“UTF-8”保存到磁盘中。我可以使用less命令来展示它,所有的字符都能正确地显示:

<h1>什么是Action?</h1>
<p>Play程序接收到的大部分请求,都是由<code>Action</code>来处理的。

但是,当我使用“wkhtmltopdf”将其转换为PDF时,它显示出乱码字符:
我的指令是:
wkhtmltopdf --encoding utf-8 book.html book.pdf

如何解决这个问题?
4个回答

15

最终我找到了原因:我的Ubuntu服务器没有Unicode字体。

我从本地Ubuntu上传了一些TrueType字体到服务器,一切都正常了。

freewind@freewind:/usr/share/fonts$ cd truetype/
freewind@freewind:/usr/share/fonts/truetype$ ls
arphic             ttf-dejavu               ttf-lao
freefont           ttf-devanagari-fonts     ttf-liberation
kochi              ttf-gujarati-fonts       ttf-malayalam-fonts
msttcorefonts      ttf-indic-fonts-core     ttf-oriya-fonts
openoffice         ttf-japanese-gothic.ttf  ttf-punjabi-fonts
sazanami           ttf-japanese-mincho.ttf  ttf-tamil-fonts
takao              ttf-kacst-one            ttf-telugu-fonts
thai               ttf-kannada-fonts        unfonts
ttf-bengali-fonts  ttf-khmeros-core         wqy

我只是把所有字体都上传了,这样就解决了问题,尽管我不知道哪种字体是关键。


3
如果别无选择,你可以使用Code 2000字体,该字体包含大量的字形——是当前比较完整的Unicode字体之一。http://en.wikipedia.org/wiki/Code2000 - dda
请接受这个答案,因为它解决了问题。我为此苦苦挣扎了一段时间,原因是我在没有正确编码的情况下编写(源HTML)文件 new StreamWriter(this.path, false, System.Text.Encoding.UTF8) - 这可能有很多不同的失败原因 :) - Joel Peltonen
我也用相同的方法在CentOS上解决了这个问题。只需将本地Mac中的Arial.ttf/Library/Fonts复制到远程服务器的/usr/share/fonts/local(我自己创建了local目录)。然后运行fc-cache -v以更新,就可以解决问题了。 - WebQube
我遇到了与转换网站http://www.odialanguage.com/相同的问题。我已经尝试通过导入字体来解决问题。您能否帮助我确定我缺少什么? - Amogh
安装 Code 2000 字体对我很有效。 - oeter

3

我也遇到了这个问题。原来是HTML文件中的标签设置了错误的字符集。 例如,HTML文件中有:

<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<style>

当我将字符集改为utf-8时,问题得到了解决:

<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<style>

是的,这个对我也起了作用,我只是没有定义字符集。 - Dennis

0
如果您使用的是 MS Windows 操作系统(上述答案适用于 X Windows 字体服务器),以下方法适用于我:
  1. 你可以在wkhtmltoimage中使用YaHei或SimSun。

  2. 使用中文字符显式设置内容到新的字体族系:

    .smsnotification_chinese {
        font-size: 30px;    
        font-family: "Microsoft Yahei", SimSun;
    }
    

    这适用于标准美国Windows机器。对于其他用户,此处提供了更为强大的字体回退说明:CSS字体族声明指南——中国标准Web字体

  3. 注意:wkhtmltoimage二进制文件由于GDI+沙盒限制,在Azure工作机器上无法使用。您可以通过编写自己的Web服务包装器或使用此免费包装器来解决此问题:.Net中在Azure上将HTML转换为PDF


0

尝试使用 wkhtmltopdf-i386 book.html book.pdf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接