2011-02-25 26 views
5

मैं रेल 3 ऐप के लिए पीडीएफ रिपोर्ट जेनरेट करने के लिए पीडीएफकिट का उपयोग करने में देख रहा हूं, जिस पर मैं काम कर रहा हूं। असल में यदि मैं पीडीएफकिट का उपयोग मिडलवेयर के रूप में करता हूं तो ऐप में पृष्ठ को जावास्क्रिप्ट जेनरेट किए गए ग्राफ सहित पीडीएफ में अच्छी तरह से प्रस्तुत किया जाता है।पीडीएफकिट जावास्क्रिप्ट मुद्दे

हालांकि, मुझे लगता है कि में से किसी को हटा साइडबार या नेविगेशन विवरण पीडीएफ रिपोर्ट के लिए एक अलग लेआउट का उपयोग करें ताकि बजाय मिडलवेयर विकल्प मैं चारों ओर प्रासंगिक नियंत्रक कार्रवाई करने के लिए निम्नलिखित जोड़ने के साथ खेल रहे हैं का उपयोग कर चाहते

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} 

(मैं भी एक रेंडरर विकल्प के लिए यह कार्यक्षमता निकालने की neater विकल्प की कोशिश की के रूप में Katz here का वर्णन करता है, लेकिन तर्क और समस्या एक ही हैं)

यह निश्चित रूप से मेरे लेआउट समस्या का हल है, लेकिन ऐसा लगता है कि में से कोई भी ऐप की जावास्क्रिप्ट आर ई चल रहा है और ग्राफ अब दिखाई नहीं दे रहे हैं। मैंने पीडीएफकिट स्रोत पर एक नज़र डाली थी लेकिन मैं पीडीएफ के उत्पादन के तरीके में किसी भी बड़े अंतर को नहीं देख सका।

मैं अभी भी रेल के साथ कई चीजों के साथ अपने पैरों को ढूंढ रहा हूं, इसलिए मुझे यकीन है कि यह शायद कुछ स्पष्ट है जो मुझे चेहरे पर देख रहा है। किसी भी संकेत दिए गए किसी हो सकता है बहुत सराहना की जाएगी

+0

असल मिडलवेयर स्रोत थोड़ा और ध्यान से यह जावास्क्रिप्ट रास्तों कैसा दिखता है पर देख रहे हैं, ताकि wkhtmltopdf संसाधन प्राप्त कर सकते उनके निरपेक्ष रूप में अनुवाद किया जाना चाहिए। पीडीएफकिट गिथब पेज का एक मुसीबत शूटिंग खंड भी है जो मूल रूप से इसे भी इंगित करता है। एक बार मैंने इसे हल करने के बाद यहां अपना समाधान पोस्ट करूंगा – Conor

उत्तर

7

यह मूलतः समाधान मैं साथ चला गया जो मोटे तौर पर Katz के वास्तव में महान 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 पद्धति पर आधारित है है मूल रूप से में इस्तेमाल किया वैसा ही है जैसा PDKKit रैक मिडलवेयर कोड जो here और नीचे देखा जा सकता है

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. ऐड: print_media_type => middlewar साथ एक विकल्प के रूप में सच उदाहरण के लिए ई: config.middleware.use "PDFKit :: Middleware",: print_media_type => true
  2. ऐड: मीडिया => "सभी" अपने स्टाइलशीट सहित जबकि
  3. आप स्टाइलशीट फ़ाइल जोड़ने में निम्नलिखित
@media print {  
    #id_of_divs_to_hide{ 
    display: none; 
    } 
} 
संबंधित मुद्दे