PDFkit проблемы с JavaScript - PullRequest
       0

PDFkit проблемы с JavaScript

5 голосов
/ 25 февраля 2011

Я изучал использование PDFKit для создания отчетов в формате pdf для приложения на Rail 3, над которым я работаю.В основном, если я использую PDFKit в качестве промежуточного программного обеспечения, любая страница в приложении будет красиво отображаться в pdf, включая графики, сгенерированные javascript.

Однако я хочу использовать другой макет для отчетов pdf, который удаляет любую боковую панель или детали навигациипоэтому вместо использования промежуточного программного обеспечения я поиграл с добавлением следующего к соответствующему действию контроллера

format.pdf {               
               html = render_to_string(:action => "show.html.erb", :layout => "report.html.erb")
               kit = PDFKit.new(html) 
               kit.stylesheets << "#{Rails.root}/public/stylesheets/application.css"
               send_data kit.to_pdf, :filename => "file.pdf", :type => :pdf}

(я также попробовал более аккуратный вариант извлечения этой функциональности в опцию рендерера, как описывает Кац здесь но логика и проблема одинаковы)

Это определенно решает мою проблему с макетом, но похоже, что ни один из javascript-кодов приложения не запущен и графики больше не отображаются.Я взглянул на исходный код PDFKit, но не обнаружил каких-либо серьезных различий в способе создания PDF-файлов.

Я все еще нахожусь в ногах со многими вещами с помощью рельсов, поэтому я уверенэто, наверное, что-то довольно очевидное, что смотрит мне в лицо.Любые указатели, которые кто-либо может иметь, будет принята с благодарностью

Ответы [ 2 ]

7 голосов
/ 10 марта 2011

Это в основном то решение, с которым я столкнулся, оно примерно основано на действительно замечательном сообщении в блоге Каца

ActionController.add_renderer :pdf do |template, options|
  html = render_to_string template, options 
  html = translate_paths(html, env)
  kit = PDFKit.new(html) 
  css_files = Array.wrap(options.delete(:css)).each do |css_sheet|
    kit.stylesheets << "#{Rails.root}/public/stylesheets/#{css_sheet}.css"
  end
  send_data kit.to_pdf, :filename => options[:filename], :type => Mime::PDF
end 

Метод translate_paths в основном такой же, как метод, используемый в коде промежуточного программного обеспечения стойки PDKKit, который можно увидеть здесь и ниже

def translate_paths(body, env)
   # Host with protocol
   root = "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}/"
   body.gsub(/(href|src)=(['"])\/([^\"']*|[^"']*)['"]/, '\1=\2' + root + '\3\2')
end
1 голос
/ 11 декабря 2011
  1. add: print_media_type => true в качестве опции с промежуточным программным обеспечением, например: config.middleware.use "PDFKit :: Middleware",: print_media_type => true
  2. add: media => "все », включая ваши таблицы стилей
  3. в ваш файл таблицы стилей и добавьте следующее
@media print {     
  #id_of_divs_to_hide{
   display: none;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...