Подтвердить что ты не робот

Как использовать шрифт Arial с креветкой на OS X?

Я пытаюсь использовать ruby ​​для создания PDF файла с использованием Prawn на OS X. У меня есть следующее:

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'
4b9b3361

Ответ 1

Если вы используете параметр :style для вызовов на text, например

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

Тогда шрифт, который вы используете в то время, должен иметь ассоциированное семейство шрифтов, иначе вы получите ошибку "Плохое семейство шрифтов", которое вы видите, например. это:

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