有一些表情符号的虾用于ttf-font无法正确呈现文本

Abs*_*ñon 8 ruby prawn truetype emoji

我有一个ruby脚本来生成带有一些文本的pdf文档.该文本中包含表情符号.

第一行文本的问题在于,当它们应该是单个表情符号(三个成员的家族)时,它会打印三个表情符号,这些表情符号看起来像十字架.

第二行的问题是它只打印一个正方形而不是预期的表情符号(嘘脸).我尝试过其他一些字体,但它仍然无法正常工作.这些是字体:

DejaVuSans

IPAM

NotoSans介质

我找不到问题

有什么遗漏?

难道我做错了什么?

安装宝石,字体在正确的位置

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"
Run Code Online (Sandbox Code Playgroud)

Abs*_*ñon 1

事实证明,Prawn 不知道如何解析连接的表情符号(由一组由 \u200D 连接的简单表情符号组成的表情符号)。Prawn/emoji 应该可以做到这一点,但用于识别表情符号的正则表达式存在一个错误,导致连接的表情符号被单独绘制。

此外,所使用的索引和图片库有点过时了。

解决方案是在 prawn/emoji 源代码中的 Drawer 类中替换 @emoji_index.to_regexp 为一个可以识别加入的表情符号并更新表情符号库的正则表达式,然后运行更新索引的任务就可以了去。

字体与此无关。