私がやろうとしているのは、いくつかの言語固有の文字を使用しながら、Prawnを使用してPDFを生成することです。
その結果、次のエラーが発生します。
raise Prawn::Errors::IncompatibleStringEncoding,
"Your document includes text that's not compatible with the Windows-1252 character set.\n" \
"If you need full UTF-8 support, use TTF fonts instead of PDF's built-in fonts\n."
だから私はこれを行うことによってフォントを変更しようとしました:
# app/models/prawn/change_font_decorator.rb
Prawn::Document.generate("output.pdf") do
font_families.update("Arial" => {
:normal => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
:italic => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
:bold => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
:bold_italic => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf")
})
font "Arial"
end
それでも、PDFファイルを生成しようとすると、同じエラーが発生します。
これを解決する方法についてのアイデアはありますか?
エビのマニュアル は優れたリファレンスであり、フォントの使用法に関するセクションが含まれています。 「外部フォント」セクションは、特に問題に関連しています。
太字と斜体はサポートされていませんが、機能するはずの基本的なケースは次のとおりです。
Prawn::Document.generate("output.pdf") do
font Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf")
text "Euro €"
end
太字と斜体も使用するには、標準の1つと競合しないフォントファミリを登録することをお勧めしますPDF fonts:
Prawn::Document.generate("output.pdf") do
font_families.update("OpenSans" => {
:normal => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
:italic => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
:bold => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
:bold_italic => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf")
})
font "OpenSans"
text "Euro €"
end
Initializeを使用してPDFを構築している場合は、initializeメソッドでフォントファミリーを更新してから、目的のフォントを設定するだけです。
class InvoicePdf < Prawn::Document
def initialize()
super()
self.font_families.update("DejaVuSans" => {:normal => "#{Rails.root}/public/DejaVuSans.ttf"})
font "DejaVuSans"
business_logo
invoice_items
footer
end
def business_logo
##stuff here
end
end