4

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

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

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

损坏的 unicode

我的命令是:

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

如何解决这个问题?

4

4 回答 4

13

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

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

于 2012-07-12T10:17:30.740 回答
3

我也遇到了这个问题。原来,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>
于 2018-08-28T04:57:42.113 回答
0

试试 wkhtmltopdf-i386 book.html book.pdf

于 2012-07-12T09:23:50.980 回答
0

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

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

  2. 将使用中文字母的内容显式设置为您样式中的新字体系列:

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

    这将适用于库存的美国 Windows 机器。此处对其他人描述的字体后备有更可靠的描述:中文标准网页字体:简体中文网页设计的 CSS 字体系列声明指南

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

于 2016-05-13T02:19:51.287 回答