web-dev-qa-db-ja.com

エビのフォントを変更するにはどうすればよいですか

私がやろうとしているのは、いくつかの言語固有の文字を使用しながら、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ファイルを生成しようとすると、同じエラーが発生します。

これを解決する方法についてのアイデアはありますか?

9
Catalin

エビのマニュアル は優れたリファレンスであり、フォントの使用法に関するセクションが含まれています。 「外部フォント」セクションは、特に問題に関連しています。

太字と斜体はサポートされていませんが、機能するはずの基本的なケースは次のとおりです。

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
22
James Healy

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
3
Patrick Jones