我要做的是使用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文件时遇到了同样的错误。
关于如何解决这个问题的任何想法?
答案 0 :(得分:20)
prawn manual是一个很好的参考,包括有关字体用法的部分。 “外部字体”部分与您的问题特别相关。
这是一个应该有效的基本案例,虽然它不支持粗体和斜体:
custom-element[style] {
height:50px !important;
}
要使用粗体和斜体,最好注册与其中一种标准PDF字体不冲突的字体系列:
!important
答案 1 :(得分:2)
如果您使用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
答案 2 :(得分:-1)
我实际上进入了gems文件夹并进入了Prawn / font.rb。
我发现了以下功能:
white-space: pre-line
我对其进行了编辑,以包含Arial:
def font_families
@font_families ||= Hash.new { |h,k| h[k] = {} }.merge!(
{ "Courier" => { :bold => "Courier-Bold",
:italic => "Courier-Oblique",
:bold_italic => "Courier-BoldOblique",
:normal => "Courier" },
"Times-Roman" => { :bold => "Times-Bold",
:italic => "Times-Italic",
:bold_italic => "Times-BoldItalic",
:normal => "Times-Roman" },
"Helvetica" => { :bold => "Helvetica-Bold",
:italic => "Helvetica-Oblique",
:bold_italic => "Helvetica-BoldOblique",
:normal => "Helvetica" }
})
end
和中提琴!它起作用了!