Ладно, сам отвечу. В SuperUser я задал аналогичный вопрос (сосредоточившись на ответах более теоретически), и основным выводом был ответ, что:
Не существует единого шрифта, поддерживающего весь Юникод.
но, к счастью, pdf поддерживает резервные шрифты, а также pawn gem.
вот мое решение:
1/ установите резервные шрифты
kai = "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf"
action_man_path = "#{Prawn::BASEDIR}/data/fonts/Action Man.dfont"
dejavu = "#{Prawn::BASEDIR}/data/fonts/DejaVuSans.ttf"
font_families.update("dejavu" => {
:normal => dejavu,
:italic => dejavu,
:bold => dejavu,
:bold_italic => dejavu
})
#Times is defined in prawn
font_families.update("times" => {
:normal => "Times-Roman",
:italic => "Times-Italic",
:bold => "Times-Bold",
:bold_italic => "Times-BoldItalic"
})
font_families.update("action_man" => {
:normal => { :file => action_man_path, :font => "ActionMan" },
:italic => { :file => action_man_path, :font => "ActionMan-Italic" },
:bold => { :file => action_man_path, :font => "ActionMan-Bold" },
:bold_italic => { :file => action_man_path, :font => "ActionMan-BoldItalic" }
})
font_families.update(
"kai" => {
:normal => { :file => kai, :font => "Kai" },
:bold => kai,
:italic => kai,
:bold_italic => kai
}
)
и
def fallback_fonts
["dejavu", "times", 'kai', 'action_man']
end
2/ звонок
font("Helvetica", size: 14) do #keyword "Helvetica" is specified in Prawn by default
text "址 foo", :fallback_fonts => fallback_fonts
end
Здесь я просто использую шрифты, которые включены в Prawn по умолчанию, но таким образом вы можете добавить несколько шрифтов с разными кодировками и просто указать их как резервные.
Например, вы можете разместить свои шрифты где-нибудь в корневом каталоге Rails и просто включить их оттуда.
примечание в шрифте "Kai", я указываю один и тот же шрифт для обычного, курсивного, полужирного, полужирного_курсивного без стилей. Я делаю это намеренно. Судя по тому, что я испытал, в шрифте gkai00mp нет жирных или курсивных символов. Поэтому, когда курсив/полужирный шрифт отображается, он будет напечатан в обычном стиле (что лучше, чем вообще не отображать).
Если я не укажу полужирный/курсивный шрифт для шрифта (например, «Кай»)...
font_families.update(
"kai" => {
:normal => { :file => kai, :font => "Kai" }
}
)
.. и вы пытаетесь отрендерить стилизованный char, который вернется к kai...
text "<b>址 foo</b>", :fallback_fonts => fallback_fonts, :inline_format=>true
...Я получу
Prawn::Errors::UnknownFont in Foo
is not a known font.
примечание 2: если вы хотите поместить не-ascii-символы в файл ruby, вам нужно поместить кодировку в начало файла.
# coding: utf-8
class Foo
...
end
это, однако, работает с ruby 1.9. Исходный код Ruby 1.8.x может обрабатывать только ASCII (подробнее об этом в пошаговом руководстве по Ruby 1.9 для ПК, но в Rails вы должны используйте I18n (интернационализация)
примечание 3
У Prawn действительно отличная документация, просто git clone prawn из github и проверьте ./manuals
person
equivalent8
schedule
19.06.2012