0

Prawn ドキュメントに Private Use Area ユニコードを含めようとしていますが、うまく機能させることができません。

このスレッドPrawn:Print unicode string in 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 

ありがとう

4

1 に答える 1

1

「raw」メソッドは Prawn メソッドではありません。RailsのOutputSafetyHelper メソッドです。私はあなたと同じエラーを受け取ります (ビューではなくモデルで 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 文字を出力できたため、(私の目的では) .html_safe 呼び出しは必要ないことがわかりました。

これは、グリフ アイコンをロードするテキスト呼び出しです。

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" }
}
于 2014-02-14T21:43:57.870 に答える