2016-11-17 100 views
4

我想要做的是使用虾生成一个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文件。

关于如何解决这个问题的任何想法?

回答

15

prawn manual是一个很好的参考资料,并包括字体使​​用的部分。 “外部字体”部分与您的问题特别相关。

下面是应该工作基本情况,虽然它不支持粗体和斜体:

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 
+0

如何在表格单元中实现? –

0

如果您使用初始化建立你的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