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

时间:2012-07-12 07:24:40

标签: java pdf unicode cjk wkhtmltopdf

我的HTML包含一些Unicode字符,并以“UTF-8”保存到磁盘。我可以用less来显示它,所有字符显示得很好:

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

但是当我使用“wkhtmltopdf”将其转换为PDF时,它会显示破碎的字符:

broken unicode

我的命令是:

wkhtmltopdf --encoding utf-8 book.html book.pdf

如何解决这个问题?

4 个答案:

答案 0 :(得分:10)

最后我找到了原因:我的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

我只是将它们全部上传,它解决了这个问题,虽然我不知道哪个字体是关键。

答案 1 :(得分:1)

我也有这个问题。原来,HTML文件具有meta标签,该标签设置了错误的charset。 例如,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>

答案 2 :(得分:0)

尝试     wkhtmltopdf-i386 book.html book.pdf

答案 3 :(得分:0)

如果您使用的是MS Windows机器(以上答案适用于X Windows字体服务器),以下内容对我有用:

  1. 您可以将YaHei或SimSun与wkhtmltoimage一起使用。

  2. 使用中文字母将内容明确地设置为您的样式中的新字体:

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

    这适用于美国Windows机器库存。此处针对其他人描述的字体回退有更强大的描述:Chinese Standard Web Fonts: A Guide to CSS Font Family Declarations for Web Design in Simplified Chinese

  3. 注意:由于GDI +沙箱限制,wkhtmltoimage二进制文件无法在Azure工作计算机上运行。您可以通过编写自己的Web服务包装器或使用此免费包装器来解决此问题:Convert HTML to PDF in .Net on Azure