Креветка с некоторыми смайликами для ttf-шрифта, неправильно отображающего текст - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть скрипт ruby ​​для генерации pdf-документа с текстом. В тексте содержатся смайлики.

Проблема с первой строкой текста состоит в том, что она печатает три смайлика, разделенных чем-то, что выглядит как крест, когда они должны быть одним смайликом (семья из трех человек).

Проблема со второй строкой в ​​том, что она просто печатает квадрат вместо намеченных эмодзи (скрытое лицо). Я пробовал с некоторыми другими шрифтами, но это все равно не сработает. Это шрифты:

DejaVuSans

ИГУМ

NotoSans-Medium

Я не могу найти проблему

Чего-то не хватает?

Я что-то не так делаю?

Драгоценные камни установлены и шрифты находятся в нужном месте

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"

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Оказывается, Креветка не знает, как анализировать присоединенные смайлики (те, которые образованы набором простых смайликов, соединенных \ u200D). Предполагается, что это делает креветка / эмодзи, но в регулярном выражении есть ошибка, используемая для идентификации смайликов, из-за которой объединенные смайлики должны рисоваться отдельно.

Кроме того, индекс и используемая галерея изображений немного устарели.

Решение состоит в том, чтобы заменить @ emoji_index.to_regexp в классе Drawer в исходном коде prawn / emoji для регулярного выражения, которое может распознавать присоединенные смайлики и обновлять галерею emoji, после этого запустите задачу для обновления индекса и вы хорошо идти.

Шрифты не имеют к этому никакого отношения.

0 голосов
/ 08 июня 2019

Я создатель креветок-эмодзи.

Конечно, prawn-emoji v2.1 или старше не может рисовать объединенные эмодзи, такие как ?‍?‍? и 1️⃣. https://github.com/hidakatsuya/prawn-emoji/issues/24

Итак, сегодня я выпустил prawn-emoji v3.0. Этот выпуск включает поддержку объединенных смайликов, таких как ?‍?‍? (последовательность ZWJ) и 1️⃣ (объединяющая последовательность), и переключение на Twemoji.

Подробнее см. Ниже.
https://github.com/hidakatsuya/prawn-emoji/blob/master/CHANGELOG.md

Пожалуйста, попробуйте использовать prawn-emoji v3.0, если хотите.

Надеюсь, эта помощь.

0 голосов
/ 14 октября 2018

Это работает.Вы можете найти коды символов для deja vu sans.

Вы также можете найти, какие шрифты поддерживают какие символы Unicode.Если вы видите пустое поле с Montserrat-Medium, это означает, что Unicode-символ не поддерживается, например, символ \u200D

Вот полезная ссылка для поиска, какие шрифты поддерживают этот символ - http://www.fileformat.info/info/unicode/char/200d/fontsupport.htm

Вот еще одна ссылка для кода \u{1F92B}, который является вашим shush emoji- 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

enter image description here

...