如何更改Prawn中的字体

Cat*_*lin 8 pdf ruby-on-rails 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."
Run Code Online (Sandbox Code Playgroud)

所以我尝试通过这样做来改变字体:

# 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
Run Code Online (Sandbox Code Playgroud)

然而,我在尝试生成PDF文件时遇到了同样的错误.

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

Jam*_*aly 22

所述对虾手册是一个很好的参考,并且包括关于字体用法部分."外部字体"部分与您的问题特别相关.

这是一个应该有效的基本案例,虽然它不支持粗体和斜体:

Prawn::Document.generate("output.pdf") do
  font Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf")
  text "Euro €"
end
Run Code Online (Sandbox Code Playgroud)

要使用粗体和斜体,最好注册与标准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
Run Code Online (Sandbox Code Playgroud)