如何在OS X上使用Arial字体和Prawn?

时间:2012-08-14 15:42:59

标签: ruby ruby-on-rails-3 prawn

我正在尝试使用ruby在OS X上使用Prawn生成PDF。我有以下内容:

font 'Arial'

Arial安装在我的Mac上。但是当我尝试生成PDF时,我收到以下错误:

Prawn::Errors::UnknownFont in ProjectsController#show
Arial is not a known font.

如何在Prawn中使用这种常用字体?事实上,除了Helvetica或Times New Roman之外几乎任何事情都会引发同样的错误。这是Rails 3.2应用程序的一部分。

如果我尝试直接加载字体ttf文件,根据Ashish的建议,我收到Bad font family消息:

RuntimeError (Bad font family):
  app/pdfs/quote_sheet_pdf.rb:29:in `page_top'
  app/pdfs/quote_sheet_pdf.rb:12:in `initialize'
  app/controllers/projects_controller.rb:9:in `new'
  app/controllers/projects_controller.rb:9:in `block (2 levels) in show'
  app/controllers/projects_controller.rb:7:in `show'
  config/initializers/quiet_assets.rb:7:in `call_with_quiet_assets'

3 个答案:

答案 0 :(得分:28)

如果您使用:style选项拨打text,例如

text "Hello World", :style => :italic

然后你当时使用的字体需要有一个相关的字体系列,否则你会看到你所看到的“Bad font family”错误,例如:这样:

Prawn::Document.generate("output.pdf") do
  font "/Library/Fonts/Arial.ttf"
  text "Hello World", :style => :italic
end

生成:Bad font family (RuntimeError)

这样做的一种方法是始终在每次想要更改样式时指定所需的确切字体文件,例如

font "/Library/Fonts/Arial Italic.ttf"
text "Hello World"

更好的选择是创建一个包含所需样式的字体系列:

Prawn::Document.generate("output.pdf") do

  font_families.update("Arial" => {
    :normal => "/Library/Fonts/Arial.ttf",
    :italic => "/Library/Fonts/Arial Italic.ttf",
    :bold => "/Library/Fonts/Arial Bold.ttf",
    :bold_italic => "/Library/Fonts/Arial Bold Italic.ttf"
  })

  font "Arial"
  text "Hello World"
  text "Hello World", :style => :italic
  text "Hello World", :style => :bold
  text "Hello World", :style => :bold_italic
end

设置字体系列后,您只需使用Arial作为字体名称,即可轻松使用不同的样式。

答案 1 :(得分:5)

我在尝试加载这样的字体时遇到了同样的问题。

@pdf.font_families.update(
    'Arial' => { :normal => Rails.root.join('public/arial.ttf'),
                 :bold   => Rails.root.join('public/arialbd.ttf') }
)

Rails.root.join不会返回显式的String对象。解决方案是在表达式的末尾添加to_s。

@pdf.font_families.update(
  'Arial' => { :normal => Rails.root.join('public/arial.ttf').to_s,
               :bold   => Rails.root.join('public/arialbd.ttf').to_s }
)

通过 THER

答案 2 :(得分:4)

尝试将arial.ttf的完整路径传递给字体函数,如下所示 -

Prawn::Document.generate("custom_font_usage.pdf") do
  font "/path/to/fonts/arial.ttf"
  text "this is a test " * 20 
end

另请参阅一些相关的链接 -

  1. How many fonts are available in Prawn?
  2. Prawn文档 - http://rubydoc.info/gems/prawn/0.12.0/frames