代码之家  ›  专栏  ›  技术社区  ›  Absalon Castañon

虾与一些表情的ttf字体不能正确呈现文本

  •  8
  • Absalon Castañon  · 技术社区  · 6 年前

    第一行文本的问题是,它打印出三个表情符号,当它们应该是一个表情符号(三个成员的家庭)时,它们之间用看起来像十字架的东西隔开。

    第二行的问题是,它只打印一个正方形,而不是预期的表情(shush face)。

    德哈武桑

    ipam公司

    三叶草培养基

    我找不到问题

    少了什么吗?

    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"
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Absalon Castañon    6 年前

    原来Prawn不知道如何解析连接的emojis(由一组由\u200D连接的简单emojis组成的emojis)。Prawn/emoji应该可以做到这一点,但是regex上有一个bug,用于识别emojis,从而导致连接的emojis被分开绘制。

    此外,索引和图像库使用是有点过时。

    解决方法是替换@emoji_索引到\u regexp在类抽屉中,在prawn/emoji源代码中为一个regex,可以识别加入的emojis并更新emoji库,之后运行任务来更新索引,就可以开始了。

    字体与此无关。

        2
  •  1
  •   hidakatsuya    6 年前

    当然,对虾表情v2.1或更高版本不能绘制像¨和1这样的联合表情。 https://github.com/hidakatsuya/prawn-emoji/issues/24

    所以今天,我发布了对虾表情3.0版。这个版本包括对加入表情符号的支持,比如¨¨(ZWJ序列)和1(组合序列),以及切换到Twemoji。


    https://github.com/hidakatsuya/prawn-emoji/blob/master/CHANGELOG.md

    如果您愿意,请尝试使用虾表情3.0版。

        3
  •  0
  •   arjun    6 年前

    它确实有用。你可以 look up 似曾相识者的字符码。

    \u200D

    这里有一个有用的链接,可以搜索支持该字符的字体- http://www.fileformat.info/info/unicode/char/200d/fontsupport.htm

    下面是代码的另一个链接 \u{1F92B} ,这是你的shush表情- http://www.fileformat.info/info/unicode/char/1F92B/fontsupport.htm

    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
    

    enter image description here

    推荐文章