无法使用pdf2json为nodejs处理多个pdf文件

时间:2016-11-07 15:15:44

标签: javascript json node.js parsing pdf

我使用https://github.com/modesty/pdf2json来解析多个pdf文件。它适用于1个单个文件,但在尝试加载多个文件时,pdfParser_dataReady事件似乎始终使用相同的文件触发。 这就是我试过的

 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 个答案:

答案 0 :(得分: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]);
});