2016-11-07 103 views
0

我正在使用https://github.com/modesty/pdf2json解析多个pdf文件。它适用于1个单一文件,但在尝试加载多个文件时,pdfParser_dataReady事件似乎总是以相同的文件触发。 这是我已经试过无法使用pdf2json处理多个pdf文件nodejs

var PDFParser = require('pdf2json'); 
var pdfParser = new PDFParser(); 
var fs = require('fs'); 
var fileNames = []; 
var fileCont = 0; 

fs.readdir(fileFolder, function(err, files){ 
     for (var i = files.length - 1; i >= 0; i--) { 
     if (files[i].indexOf('.pdf') !== -1){ 
      fileNames.push(files[i]); 
     } 

     pdfParser.loadPDF(fileNames[fileCont]); 
}); 

pdfParser.on('pdfParser_dataReady', function(data){ 
     //Do all my stuff and insert in db... 

     fileCont++; 

     If (fileCont === fileNames.lenght){ 
      for (var i = fileNames.length - 1; i >= 0; i--) { 
       fs.unlink(fileFolder + fileNames[i]); 
      } 
      return res.json({ 
       data: 'ok ' 
      }); 
     } 

     pdfParser.loadPDF(fileFolder + fileNames[fileCont]); 
}); 

回答

1

我设法通过创建在每次迭代中新PDFparser,使多个文件pdf2json工作。这不是管理多个pdf文件的非常“美丽”的方式,图书馆应该有一个简单的方法来做到这一点,但它的工作原理!

var PDFParser = require('pdf2json'); 
var fs = require('fs'); 
var fileNames = []; 
var fileFolder = 'myFolder/'; 
var fileCont = 0; 

var loadPDF = function(filePath){ 
    if(fileNames.length === fileCont){ 
    //Insert in db and add any FINAL code, then return; 
    } 
    else{ 
    //Call for another file to process 
    var pdfParser = null; 
    pdfParser = new PDFParser(); 
    pdfParser.loadPDF(filePath); 

    pdfParser.on('pdfParser_dataError', function(err){ 
     //Handle pdfParser error 
    }); 

    pdfParser.on('pdfParser_dataReady', function(data){ 
     //Get the pdf data and process it 
     fileCont++; //increase the file counter 
     loadPDF(fileFolder + fileNames[fileCont]); //parse the next file 
    }); 
    } 
}; 

fs.readdir(fileFolder, function(err, files){ 
    for (var i = files.length - 1; i >= 0; i--) { 
    if (files[i].indexOf('.pdf') !== -1){ 
     fileNames.push(files[i]); 
    } 
    } 

    loadPDF(fileFolder + fileNames[fileCont]); 
});