在服务器上使用wkhtmltopdf实现Unicode和自定义字体

3
我有一个HTML页面,通过wkhtmltopdf转换为PDF。在我的本地机器上,一切都很好,阿拉伯字体、PDF 转换,新自定义字体都没有问题。我使用了@font-face、本地存储的字体和 utf-8 编码。没有问题。
但是在服务器上,不仅(1)阿拉伯字符会变成黑色方块,连(2)普通英文字体(如 Georgia 和 Impact)也无法正常工作。PDF 是以简单的 sans-serif 渲染的。即使渲染成功,有时也不会产生输出。我已经在我的 CSS 上添加了 @font-face 规则,但是 wkhtmltopdf 似乎没有识别它们。我知道这些字体和路径在服务器上没问题,因为 HTML 页面使用相同的 CSS 样式表,它可以完美地呈现。
如果我用简单的纯文本而没有任何奇怪的字体,wkhtmltopdf 就能正常工作。
有什么想法吗?这与在服务器上有关吗?我的本地机器是 Windows 7,服务器运行 Linux。

1
如果可以的话,请尝试在服务器上运行以下命令:mkfontdirmkfontscalefc-list。您需要的字体是否出现在最后一个命令生成的列表中? - Joel Peltonen
谢谢 - 我尝试了那些命令。 不,Georgia和Impact字体在服务器上不存在。这是否意味着我需要升级托管计划以请求更多字体?即使字体未安装,Wkhtmltopdf在我的本地机器(Windows)上运行良好 - 因为在我的机器上它响应@font-face。 - user961627
我真的很惊讶你的Win系统上没有Impact和Georgia字体,我认为它们几乎是通用的 :). 我无法提供太多帮助(这就是为什么我没有添加答案)。可能存在法律问题,但您可以尝试在服务器上的~/.fonts文件夹中添加字体,然后再次运行'mkfontdir'等命令,看看是否有所帮助。很抱歉帮不上忙!(我还会尝试使用许多不同的CSS替代方案,看看它们是否有任何效果,因为它们似乎非常棘手http://code.google.com/p/wkhtmltopdf/issues/detail?id=36&q=font) - Joel Peltonen
1个回答

1
问题解决了。我确实需要升级我的托管计划,以便可以使用X11运行wkhtmltopdf静态二进制文件。尽管Linux机器上只有一些Nimbus字体,但通过添加字体文件并使用@font-face css规则,阿拉伯语和其他字体对我来说都很好用。
另外注意:为了正确呈现使用自定义阿拉伯字体文件的阿拉伯文本,我使用FontSquirrel生成所需的字体文件和css规则,在“Expert”渲染选项下选择“无子集化”。

请问您能否分享一下如何使用wkHTMLPDF以及使用哪种编程语言的代码?我需要它来运行乌尔都字体。 - Volatil3
1
我使用PHP来运行直接的Linux wkhtmltopdf命令。你也可以使用这个封装器:http://mikehaertl.github.io/phpwkhtmltopdf/ 最终,我转而使用PrinceXML。它确实有一些问题,但总体上对于我的问题来说是更好的解决方案。 - user961627

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