2012-06-28 8 views
15

मैं सिर्फ पीडीएफ.जेएस के साथ शुरू कर रहा हूं और मैं कच्चे पीडीएफ डेटा से पीडीएफ फ़ाइल लोड करने की कोशिश कर रहा हूं। मैं कोड को देखा है:कच्चे डेटा से पीडीएफ प्रदर्शित करने के लिए पीडीएफ.जेएस का उपयोग

PDFJS.getPdf('cwpdf.pdf', function getPdfHelloWorld(data) { 
    ... 
} 

लेकिन अगर कच्चे पीडीएफ डेटा से बजाय फ़ाइल नाम से एक PDF लोड करने के लिए किसी भी तरह से है मैं सोच रहा हूँ। क्या यह संभव है?

उत्तर

5

मैं एक साथ कुछ पूरा कोड डाल दिया और नीचे समाधान के साथ समस्या का पता लगाने में सक्षम था: इस समाधान मैं भाग गया का उपयोग करते समय

var int8View = new Uint8Array(...); //populate int8View with the raw pdf data 
PDFJS.getDocument(int8View).then(function(pdf) { 
} 

समस्या में अन्य उपयोगकर्ताओं ने देखा है (@MurWade और @ user94154) - stream must have data त्रुटि संदेश। ऐसा लगता है कि समस्या निम्न पंक्ति में है:,

var int8View = new Uint8Array(...); 

सरणी डेटा वाली ठीक से बनाया नहीं प्राप्त करता है के बाद से डेटा की उम्मीद स्वरूप में नहीं है। इसलिए, यह लाइन कुछ मामलों के लिए काम करती है, लेकिन यह सामान्य मामले में काम नहीं कर सकती है।

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

var docInitParams = { data: pdfraw }; 

फिर डेटा लोड करने के साथ आगे बढ़ें। मानक कच्चे पीडीएफ स्ट्रीम को लोड करने और इसे प्रदर्शित करने के तरीके के बारे में पूर्ण कार्य नमूना नीचे दिया गया है। मैं पीडीएफ जेएस हैलो वर्ल्ड नमूना को शुरुआती बिंदु के रूप में इस्तेमाल करता था। यदि इस पर कोई स्पष्टीकरण आवश्यक है तो कृपया मुझे टिप्पणियों में बताएं।

'use strict'; 
 

 
PDFJS.getDocument('helloworld.pdf').then(function(pdf) { 
 

 

 
    pdf.getData().then(function(arrayBuffer) { 
 
    var pdfraw = String.fromCharCode.apply(null, arrayBuffer); 
 

 
    var docInitParams = { 
 
     data: pdfraw 
 
    }; 
 
    PDFJS.getDocument(docInitParams).then(function(pdfFromRaw) { 
 
     pdfFromRaw.getPage(1).then(function(page) { 
 
     var scale = 1.5; 
 
     var viewport = page.getViewport(scale); 
 

 
     var canvas = document.getElementById('the-canvas'); 
 
     var context = canvas.getContext('2d'); 
 
     canvas.height = viewport.height; 
 
     canvas.width = viewport.width; 
 

 
     var renderContext = { 
 
      canvasContext: context, 
 
      viewport: viewport 
 
     }; 
 
     page.render(renderContext); 
 
     }); 
 
    }); 
 
    }); 
 
});

+0

अच्छा, इस उत्तर को स्वीकार करना क्योंकि यह मेरे मूल से अधिक पूर्ण लगता है! – Swiss

+0

धन्यवाद! मुझे बताएं कि क्या मैं इसमें सुधार करने के लिए कुछ भी कर सकता हूं। –

+0

@ user94154, क्या उपर्युक्त समाधान आपके प्रश्न का उत्तर देता है? –

2

ठीक है, क्योंकि किसी और ने उत्तर नहीं दिया है, मैं अपने निष्कर्ष पोस्ट करूंगा। मुझे पता चला कि हाँ, कच्चे डेटा से पीडीएफ फ़ाइल लोड करना संभव है। जिस तरह से किया जा सकता है वह यूआरएल 8 एरे का उपयोग करके यूआरएल के स्थान पर डेटा के साथ पॉप्युलेट किया जाता है जहां पीडीएफ फ़ाइल संग्रहीत होती है। यह करने के लिए

उदाहरण कोड के नीचे है:

var int8View = new Uint8Array(...); //populate int8View with the raw pdf data 
PDFJS.getDocument(int8View).then(function(pdf) { 

} 
+0

मेरे लिए यह काम नहीं किया। मुझे त्रुटि मिलती है 'स्ट्रीम में डेटा होना चाहिए' – MurWade

+0

मुझे वही त्रुटि @MurWade मिलती है। मैं यह तय करने के लिए * प्यार * होगा। – user94154

+0

http://jsperf.com/string-to-uint8array – user94154

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