2013-11-01 1 views
0

Я пытаюсь включить юникод в частную область использования в документ Prawn и не могу заставить его работать.Prawn PDF & PUA unicode

Я просмотрел эту тему Prawn:Print unicode string in PDF, но не могу сделать сырую работу. Я получаю эту ошибку:

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

Без сырья, он не отображает символы.

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

Благодаря

ответ

1

'сырой' метод не метод Прона; это OutputSafetyHelper method от Rails. Я получаю ту же ошибку, что и вы (я использую код креветки в модели, а не в представлении), но, посмотрев на источник для #raw, я понял, что все, что он делает, вызывает String # html_safe. Я заменил оригинал:

text raw "unicode_for_\e501" 

с

text "unicode_for_\uE501".html_safe 

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

  1. код Unicode вы хотите, чтобы мы E501, и вам нужно бежать с \ и перед ним.
  2. Вы должны использовать двойные кавычки вокруг своей строки, чтобы гарантировать, что вас правильно подобрали.
  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" } 
}