2011-09-21 11 views
28

मैंने इंटरनेट पर चारों ओर देखा है, लेकिन रेलवे में पीडीएफ प्रदर्शित करने में सक्षम नहीं लगता है (मुझे केवल एक बनाने के बारे में जानकारी मिल सकती है)।मैं आरओआर (रूबी) में पीडीएफ कैसे प्रदर्शित करूं?

किसी को भी पता है क्या कोड/मणि मैं किसी को प्रदर्शित करने की आवश्यकता है?

+0

उपयोग [prawn] (https://github.com/sandal/prawn) एक प्रकार का डी-फैक्टो मानक है। – lucapette

उत्तर

47

अपने नियंत्रक में:

def pdf 
    pdf_filename = File.join(Rails.root, "tmp/my_document.pdf") 
    send_file(pdf_filename, :filename => "your_document.pdf", :type => "application/pdf") 
end 

config/environment/production.rb में:

config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache 

या

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 

config संशोधन की आवश्यकता है, क्योंकि यह वेब सर्वर सक्षम बनाता है भेजने के लिए फाइल direc डिस्क से टाइल, जो एक अच्छा प्रदर्शन बढ़ावा देता है।

अद्यतन

आप इसे डाउनलोड करने के बजाय यह प्रदर्शित करने के लिए चाहते हैं, send_file की :disposition विकल्प का उपयोग:

send_file(pdf_filename, :filename => "your_document.pdf", :disposition => 'inline', :type => "application/pdf") 

आप इसे इनलाइन प्रदर्शित करने के लिए चाहते हैं, this question और अधिक पूरा हो जाएगा कि मैं कभी भी हो सकता था।

+0

अरे यह बहुत अच्छी चीजें है। उपयोगकर्ता को पीडीएफ भेजने के मामले में। लेकिन इसे भेजने से पहले वेबसाइट पर इसे प्रदर्शित करने के बारे में क्या? :) – Doomsknight

+5

मेरा जवाब अपडेट किया गया। –

+0

ऐसा लगता है कि मेरा जवाब आपको संतुष्ट नहीं करता है, क्या आप मुझे बता सकते हैं क्यों? –

1
def pdf 
    pdf_content = ...# create the pdf 
    send_data(pdf_content, :filename => "test.pdf", :type => "application/pdf") 
end 
+0

हाय, यह आशाजनक लग रहा है लेकिन अगर मैं सिर्फ फाइल से लोड और प्रदर्शित करना चाहता हूं तो क्या होगा। अर्थात। मेरे पास कोई pdf_content चर नहीं है। – Doomsknight

+0

उस मामले में बेनोइट के समाधान पर नज़र डालें। – Matt

3

निर्भर करता है, जहां पीडीएफ से आता है, निम्नलिखित आपकी मदद कर सकता है। मेरे पास एक ऐसा एप्लिकेशन है जहां मैं बहुत सारी चीज़ें संग्रहीत करता हूं, और उनमें से कुछ के पास आइटम से जुड़े अतिरिक्त (पीडीएफ) होते हैं। मैं वस्तुओं को /public/res/<item_id>/ निर्देशिका में संग्रहीत करता हूं। res का परिणाम परिणाम है, और item_id रेल में उस आइटम की संख्यात्मक आईडी है।

def file_link(key, name = nil) 
    res= Ressource.find(:first, :conditions => ["key = ?", key]) 
    list = Dir["public/res/#{res.id}/*"] 
    file= list.empty? ? "" : list[0] 
    return file if file.empty? 
    fn = name ? name : File.basename(file) 
    link_to fn, "/res/#{res.id}/#{File.basename(file)}", :popup => true 
end 

यहाँ प्रासंगिक भाग link_to name, "/res/#{res.id}/#{File.basename(file)}" है:

ध्यान में रखते हुए मैं एक सहायक विधि के रूप में निम्नलिखित (छद्म) कोड द्वारा पीडीएफ़ के लिए एक लिंक, उस दृश्य में इस्तेमाल किया जा सकता प्रदान करते हैं चीज़।

+0

दो बातें अपने समाधान के बारे में नोट करने के लिए: 1/आप केवल उन्हीं फ़ाइलों को 'public' फ़ोल्डर में हैं प्रदर्शित कर सकते हैं। 2/आप ब्राउजर सेव डायलॉग में फ़ाइल का नाम बदल नहीं सकते हैं। –

+0

यह सच है, लेकिन कभी-कभी पर्याप्त है। इसका एक सरल उपाय, मुझे पता है :-) – mliebelt

+1

आप कर रहे हैं पूरी तरह से ठीक है, मैं सिर्फ प्रतिबंधों के (या नहीं ;-)) हो सकता है सौदा तोड़ने वाले का कहना चाहते थे। –

2

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

मैंने अपनी फ़ाइल को S3 & पर अपलोड किया है, जो पथ को संदर्भित करता है, जो एस 3 प्रदान करता है, फ़ाइल अपलोड करने और अनुमतियों को सेट करने के बाद प्रदान करता है (याद रखें, हर किसी को इसे अपलोड और डाउनलोड करने में सक्षम होना चाहिए)। मैं एस 3 पर ऐप के लिए बहुत सारे डेटा स्टोर करता हूं, इसलिए यह एक बढ़िया विकल्प की तरह लग रहा था।

<%= link_to "speaker registration form", "https://s3.amazonaws.com/gws_documents/speaker_registration.pdf" %> 
4

असल में आपको इसे अपने दृश्य में HTML में लिखने की आवश्यकता है। तो यह सरल समाधान मेरे लिए काम किया:

'show.hmtl.erb' में

<iframe src=<%= @certificate.certificate_pdf %> width="600" height="780" style="border: none;"> </iframe> 

सिर्फ iframe टैग घंटे और घंटे के बाद मेरे लिए काम किया के स्रोत के रूप एम्बेडेड माणिक में फ़ाइल स्थान डाल खोज का 'प्रमाणपत्र' मेरा मॉडल है, और 'cert_pdf' मेरी अनुलग्नक फ़ाइल है।

संबंधित मुद्दे