我会尽力帮助你翻译。这段内容与IT技术有关,提到了PDF字体和Unicode编码。在SuperUser上有人提出类似问题,询问是否有一种字体支持所有的Unicode字符。主要结论是没有这样的字体存在,但幸运的是PDF和prawn gem支持回退字体。下面是提供的解决方案:首先设置回退字体。
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
})
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
text "址 foo", :fallback_fonts => fallback_fonts
end
现在,我只是使用Prawn默认包含的字体,但是这样您可以添加几个具有不同字符集的字体,并将它们指定为备选字体
例如,您可以将字体放在Rails根目录的某个位置,然后从那里包含它们
注意 在“Kai”字体中,我没有加任何样式地指定了普通、斜体、粗体、粗斜体相同的字体。我故意这样做。从我的经验来看,gkai00mp字体没有粗体或斜体字符。所以当斜体/粗体字符被渲染时,它将以正常风格打印(这比不渲染要好)。
如果我不为字体(例如“Kai”)指定粗体/斜体字体..
font_families.update(
"kai" => {
:normal => { :file => kai, :font => "Kai" }
}
)
...而且您尝试呈现的样式化字符将会回退到楷体字...
text "<b>址 foo</b>", :fallback_fonts => fallback_fonts, :inline_format=>true
我会获取...
Prawn::Errors::UnknownFont in Foo
is not a known font.
注意 2:如果您想在 Ruby 文件中使用非 ASCII 字符,则需要在文件顶部放置编码。
class Foo
...
end
然而,这只适用于 Ruby 1.9。Ruby 1.8.x 只能处理 ASCII(更多信息请参见 P.C. 的 Ruby 1.9 Walkthrough)但在 Rails 中,您应该使用 I18n(国际化)。
注3
Prawn 有非常好的文档,只需从 GitHub 克隆 prawn 并检查 ./manuals。