Prawn with some emojis for ttf-font not rendering text correctly
Prawn with some emojis for ttf-font not rendering text correctly
我有一个 ruby 脚本来生成带有一些文本的 pdf 文档。文本中包含表情符号。
文本第一行的问题在于它打印了三个表情符号,它们被看起来像十字的东西隔开,而实际上它们应该是一个表情符号(三个成员的家庭)。
第二行的问题是它只打印了一个正方形而不是预期的表情符号(嘘脸)。
我试过其他一些字体,但还是不行。这些是字体:
DejaVuSans
ipam
NotoSans-Medium
我找不到问题
有什么遗漏吗?
我是不是做错了什么?
gems 已安装,字体在正确的位置
require "prawn"
require "prawn/emoji"
require "prawn/measurement_extensions"
$pdf = Prawn::Document.new(:page_size => [200.send(:mm),200], :margin => 0)
$pdf.font "./resources/Montserrat-Medium.ttf"
st = "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}".encode("UTF-8")
st2="\u{1F92B}".encode("UTF-8")
$pdf.draw_text st,:at => [10, 100]
$pdf.draw_text st2,:at => [10, 80]
$pdf.render_file "test.pdf"
确实有效。您可以look up deja vu sans 的字符代码。
您还可以搜索哪些字体支持哪些 Unicode 字符。如果您看到带有 Montserrat-Medium 的空框,则表示不支持 unicode 字符,例如字符 \u200D
这里有一个有用的 link 搜索支持该字符的字体 - http://www.fileformat.info/info/unicode/char/200d/fontsupport.htm
这是代码 \u{1F92B}
的另一个 link,这是你的嘘声表情符号 - http://www.fileformat.info/info/unicode/char/1F92B/fontsupport.htm
DejaVuSans 和 Montserrat-Medium 都不支持它。
require 'prawn'
require 'prawn/emoji'
Prawn::Document.generate 'foo.pdf' do
font "./resources/Montserrat-Medium.ttf"
text "For Montserrat-Medium"
text "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}".encode("UTF-8")
text "\u{1F92B}"
text " "
font './resources/DejaVuSans.ttf'
text " For DejaVuSans"
text "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}".encode("UTF-8")
text "\u{1F92B}"
end
原来大虾不知道如何解析连接的表情符号(由\u200D连接的一组简单表情符号组成的表情符号)。 Prawn/emoji 应该这样做,但用于识别表情符号的正则表达式存在错误,导致连接的表情符号被单独绘制。
索引和使用的图片库也有点过时了。
解决方案是在 class 抽屉中替换 @emoji_index.to_regexp ,在 prawn/emoji 源代码中为可以识别加入的表情符号并更新表情符号库的正则表达式,之后运行 更新索引的任务,您就可以开始了。
字体与它无关。
我是 prawn-emoji 的创造者。
当然prawn-emojiv2.1以上的不能像和1️⃣那样画joined-emojis。
https://github.com/hidakatsuya/prawn-emoji/issues/24
所以今天,我发布了 prawn-emoji v3.0。此版本包括对联合表情符号的支持,如 (ZWJ Sequence) 和 1️⃣(Combining Sequence),并切换到 Twemoji。
详情请见下文。
https://github.com/hidakatsuya/prawn-emoji/blob/master/CHANGELOG.md
如果愿意,请尝试使用 prawn-emoji v3.0。
希望对您有所帮助。
我有一个 ruby 脚本来生成带有一些文本的 pdf 文档。文本中包含表情符号。
文本第一行的问题在于它打印了三个表情符号,它们被看起来像十字的东西隔开,而实际上它们应该是一个表情符号(三个成员的家庭)。
第二行的问题是它只打印了一个正方形而不是预期的表情符号(嘘脸)。 我试过其他一些字体,但还是不行。这些是字体:
DejaVuSans
ipam
NotoSans-Medium
我找不到问题
有什么遗漏吗?
我是不是做错了什么?
gems 已安装,字体在正确的位置
require "prawn"
require "prawn/emoji"
require "prawn/measurement_extensions"
$pdf = Prawn::Document.new(:page_size => [200.send(:mm),200], :margin => 0)
$pdf.font "./resources/Montserrat-Medium.ttf"
st = "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}".encode("UTF-8")
st2="\u{1F92B}".encode("UTF-8")
$pdf.draw_text st,:at => [10, 100]
$pdf.draw_text st2,:at => [10, 80]
$pdf.render_file "test.pdf"
确实有效。您可以look up deja vu sans 的字符代码。
您还可以搜索哪些字体支持哪些 Unicode 字符。如果您看到带有 Montserrat-Medium 的空框,则表示不支持 unicode 字符,例如字符 \u200D
这里有一个有用的 link 搜索支持该字符的字体 - http://www.fileformat.info/info/unicode/char/200d/fontsupport.htm
这是代码 \u{1F92B}
的另一个 link,这是你的嘘声表情符号 - http://www.fileformat.info/info/unicode/char/1F92B/fontsupport.htm
DejaVuSans 和 Montserrat-Medium 都不支持它。
require 'prawn'
require 'prawn/emoji'
Prawn::Document.generate 'foo.pdf' do
font "./resources/Montserrat-Medium.ttf"
text "For Montserrat-Medium"
text "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}".encode("UTF-8")
text "\u{1F92B}"
text " "
font './resources/DejaVuSans.ttf'
text " For DejaVuSans"
text "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}".encode("UTF-8")
text "\u{1F92B}"
end
原来大虾不知道如何解析连接的表情符号(由\u200D连接的一组简单表情符号组成的表情符号)。 Prawn/emoji 应该这样做,但用于识别表情符号的正则表达式存在错误,导致连接的表情符号被单独绘制。
索引和使用的图片库也有点过时了。
解决方案是在 class 抽屉中替换 @emoji_index.to_regexp ,在 prawn/emoji 源代码中为可以识别加入的表情符号并更新表情符号库的正则表达式,之后运行 更新索引的任务,您就可以开始了。
字体与它无关。
我是 prawn-emoji 的创造者。
当然prawn-emojiv2.1以上的不能像和1️⃣那样画joined-emojis。 https://github.com/hidakatsuya/prawn-emoji/issues/24
所以今天,我发布了 prawn-emoji v3.0。此版本包括对联合表情符号的支持,如 (ZWJ Sequence) 和 1️⃣(Combining Sequence),并切换到 Twemoji。
详情请见下文。
https://github.com/hidakatsuya/prawn-emoji/blob/master/CHANGELOG.md
如果愿意,请尝试使用 prawn-emoji v3.0。
希望对您有所帮助。