わかりました、自分で答えるつもりです。スーパーユーザーについて、私は同様の質問をしました(より理論的な方法での回答に焦点を当てています)、そして主な結論は次のように答えることでした:
Unicode全体をサポートする単一のフォントはありません。
しかし幸いなことに、pdfはフォールバックフォントとエビの宝石もサポートしています。
これが私の解決策です:
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フォントには太字の文字や斜体の文字がありません。したがって、斜体/太字の文字がレンダリングされると、通常のスタイルで印刷されます(まったくレンダリングしないよりも優れています)。
フォントに太字/斜体のフォントを指定しない場合(例:「Kai」)。
font_families.update(
"kai" => {
:normal => { :file => kai, :font => "Kai" }
}
)
..そしてあなたはkaiにフォールバックするスタイル付きcharをレンダリングしようとします...
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
ただし、これはruby1.9から機能します。Ruby 1.8.xソースはASCIIのみを処理できます(PCによるruby 1.9ウォークスルーで詳しく説明し
ますが、RailsではI18n(国際化)を使用する必要があります
注3
エビには本当に素晴らしいドキュメントがあります。githubからエビのクローンを作成して./manualsを確認してください。