2009-04-17 20 views
7

मेरे पास एक सर्वलेट है जो एक पीडीएफ फ़ाइल को बायलेटएरेऑटपुटस्ट्रीम के रूप में सर्वलेट की आउटपुट स्ट्रीम में लिखता है। यदि मैं सर्वलेट यूआरएल खोलता हूं तो ब्राउज़र फ़ाइल खोलता है। लेकिन अगर सर्वलेट पर कोई त्रुटि आती है, तो ब्राउज़र एक त्रुटि संदेश के साथ एक खाली पीडीएफ खुलता है। ServletResponse के माध्यम से एक त्रुटि भेजना ब्राउज़र डिफ़ॉल्ट त्रुटि पृष्ठ खोलता है।जावास्क्रिप्ट का उपयोग कर फ़ाइल कैसे खोलें?

मैं एक त्रुटि पृष्ठ पर रीडायरेक्ट किए बिना या एक अवैध पीडीएफ फ़ाइल खोलने के बिना एक त्रुटि संदेश भेजना चाहता हूं।

मैंने कोशिश की:

new Ajax.Request('/pdfservlet', {    
     onSuccess: function(response) { 
      docWindow = window.open('','title'); 
      docWindow.document.open('application/pdf'); 
      docWindow.document.write(response); 
      docWindow.document.close(); 
     }, 
     onFailure: function(response) { 
      alert(response); 
     } 
    }); 

लेकिन, onSuccess [वस्तु वस्तु] के साथ एक पृष्ठ को खोलता है

मैं जावास्क्रिप्ट का उपयोग कर एक पीडीएफ फाइल कैसे खोल सकता हूँ?

उत्तर

10

नोट: मैं तुम्हें Ajax.Request कॉल से प्रोटोटाइप ढांचे का उपयोग कर रहे संभालने हूँ।

response object सीधे लिखा जाने वाला नहीं है, हालांकि, responseText संपत्ति है जिसमें लौटा पीडीएफ होना चाहिए।

आप की कोशिश की है:

new Ajax.Request('/pdfservlet', {    
     onSuccess: function(response) { 
      docWindow = window.open('','title'); 
      docWindow.document.open('application/pdf'); 
      document.write(response.responseText); 
      docWindow.document.close(); 
     }, 
     onFailure: function(response) { 
      alert(response); 
     } 
    }); 

(सूचना जोड़ा .responseText)

संपादित करें: ठीक है, तो उससे बात नहीं बनी ... कुछ इस तरह का प्रयास करें:

new Ajax.Request('/pdfservlet', {    
     onSuccess: function(response) { 
      window.open('/pdfservlet'); 
     }, 
     onFailure: function(response) { 
      alert(response); 
     } 
    }); 

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

+0

यह पीडीएफ आवेदन नहीं खोलता है। % पीडीएफ-1.6 % 1 0 obj <

+1

मैंने एक नया समाधान जोड़ा, यह आरडी 6173 के सुझाव के समान है, लेकिन ब्राउजर कैशिंग पर निर्भर करता है। –

+0

ब्राउज़र कैश नहीं करता है। पीडीएफ दो बार आवश्यक है। –

2

आप "दो-पास" दृष्टिकोण आज़मा सकते हैं। आप सर्वलेट को कॉल करने के लिए अजाक्स का उपयोग करते हैं (और यदि यह फ्लाई पर पीडीएफ उत्पन्न करता है, तो इसे कैश करें)। यदि यह सफल होता है, तो कैश किए गए पीडीएफ को लोड करने के लिए उपयोगकर्ता को पैरामीटर के साथ सर्वलेट पर रीडायरेक्ट करें।

अन्य विकल्प भी हैं, लेकिन यह इस बात पर निर्भर करता है कि आप पीडीएफ का उपयोग कैसे कर रहे हैं।

मेरे $ 0.02 ..

0

चूंकि ऐसा प्रतीत होता है कि आप "अनुलग्नक" के विपरीत "इनलाइन" के रूप में अपने पीडीएफ भेज रहे हैं, तो आप गतिशील रूप से बनाए गए इफ्रेम में पीडीएफ का यूआरएल डाल सकते हैं और उसके बाद ओवरले को iframe संलग्न कर सकते हैं। इससे काम बन जाएगा।

-JP

0

लेकिन अगर सर्वलेट पर एक त्रुटि पाए जाते हैं, ब्राउज़र एक त्रुटि संदेश के साथ एक खाली पीडीएफ खोलता है।

मुझे लगता है कि यह सर्वर के अंत में AJAX और कैश के साथ इस नाजुक झुकाव की तुलना में इसे ठीक करने का प्रयास करना बेहतर होगा। एक सर्वलेट त्रुटि अभी भी 'त्रुटि-प्रकार: एप्लिकेशन/पीडीएफ' शीर्षलेख को इसके त्रुटि संदेश के साथ क्यों सेट कर रही है? सर्वलेट में चीजें भेजने का आदेश जांचें; जब तक आपने पीडीएफ सफलतापूर्वक नहीं बनाया है और इसे वापस करने के लिए तैयार नहीं है तब तक 'सामग्री-प्रकार' न भेजें।

+0

मैं 'सामग्री-प्रकार: टेक्स्ट/एक्सएमएल' सेट कर सकता हूं लेकिन मैं इसे क्लाइंट साइड में कैसे संभाल सकता हूं? –

+0

इसे टेक्स्ट/एचटीएमएल पर बस सेट करने और सुखद दिखने वाले त्रुटि पृष्ठ की सेवा करने के बारे में कैसे? फिर आप फ़ाइल से लिंक कर सकते हैं और ब्राउजर को या तो इसे डाउनलोड कर सकते हैं, या त्रुटि को संभाल सकते हैं। "पुनः प्रयास करें" पुनः लोड लिंक को शामिल करना उचित हो सकता है यदि यह एक प्रकार की त्रुटि है जो दूसरे प्रयास पर जा सकती है। – bobince

+0

यह काम करता है लेकिन मैं एक त्रुटि पृष्ठ नहीं खोलना चाहता हूं। मैं एक ही पेज में त्रुटि दिखाना चाहता हूं। –

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