我有一些包含Unicode字符的HTML代码,已经以“UTF-8”保存到磁盘中。我可以使用less命令来展示它,所有的字符都能正确地显示:
<h1>什么是Action?</h1>
<p>Play程序接收到的大部分请求,都是由<code>Action</code>来处理的。
但是,当我使用“wkhtmltopdf”将其转换为PDF时,它显示出乱码字符:
我的指令是:
wkhtmltopdf --encoding utf-8 book.html book.pdf
如何解决这个问题?
我有一些包含Unicode字符的HTML代码,已经以“UTF-8”保存到磁盘中。我可以使用less命令来展示它,所有的字符都能正确地显示:
<h1>什么是Action?</h1>
<p>Play程序接收到的大部分请求,都是由<code>Action</code>来处理的。
wkhtmltopdf --encoding utf-8 book.html book.pdf
最终我找到了原因:我的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
我只是把所有字体都上传了,这样就解决了问题,尽管我不知道哪种字体是关键。
我也遇到了这个问题。原来是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>
你可以在wkhtmltoimage中使用YaHei或SimSun。
使用中文字符显式设置内容到新的字体族系:
.smsnotification_chinese {
font-size: 30px;
font-family: "Microsoft Yahei", SimSun;
}
这适用于标准美国Windows机器。对于其他用户,此处提供了更为强大的字体回退说明:CSS字体族声明指南——中国标准Web字体
注意:wkhtmltoimage二进制文件由于GDI+沙盒限制,在Azure工作机器上无法使用。您可以通过编写自己的Web服务包装器或使用此免费包装器来解决此问题:.Net中在Azure上将HTML转换为PDF
尝试使用 wkhtmltopdf-i386 book.html book.pdf
Code 2000
字体,该字体包含大量的字形——是当前比较完整的Unicode字体之一。http://en.wikipedia.org/wiki/Code2000 - ddanew StreamWriter(this.path, false, System.Text.Encoding.UTF8)
- 这可能有很多不同的失败原因 :) - Joel PeltonenArial.ttf
从/Library/Fonts
复制到远程服务器的/usr/share/fonts/local
(我自己创建了local
目录)。然后运行fc-cache -v
以更新,就可以解决问题了。 - WebQubeCode 2000
字体对我很有效。 - oeter