2017-12-13 13 views
0

私はpdf.jsを使用してpdfファイルを解析しています。最初にファイルをアップロードし、そのファイルを解析しようとしています。私は、PDFJS.getDocument(URL)でURLを解析関数に渡しています。エラー:PDFDocument:ストリームにデータが必要です

アップロード部分を使用せず、それが動作するpdfファイル。コード

var parse = function(payload,callback){ 
      var data = payload; 
      if(data.file){ 
       var name = data.file.hapi.filename; 
       var ext = name.split('.'); 
       var extension = ext[1]; 
       if(extension == "pdf"){ 
        var path = __dirname + "/uploads/" + name; 
        checkFileExist(); 
        var file = fs.createWriteStream(path); 
        file.on('error', function (err) { 
         console.error(err) 
        }); 
        data.file.pipe(file); 
        var fileName = data.file.hapi.filename; 
        console.log(fileName); 
        var fileAbsolutepath = __dirname + "/uploads/" + fileName ; 
        console.log(fileAbsolutepath); 
        var parser = script.pdfParser(fileAbsolutepath,function(err,resp){ 
         if(err){ 
          callback(err); 
         } 
         else { 
          callback(resp); 
         } 
        }) 
        callback(JSON.stringify(fileName)); 
       } 
       else{ 
        console.log("Invalid fileType"); 
        callback(JSON.stringify("Invalid FileType")); 
       } 
      } 
} 

var checkFileExist = function() { 
    var path = __dirname + '/uploads'; 
    fs.exists(path, function(exists) { 
     if (exists === false) fs.mkdirSync(path); 
    }); 
}; 


exports.pdfParser = function(url,callback){ 
PDFJS.workerSrc = 'pdf.worker.js'; 

PDFJS.getDocument(url).then(function (pdf) { 
    var pdfDocument = pdf; 
}} 

ファイルはアップロードに予想されるファイルのサイズを適切にアップロードされたフォルダは、まだ私はエラーを取得:PDFのファイルを解析するに

答えて

0

「エラー:PDFDocumentストリームはデータを持っている必要があります」。 PDFファイルをPDFJS.getDocumentで読み込むのではなく、arrayBufferまたはUint8Arrayに変換し、それを使用して新しいLocalPdfManagerオブジェクトを作成してみてください。次に、LocalPdfManagerのメソッドを直接呼び出して、pdfを解析することができます。

このような何か:

import { LocalPdfManager } from 'pdfjs-dist/lib/core/pdf_manager'; 

pdfManager = new LocalPdfManager(1, arrayBuffer, '', {}, ''); 
// parameters = (docId, data, password, evaluatorOptions, docBaseUrl) 
pdfManager.ensureDoc('parseStartXRef', []); // [] = arguments 
pdfManager.ensureDoc('parse', false); // false = recoveryMode 
pdfManager.ensureDoc('numPages'); 
pdfManager.ensureDoc('fingerprint'); 

そして、解析されたPDFデータのためpdfManager.pdfDocumentを見てください。

たとえば、メインの「/ Catalog」エントリはpdfManager.pdfDocument.catalog.catDictになります。

私はこのメソッドを使用して、ブラウザでローカルにpdfファイルを正常に解析して変更しました。私はnode.jsを持つサーバーでそれを試していませんが、同じように動作するはずです。

関連する問題