我尝试使用PCollection<KV<Trade, String>>
(版本1.1)和wicked_pdf
宝石从html页面创建pdf。
我的html页面包含一个日历表情符号,无论我使用什么字体
wkhtmltopdf-binary
但是,当我尝试使用rails控制台中gem的<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv='content-type' content='text/html; charset=utf-8' />
<style>
unicode {
font-family: 'OpenSansEmoji', sans-serif;
}
@font-face {
font-family: 'OpenSansEmoji';
src: url(data:font/truetype;charset=utf-8;base64,<-- encoded_font_base64_string-->) format('truetype');
}
</style>
</head>
<body>
<div><unicode>📅</unicode></div>
</body>
</html>
方法生成PDF时,
WickedPdf.new.pdf_from_html_file
我得到以下结果:
PDF result with unknown character
如您所见,第一个日历图标已正确显示,但是显示第二个字符,我们不知道它来自何处。
我已根据相关帖子stackoverflow_emoji_wkhtmltopdf的建议,通过UTF-8和UTF-16编码以及代理对进行了调查,并查看了此问题wkhtmltopdf_git_issue,但仍无法使此字符生成消失!
如果您有任何线索,那就非常欢迎。
提前感谢您的帮助!
修改
根据Eric Duminil和petkov.np的评论,我可以确认 - 上面的代码在Linux上正常运行。这似乎是Linux vs MacOS问题。任何人都可以建议MacOS绑定中的核心问题以及是否可以修复它?
答案 0 :(得分:2)
我已多次编辑此答案,请参阅最后的注释以及评论。
我使用macOs 10.12.2并遇到同样的问题。我列出了所有浏览器等版本,但我怀疑最大的因素是OS / wkhtmltopdf版本。
我使用以下示例代码段:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8">
<style type="text/css">
p {
font-family: 'EmojiSymbols', sans-serif;
}
@font-face {
font-family: 'EmojiSymbols';
src: local('EmojiSymbols-Regular.woff'), url('EmojiSymbols-Regular.woff') format('woff');
}
span:before {
content: '\01F60B';
}
</style>
</head>
<body>
<p>
<span></span>
😋
😋
😋
</p>
</body>
</html>
我使用wkhtmltopdf
选项致电--encoding 'UTF-8'
。
您可以看到呈现的结果here(我很抱歉这个蹩脚的屏幕截图)。一些简短的结论:
wkhtmltopdf
可以渲染原始字节(排序),但不能正确呈现CSS content
属性。每个人都适当的&#39;这个奇怪的幻象符号后面出现了unicode符号。我已尝试过一切,但结果是一样的。 对我来说,即使Safari没有正确渲染原始字节这一事实也表明了一些特定于macOS的系统级问题。我不清楚这应该报告为wkhtmltopdf
问题或者macOs构建中存在一些行为不端的依赖。
编辑: Safari似乎工作正常,我的标记已被破坏。
编辑: CSS
解决方法可能会解决问题,请查看以下评论。
最终修改:如评论中所示,CSS&#39; hack&#39;解决问题的方法是使用text-rendering: optimizeLegibility;
。这似乎只在macOS / OS X上需要。
从我的评论中:
我刚刚发现了这个问题。乍一看似乎无关紧要,但添加了文本呈现:optimizeLegibility;我的样式删除了重复的字符(在macOS上)。为什么会发生这种情况超出了我作为问题的作者也使用 osx,显然这个操作系统的wkhtmltopdf构建存在一些问题。