दिलचस्प पोस्ट
संसाधनों से DisplayName विशेषता? नेटबींस के साथ निर्यात जार तार्किक ऑपरेटरों के लिखित संस्करण स्विफ्ट में उपलब्ध मूल्य-मूल्य अवलोकन (केवीओ) क्या है? सी में मैक्रोज़ में कोष्ठकों की आवश्यकता एक दांतेदार पथ चौरसाई Laravel जल्दी शुरू गाइड मार्ग काम नहीं कर रहा है स्थानीय सर्वर पर छवि लेखन जावा में एक तारीख को currentTimeMillis कन्वर्ट करने के लिए कैसे? कैश्ड सीएसएस / जेएस फाइलों को पुनः लोड करने के लिए ब्राउज़र को कैसे बल दें? Google मानचित्र एंड्रॉइड एपीआई v2 में मौजूदा स्थान कैसे प्राप्त करें? स्वचालित रूप से INotifyPropertyChanged PHP में रिश्तेदार पथ शामिल है क्या डेटाबेस कॉलम में एक सीमांकित सूची को वास्तव में खराब रखा जा रहा है? .DLL पहले से ही एक और क्लासलोडर में लोड हो चुका है?

पीडीएफ। जेएस: यूआरएल के बजाए एक बेस 64 फाइल स्रोत का उपयोग कर एक पीडीएफ फाइल का प्रतिपादन

मैं pdf.js के साथ एक पीडीएफ से एक पृष्ठ को प्रस्तुत करने की कोशिश कर रहा हूँ

आम तौर पर, यूआरएल का उपयोग करते हुए, मैं यह कर सकता हूँ:

PDFJS.getDocument("http://www.server.com/file.pdf").then(function getPdfHelloWorld(pdf) { // // Fetch the first page // pdf.getPage(1).then(function getPageHelloWorld(page) { var scale = 1.5; var viewport = page.getViewport(scale); // // Prepare canvas using PDF page dimensions // var canvas = document.getElementById('the-canvas'); var context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; // // Render PDF page into canvas context // page.render({canvasContext: context, viewport: viewport}); }); }); 

लेकिन इस मामले में, मेरे पास यूआरएल की बजाय बेस 64 में फाइल है:

 data:application/pdf;base64,JVBERi0xLjUKJdDUxdgKNSAwIG9iaiA8PAovTGVuZ3RoIDE2NjUgICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnjarVhLc9s2... 

यह कैसे किया जा सकता है?

वेब के समाधान से एकत्रित समाधान "पीडीएफ। जेएस: यूआरएल के बजाए एक बेस 64 फाइल स्रोत का उपयोग कर एक पीडीएफ फाइल का प्रतिपादन"

http://mozilla.github.com/pdf.js/build/pdf.js पर स्रोत कोड से

 /** * This is the main entry point for loading a PDF and interacting with it. * NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR) * is used, which means it must follow the same origin rules that any XHR does * eg No cross domain requests without CORS. * * @param {string|TypedAray|object} source Can be an url to where a PDF is * located, a typed array (Uint8Array) already populated with data or * and parameter object with the following possible fields: * - url - The URL of the PDF. * - data - A typed array with PDF data. * - httpHeaders - Basic authentication headers. * - password - For decrypting password-protected PDFs. * * @return {Promise} A promise that is resolved with {PDFDocumentProxy} object. */ 

इसलिए दस्तावेज़ को पुनर्प्राप्त करने के लिए एक मानक XMLHttpRequest (XHR) का उपयोग किया जाता है। इस के साथ समस्या यह है कि XMLHttpRequests डेटा का समर्थन नहीं करते हैं: यूआरआई (उदाहरण डेटा: आवेदन / पीडीएफ; बेस 64, जेवीबीआरआई0 एक्सएलजेयूके …)।

लेकिन समारोह में टाइप किए गए जावास्क्रिप्ट अर्रे को पारित करने की संभावना है। आपको केवल एक चीज की जरूरत है, base64 स्ट्रिंग को यूआईटी 8 एरे में कनवर्ट करना। आप https://gist.github.com/1032746 पर मिले इस फ़ंक्शन का उपयोग कर सकते हैं

 var BASE64_MARKER = ';base64,'; function convertDataURIToBinary(dataURI) { var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length; var base64 = dataURI.substring(base64Index); var raw = window.atob(base64); var rawLength = raw.length; var array = new Uint8Array(new ArrayBuffer(rawLength)); for(var i = 0; i < rawLength; i++) { array[i] = raw.charCodeAt(i); } return array; } 

tl; डॉ

 var pdfAsDataUri = "data:application/pdf;base64,JVBERi0xLjUK..."; // shortened var pdfAsArray = convertDataURIToBinary(pdfAsDataUri); PDFJS.getDocument(pdfAsArray) 

IE के लिए जांच करने के लिए स्वीकार किए गए उत्तर का उपयोग किया गया था और डेटायूआरआई को UInt8Array में परिवर्तित करना; PDFJS द्वारा स्वीकृत फॉर्म

  Ext.isIE ? pdfAsDataUri = me.convertDataURIToBinary(pdfAsDataUri): ''; convertDataURIToBinary: function(dataURI) { var BASE64_MARKER = ';base64,', base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length, base64 = dataURI.substring(base64Index), raw = window.atob(base64), rawLength = raw.length, array = new Uint8Array(new ArrayBuffer(rawLength)); for (var i = 0; i < rawLength; i++) { array[i] = raw.charCodeAt(i); } return array; },