Как использовать шрифт 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'
Ответы
Ответ 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
Ответ 3
попробуйте передать полный путь arial.ttf к функции шрифта, как показано ниже -
Prawn::Document.generate("custom_font_usage.pdf") do
font "/path/to/fonts/arial.ttf"
text "this is a test " * 20
end
Также см. ссылки, которые имеют значение -