如何更改Prawn中的字体

我正在尝试做的是使用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 

要使用粗体和斜体,最好注册与标准PDF字体之一不冲突的字体系列:

 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