2016-11-17 8 views
4

То, что я пытаюсь сделать, это сгенерировать PDF-файл с использованием креветки, имея некоторые символы, специфичные для языка.Как изменить шрифт в Prawn

И в результате я получаю следующее сообщение об ошибке:

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." 

Так что я попытался изменить шрифт, делая это:

# 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 

Тем не менее, я получаю ту же ошибку, когда пытаясь создать файл PDF.

Любые идеи о том, как это решить?

ответ

15

prawn manual является отличной ссылкой и включает разделы по использованию шрифтов. Раздел «Внешние шрифты» особенно важен для вашей проблемы.

Вот основной случай, который должен работать, хотя он не поддерживает полужирный и курсивный:

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

Чтобы использовать жирный шрифт и курсив, это лучше зарегистрировать семейство шрифтов, который не конфликтует с одним из стандартных шрифтов 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 
+0

Как реализовать это в ячейке таблицы? –

0

Если вы строите свой PDF с помощью инициализации, вы можете просто обновить семейство шрифтов в методе инициализации, а затем установить нужный шрифт.

class InvoicePdf < Prawn::Document 

    def initialize() 
    super() 
    self.font_families.update("DejaVuSans" => {:normal => "#{Rails.root}/public/DejaVuSans.ttf"}) 
    font "DejaVuSans" 
    business_logo 
    invoice_items 
    footer 
    end 

    def business_logo 
    ##stuff here 
    end 

end