Креветки PDF и PUA unicode

Я пытаюсь включить юникод Private Use Area в документ Prawn, и мне не удается заставить его работать.

Я просмотрел эту ветку Креветка: печатать строку Unicode в PDF, но могу ' не заставит сыро работать. Я получаю такую ​​ошибку:

pdf.rb:90:in `block in <main>': undefined method `raw' for #<Prawn::Document:0x007fa579adfef0> (NoMethodError)

Без raw он не отображает глифы.

font("#{Prawn::DATADIR}/fonts/icons-webfont.ttf") do
text raw "unicode_for_\e501"
end 

Спасибо


person Grignani    schedule 01.11.2013    source источник


Ответы (1)


«Сырой» метод - это не метод креветок; это метод OutputSafetyHelper из Rails. Я получаю ту же ошибку, что и вы (я запускаю код Prawn в модели, а не в представлении), но, посмотрев на исходный код #raw, я понял, что все, что он делает, - это вызов String # html_safe. Заменил твой оригинал:

text raw "unicode_for_\e501"

с участием

text "unicode_for_\uE501".html_safe

Обратите внимание на следующее:

  1. Код Unicode, который вы хотите нам E501, и вам нужно выйти с \ u перед ним.
  2. Вы должны заключить строку в двойные кавычки, чтобы \ u правильно подобрался.
  3. .html_safe - это метод, который можно вызвать для строки.

Двойные кавычки и экранирование \ u важны, но я обнаружил, что (для моих целей) мне не нужен вызов .html_safe, потому что я мог печатать символы Unicode без него.

Это мой текстовый вызов, который загружает значок глифа:

pdf.font("vabicons") do
  pdf.text "\uE61d"
end

Для справки: я загружаю собственный шрифт из IcoMoon.io, и на все печатаемые символы должен ссылаться Unicode. Имейте в виду, что вам нужно, чтобы ваш шрифт был правильно объявлен, иначе даже правильно отформатированный текст может не отображаться.

Это мое объявление шрифта:

sym = Pathname.new( Rails.root.join('app', 'assets', 'stylesheets', 'fonts', 'vabicons.ttf').to_s )
pdf.font_families["vabicons"] = {
  :normal  => { :file => sym, :font => "Regular" }
}
person msenne    schedule 14.02.2014