2011-02-25 15 views
5

Ben bir Ray 3 app için pdf raporları oluşturmak için PDFKit kullanarak arıyorum. Temelde ben appkit herhangi bir sayfa PDFKit kullanıyorum javascript oluşturulan grafikler dahil olmak üzere pdf güzelce oluşturulur.PDFkit javascript sorunları

Ancak, kenar çubuğu veya navigasyon bilgilerini herhangi kaldırır pdf raporları için farklı bir düzen kullanmak böylece yerine ben ilgili denetçi eylemine aşağıdaki ekleyerek uğraşırken edilmiş katman seçeneğini kullanarak istediğiniz

Bu kesinlikle benim düzen sorunu çözer ama göründüğü

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} 
(Katz here açıklar ama mantık ve problem aynıdır olarak ben de bir işleyici seçeneğine bu işlevi çıkarma daha düzgün seçeneği denedik) hiçbiri uygulamanın javascripts ar çalıştırılıyor ve grafikler artık görünmüyor. PDFKit kaynağına bir göz attım ama pdfs'nin üretilme biçiminde büyük farklılıklar göremedim.

Hala ayaklarımı raylı bir sürü şeyle buluyorum, bu yüzden muhtemelen yüzüme baktığım oldukça açık bir şey olduğundan eminim. Herkes olabileceğini bir işaretçiler büyük ölçüde

+0

mutlak forma tercüme edilmesi gerekir. Ayrıca, temelde bunu işaret eden PDFKit github sayfasının sorun giderme bölümü de vardır. Sıralı bir kez elimden geldiğimde çözümüm göndereceğim – Conor

cevap

7

mutluluk duyacağız Bu temelde kabaca Katz'ın gerçekten büyük blog post

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 yöntemine dayanmaktadır ben gittim çözüm temelde kullanılan aynı olduğu here ve aşağıda görülebilir PDKKit raf katman kodu

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
  1. eklenti: print_media_type => middlewar ile bir seçenek olarak doğrudur örneğin e: config.middleware.use "PDFKit :: Ara Katman",: print_media_type => true
  2. eklenti: Medya => "tümü" sizin stil dahil ederken
  3. Eğer stil dosyası eklemek aşağıdaki
bu wkhtmltopdf kaynak bulabilirsiniz böylece Aslında biraz daha dikkatle javascript yolları gibi görünüyor katman kaynağına bakarak
@media print {  
    #id_of_divs_to_hide{ 
    display: none; 
    } 
}