2010-01-13 14 views
17

बस शब्दों में कहें, मैं चाहता हूं कि कोई एक लिंक पर क्लिक करने में सक्षम हो, और एक बार उपयोग पीडीएफ प्राप्त करें। हमारे पास पीडीएफ फाइलें बनाने के लिए लाइब्रेरी है, इसलिए यह कोई मुद्दा नहीं है।मैं ASP.NET में किसी वेब अनुरोध से पीडीएफ कैसे वापस कर सकता हूं?

हम एक एएसपीएक्स पेज के लिए एक लिंक उत्पन्न कर सकते हैं, क्या वह पृष्ठ पीडीएफ उत्पन्न करता है, पीडीएफ को फाइल सिस्टम में सहेजता है, और फिर प्रतिक्रिया। सहेजे गए पीडीएफ पर प्रतिक्रिया। फिर हम किसी भी तरह पीडीएफ फाइल को ट्रैक और साफ रखना होगा।

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

(हमारे मामले में, हम सी # का उपयोग कर रहे हैं, और हम एक PDF वापस की सेवा करना चाहते हैं, लेकिन ऐसा लगता है किसी भी समाधान शायद विभिन्न नेट भाषाओं के लिए काम करते हैं और फ़ाइल प्रकारों के लिए लौट आए हैं लगता है।)

+0

सटीक डुप्लिकेट: http://stackoverflow.com/questions/177/how-do-i-programmatically-create-a-pdf-in-my-net- appplication – RedFilter

+3

किसी भी अर्थ में उपरोक्त का डुप्लिकेट नहीं है। – nothrow

+0

(मुझे पता था कि मैं दो लोगों को डुप्ली के रूप में बंद करने के लिए कह रहा था, इस तरह के प्रश्न को इंगित करता हूं ... यही कारण है कि मैंने दूसरी वाक्य भी शामिल की। ​​मुझे इसे पहला वाक्य बनाना चाहिए था :) :) – Beska

उत्तर

30

आप यह मानते हुए कर सकते हैं byte[] अपने पीडीएफ का प्रतिनिधित्व करें:

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("Content-Disposition", 
    "attachment;filename=\"FileName.pdf\""); 

Response.BinaryWrite(yourPdfAsByteArray); 

Response.Flush(); 

Response.End(); 
+1

यह बहुत ही आशाजनक लग रहा है ... मैंने सोचा यह इन पंक्तियों के साथ कुछ होगा, लेकिन विवरण जानने के लिए पृष्ठभूमि नहीं है। जवाब के लिए धन्यवाद; मैं इस रणनीति का प्रयास करूंगा। – Beska

+0

इसने समस्या को ठीक से खींचा। धन्यवाद! – Beska

+0

एक संबंधित प्रश्न (शायद मुझे एक अलग सवाल खोलना चाहिए, लेकिन यह कड़ाई से इस उत्तर से संबंधित है ...) Response.Flush() क्यों? जब हमारे पास उस पंक्ति में है, और कोई अनुरोध करने के बाद ब्राउज़र बंद कर देता है, तो हमें एक त्रुटि मिलती है: "रिमोट होस्ट ने कनेक्शन बंद कर दिया।"अगर हम उस लाइन को छोड़ देते हैं, कोई त्रुटि नहीं होती है, और सब कुछ * काम करने के लिए * लगता है। एमएसडीएन दस्तावेज़ों को पढ़ना मुझे सख्ती से जरूरी नहीं था कि क्या यह सख्ती से जरूरी था। विचार? – Beska

2

देखें कि HTTP कैसे काम करता है। क्लाइंट (= ब्राउज़र) एक्सटेंशन पर भरोसा नहीं करता है, यह केवल सर्वर को दस्तावेज़ के साथ कुछ मेटाडेटा लौटाता है।

मेटाडाटा को Response.AddHeader के साथ जोड़ा जा सकता है, और एक 'मेटाडाटा लाइन' में नाम और मान शामिल है।

सामग्री-प्रकार वह संपत्ति है जिसमें आप रुचि रखते हैं, और मूल्य डेटा का एमआईएम प्रकार है (अध्ययन: HTTP हेडर के लिए आरएफसी 1 9 45, एमआईएमई प्रकार के लिए Google)।

क्रमिक एएसपीएक्स पृष्ठों (एचटीएमएल, ....) के लिए संपत्ति 'टेक्स्ट/एचटीएमएल' है (इतना छोटा नहीं है, लेकिन इस उदाहरण के लिए यह पर्याप्त है।)। यदि आप जेपीजी छवि वापस करते हैं, तो इसका नाम 'image.gif' हो सकता है, लेकिन जब तक आप सामग्री-प्रकार में 'छवि/जेपीईजी' भेजते हैं, तो इसे जेपीजी छवि के रूप में संसाधित किया जाता है। पीडीएफ के लिए सामग्री-प्रकार 'एप्लिकेशन/पीडीएफ' है।

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

सामग्री-विस्थापन शीर्षलेख कहता है, आपको डेटा के साथ क्या करना चाहिए। यदि आप स्पष्ट रूप से क्लाइंट को कुछ HTML/PDF/जो कुछ भी 'डाउनलोड' करने के लिए चाहते हैं, और डिफ़ॉल्ट रूप से इसे प्रदर्शित नहीं करते हैं, तो मूल्य 'अनुलग्नक' वह है जो आप चाहते हैं। इसमें एक और पैरामीटर होना चाहिए, (जैसा कि जस्टिन निसनेर द्वारा सुझाया गया है), जिसका उपयोग कुछ प्रकार के मामले में किया जाता है:

http://server/download.aspx?file=11 -> सामग्री-विस्थापन: अनुलग्नक; filename = file.jpg कहता है, फ़ाइल डिफ़ॉल्ट रूप से कैसे होनी चाहिए नाम दिया है।

+0

यह कुछ उपयोगी जानकारी है। – malckier

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

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