【问题标题】:How do I use the Arial font with Prawn on OS X?如何在 OS X 上将 Arial 字体与 Prawn 一起使用?
【发布时间】:2012-08-14 15:42:58
【问题描述】:

我正在尝试使用 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'

【问题讨论】:

  • Prawn 有一小部分字体,它们嵌入到 gem 中。这是list of the available fonts。我不认为大虾可以使用操作系统中安装的字体。

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


【解决方案1】:

如果您使用: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作为字体名称,即可轻松使用不同的样式。

【讨论】:

    【解决方案2】:

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

    @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 }
    )
    

    通过 该R

    【讨论】:

      【解决方案3】:

      尝试将 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. 大虾文档 - http://rubydoc.info/gems/prawn/0.12.0/frames

      【讨论】:

      • 将完整路径传递给 ttf 文件似乎不起作用。我刚刚收到 Bad font family 错误。
      • 请发布完整的错误跟踪。你也尝试过任何其他“ttf”文件吗?
      • Verdana.ttf 文件也失败并显示相同的消息。
      猜你喜欢
      • 1970-01-01
      • 2011-04-21
      • 2012-01-21
      • 2017-01-07
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多