2015-03-23 3 views
8

मैं इस Web API पोस्ट विधि है एक पीडीएफ उत्पन्न करने के लिए:AngularJS में वेब एपीआई से पीडीएफ फाइल को कैसे संभालें?

[HttpPost] 
[Route("api/pdf")] 
public HttpResponseMessage Post(CustomType type) 
{ 
    StreamContent pdfContent = PdfGenerator.GeneratePdf(); 

    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); 
    response.Content = pdfContent; 
    response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment"); 
    response.Content.Headers.ContentDisposition.FileName = "PDFName.pdf" 

    return response; 
} 

AngularJS में मैं इस तरह इस पीडीएफ फाइल प्राप्त करना चाहते हैं:

$http.post("api/pdf", object).then(function (results) { 
    var data = results.data; 

    //TODO: got PDF, how to handle? 

}, function (results) { 
    console.log(results); 
}); 

लेकिन यह कैसे मैं PDF- संभाल चाहिए AngularJS में डेटा? आईपैड पर मैं पीडीएफ खोलेगा, लेकिन अगर फ़ाइल डाउनलोड हो या डेस्कटॉप पर खुल जाए तो कोई फर्क नहीं पड़ता।

EDIT1:

SaveAS JS library का उपयोग करते हुए मैं डेस्कटॉप पर एक काम कर समाधान करने में सक्षम हूँ:

$http.post("api/pdf", object).then(function (results) { 
    var data = results.data; 

    var file = new Blob([data], { type: 'application/pdf' }); 
    saveAs(file, "test.pdf"); 

}, function (results) { 
    console.log(results); 
}); 

फ़ाइल सीधे मेरे डेस्कटॉप के लिए डाउनलोड किया जा रहा है, लेकिन इस समाधान के लिए कुछ करता है, कारण, आईओएस में काम नहीं करते हैं। कुछ नहीं हुआ। यह JSFiddle देखें।

क्या मेरी वेबसाइट पर फ़ाइल एम्बेड किए बिना मेरे आईपैड पर पीडीएफ प्रदर्शित करने का कोई और तरीका है?

+4

आप इस पोस्ट को देखा है: http://stackoverflow.com/questions/21628378/angularjs-display -blob-पीडीएफ में एक-कोणीय-ऐप –

+1

डेनिस, आप पोस्ट @DavidTansey से ऊपर का सुझाव दिया की जाँच करनी चाहिए, यह आपको बताता है arraybuffer उपयोग करने के लिए कैसे, $ SCE और एम्बेड अपने AngularJS क्षुधा – Manube

+0

में लाने और प्रदर्शन पीडीएफ फाइलों के लिए कृपया मेरा 'EDIT1' देखें। – dhrm

उत्तर

3

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

डाउनलोड किए गए आइटम किसी ऐप

आप पहले से ही एक वेबसाइट पर काम कर रहे हैं द्वारा खोला जाना चाहिए, ब्राउज़र एक प्राकृतिक उम्मीदवार लगता है।


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

अगर इस तरह के एक समाधान आप के लिए स्वीकार्य है, यह जाँच कृपया अतः पोस्ट:

window.open() in an iPad

प्रदान की समाधान काम करता है, लेकिन केवल जब सफारी इतनी के रूप में पॉपअप अवरोधित करने के लिए नहीं किया गया है।


मुझे डर है कि यह अच्छी तरह से आप के लिए केवल व्यवहार्य विकल्प हो सकता है कर रहा हूँ। इस पोस्ट के अनुसार Having the iPad store the pdf into apps like iBooks will not work। इसे जावास्क्रिप्ट के साथ स्वचालित नहीं किया जा सकता है। , ब्राउज़र में एक नए टैब में पीडीएफ खोलने अगर ios खोज लिया गया है


मेरी जानकारी के लिए, इस मामले में कोई सही समाधान है, बस एक सबसे स्वीकार्य समाधान है।

यदि आप इस समझौते में रूचि रखते हैं, और window.open() के साथ इसे लागू करने वाले मुद्दों में भाग लेते हैं, तो मुझे सहायता करने में खुशी होगी।

0

ऐसा लगता है कि सर्वर एप्लिकेशन/पीडीएफ के प्रतिक्रिया के माइम-प्रकार को सेट नहीं कर रहा है। Http प्रतिक्रिया में "सामग्री-प्रकार" शीर्षलेख जोड़ने का प्रयास करें और आईपैड को संबंधित ऐप में पीडीएफ खोलना चाहिए।

1

पीडीएफ़ बड़ा हो सकता है और जब बाइट्स की इतनी बड़ी हिस्सा आप बल्कि stream की तुलना में इन बाइट्स कुछ चर में कहीं इकट्ठा करना चाहिए के साथ काम कर।

आपका सर्वर साइड कोड पहले से ही वह काम कर रहा है। लेकिन सामग्री-प्रकार गुम हो सकता है।

ग्राहक पक्ष पर मेरा सुझाव है कि आप एक अलग विंडो/टैब में खोलने के लिए इस प्रकार है: -

window.open('http://yourapidomain/api/pdf','resizable,scrollbars'); 
संबंधित मुद्दे