2012-07-18 16 views
5

में सामग्री-स्वभाव को अनदेखा किया जा रहा है, मैं गतिशील रूप से इनलाइन पीडीएफ बनाने की कोशिश कर रहा हूं, जब उपयोगकर्ता इसे सहेजने का विकल्प चुनता है, तो मेरे कस्टम फ़ाइल नाम से संकेत मिलता है। the documentation के अनुसार, saveasname विशेषता मुझे जो चाहिए वह करना चाहिए।आईई 9 और फ़ायरफ़ॉक्स 13

(प्रारूप = "पीडीएफ" केवल) फ़ाइल नाम जो SaveAs संवाद में प्रकट होता है जब कोई उपयोगकर्ता ब्राउज़र पर लिखी गई पीडीएफ फाइल सहेजता है।

हालांकि, आईई 9 और फ़ायरफ़ॉक्स 13.0.1 दोनों में क्या हो रहा है यह है कि SaveAs संवाद में दिखाई देने वाला फ़ाइल नाम मेरे सीएफ टेम्पलेट के समान है, लेकिन पीडीएफ एक्सटेंशन के साथ। (दूसरे शब्दों में, मेरा कोड makepdf.cfm में है और SaveAs मुझे makepdf.pdf सहेजने के लिए संकेत देता है।) क्रोम में, हालांकि, यह पूरी तरह से काम करता है।

<cfdocument format="pdf" bookmark="true" saveasname="MyReport.pdf"> 

अगर मैं स्पष्ट रूप से सामग्री स्वभाव और सामग्री प्रकार का ऐलान करते हैं तो

<cfheader name="Content-Disposition" value="inline; filename=MyReport.pdf"> 
<cfcontent type="application/x-pdf"> 
<cfdocument format="pdf" bookmark="true" saveasname="MyReport.pdf"> 
  • क्रोम की तरह: (सभी विंडोज 7 पर)

    यहाँ पीडीएफ बनाने के लिए मेरी कोड है मुझे बताता है कि "सामग्री-विस्थापन" को दो बार घोषित किया गया है

  • फ़ायरफ़ॉक्स मुझे बताता है कि पीडीएफ फाइल दूषित है
  • आईई बस इसे अनदेखा कर देता है (और अब भी सही फ़ाइल नाम प्रदर्शित नहीं करता है)

अगर मैं सिर्फ हैडर

<cfheader name="Content-Disposition" value="inline; filename=MyReport.pdf"> 
<cfcontent type="application/x-pdf"> 
<cfdocument format="pdf" bookmark="true"> 

पर भरोसा करते हैं मैं कोड के पहले टुकड़ा के रूप में ही व्यवहार मिलता है।

मुझे पता है कि ब्राउज़र को इनलाइन प्रदर्शित करने के बजाए डाउनलोड करने के लिए कैसे संकेत मिलता है, और सबकुछ अपेक्षित काम करता है, लेकिन यह वांछित व्यवहार नहीं है।

मुझे फ़ाइल नामों में समय और तिथियों का उपयोग करने की आवश्यकता है और अंतिम उपयोगकर्ता अपनी फ़ाइलों को ओवरराइट करने से बचाने के लिए पर्याप्त समझदार नहीं हैं (उन्हें उन्हें सहेजना चुनना चाहिए)।

क्या ऐसा कुछ है जो मुझे याद आ रहा है जो आईई और फ़ायरफ़ॉक्स को वह करने के लिए मिलेगा जो उन्हें माना जाता है? यह करने के लिए अन्य ब्राउज़र क्या करने जा रहे हैं? मोबाइल सफारी?

उत्तर

2

समस्या यह है कि "फ़ाइल नाम = xxx" वास्तव में "लगाव" स्वभाव के लिए नहीं बनाया गया था, और हो रहा है सभी ब्राउज़र पीडीएफ प्लग इन एक तंत्र के रूप में पहचान जैसा कि आपने पाया है, इनलाइन को "सेव करें" निर्दिष्ट करने के लिए।

अपने पसंदीदा फ़ाइल नाम का उपयोग करने के लिए उन्हें प्राप्त करने के लिए एक अलग दृष्टिकोण वेब सर्वर पुनर्लेखन नियमों का उपयोग कर यूआरएल में हेरफेर करना होगा। एक साधारण उदाहरण के रूप में आपको पीडीएफ उत्पन्न करने और इनलाइन की सेवा करने के लिए आपकी स्क्रिप्ट होगी: पीडीएफ।CFM

<cfheader name="Content-Disposition" value="inline"> 
<cfdocument format="PDF" mimetype="application/pdf">Test</cfdocument> 

फिर एक पुनर्लेखन का नियम जो फार्म /पीडीएफ/myfilename में यूआरएल से मेल खाता है और उन्हें pdf.cfm गुजरता पैदा करते हैं। IIS7 पर इस हो सकता है:

<rule name="Inline PDF SaveAs" stopProcessing="true"> 
    <match url="^/pdf/[\w-]+$" ignoreCase="true" /> 
    <action type="Rewrite" url="/pdf.cfm" appendQueryString="false" /> 
</rule> 

यह अक्षरांकीय युक्त फ़ाइल नाम, केवल से मेल खाएगी को रेखांकित और हाइफन अक्षर। आप रिक्त स्थान, या अमान्य फ़ाइल नाम वर्णों को अनुमति नहीं देना चाहेंगे।

आप का उपयोग करते हैं /पीडीएफ/myreport पीडीएफ प्लगइन द्वारा इनलाइन प्रदर्शित किया जाएगा, और जब आप इसे बचाने के लिए, डिफ़ॉल्ट फ़ाइल नाम का myreport.pdf हो जाएगा।

यदि आप खोज इंजन सुरक्षित URL या "मार्ग" का समर्थन करने वाले ढांचे का उपयोग कर रहे हैं, तो आप वेब सर्वर पुनर्लेखन की आवश्यकता के बिना ऐसा ही कर सकते हैं।

अपडेट: वास्तव में आपको यूआरएल रीराइटिंग का उपयोग करने की आवश्यकता नहीं है: बस एक फॉरवर्ड स्लैश संलग्न करें और फिर वांछित फ़ाइल नाम सीएफ स्क्रिप्ट यूआरएल, उदा।

/pdf.cfm/myreport

प्लगइन का उपयोग करेगा जो के रूप में अंतिम स्लैश "इस रूप में सहेजें ..." नाम के बाद आता है।

+0

यूआरएल फिर से लेखन इस विशेष परियोजना के लिए एक विकल्प नहीं है, लेकिन यह भविष्य के लिए है करने के लिए कुछ अच्छी जानकारी है। – ale

+0

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

-1

मैं cfdocument टैग की विशेषता का उपयोग करूंगा जो सामग्री को एक चर में संग्रहीत करेगा। फिर cfheader और cfcontent टैग का उपयोग करें जैसा कि आप "इनलाइन" को बदलने के अपवाद के साथ ऊपर हैं; अनुलग्नक के साथ;"

मैं इस तरह कोड का उपयोग करें:

<cfdocument name="pdf"> ... </cfdocument> 
<cfheader name="Content-Disposition" value="attachment;filename=MyReport.pdf;" /> 
<cfcontent type="application/pdf" variable="#pdf#" /> 
3

सुनिश्चित करें कि आप अटैचमेंट का उपयोग करें और इनलाइन नहीं।

आईई इनलाइन पसंद नहीं करता है और केवल एक शब्द दस्तावेज़ खोलने के साथ-साथ आपके द्वारा दिए गए फ़ाइल नाम को नहीं मानता है।

उदाहरण:

<cfheader name="content-disposition" value="attachment; filename=#filename#.doc" charset="utf-8"> 

नहीं

<cfheader name="content-disposition" value="inline; filename=#filename#.doc" charset="utf-8"> 
संबंधित मुद्दे