Я столкнулся с похожей проблемой несколько месяцев назад. Это то, что я делаю прямо сейчас, и это отлично работает для меня:
1. Подавать активы в base64:
добавьте этот вспомогательный метод:
def asset_data_base64(path)
asset = Rails.application.assets.find_asset(path)
throw "Could not find asset '#{path}'" if asset.nil?
base64 = Base64.encode64(asset.to_s).gsub(/\s+/, "")
"data:#{asset.content_type};base64,#{Rack::Utils.escape(base64)}"
end
и в вашем шаблоне включите такие активы: (в примере используется haml)
= stylesheet_link_tag(asset_data_base64('pdf/pdf.css'))
= javascript_include_tag(asset_data_base64('pdf/pdf.js'))
2.пользовательские шрифты
переместите все ваши шрифты в папку в вашем проекте. (я поместил свой под vendor/assets/fonts
), затем добавьте новый файл инициализатора в свой config/initializers
if Rails.env.production?
font_dir = File.join(Dir.home, ".fonts")
Dir.mkdir(font_dir) unless Dir.exists?(font_dir)
Dir.glob(Rails.root.join("vendor","assets","fonts", "*")).each do |font|
target = File.join(font_dir, File.basename(font))
File.symlink(font, target) unless File.exists?(target)
end
end
замените Rails.root.join("vendor","assets","fonts", "*")
на путь к папке, в которую вы поместили все файлы шрифтов.
затем в вашем css не используйте font-face, используйте имя шрифта напрямую, например. font-family: Gotham;
Кроме того, не используйте резервные шрифты! В некоторых версиях wkhtmltopdf всегда используется резервный шрифт, если он предоставлен.
=============================================
- Я научился трюку base64 отсюда: https://github.com/mileszs/wicked_pdf/issues/257
- Решение для пользовательских шрифтов было найдено здесь: http://www.mobalean.com/blog/2011/08/02/pdf-generation-and-heroku
person
Yurui Zhang
schedule
14.07.2014