【问题标题】:pdf.js-extractor - pdf files aren't parsed correctlypdf.js-extractor - pdf 文件未正确解析
【发布时间】:2021-04-17 19:44:08
【问题描述】:

我在节点 cli 脚本中使用 pdf.js-extractor。我正在尝试提取问题和答案的数据库,然后处理文件将具有以下结构:

[
  '324',
  ' ',
  "Di quale dei seguenti arcipelaghi fa parte l'isola di ",
  'Delle isole Ponziane',
  ' ',
  'Delle isole Pelagie',
  ' ',
  'Delle isole Egadi',
  ' ',
  'Delle isole Eolie',
  ' ',
  'C',
  ' '
],
[ 'Favignana?', ' ' ],
[
  '325',
  ' ',
  'Di quale di queste città la cattedrale di Santa Maria ',
  'Napoli',
  ' ',
  'Firenze',
  ' ',
  'Roma',
  ' ',
  'Genova',
  ' ',
  'B',
  ' '
],
[ 'del Fiore è conosciuta semplicemente come il ' ],
[ 'Duomo?', ' ' ]

我注意到 pdf 内容以错误的方式拆分,答案和正确答案字母之一被正确列出,但问题会以一种磨损的方式显示。

每个问题的预期正确格式如下

[
  '324',
  "Di quale dei seguenti arcipelaghi fa parte l'isola di Favignana?",
  'Delle isole Ponziane',
  'Delle isole Pelagie',
  'Delle isole Egadi',
  'Delle isole Eolie',
  'C', // correct answer letter
],
[
  '325',
  'Di quale di queste città la cattedrale di Santa Maria del Fiore è conosciuta semplicemente come il Duomo?',
  'Napoli',
  'Firenze',
  'Roma',
  'Genova',
  'B', // this is the correct answer letter
]

我正在使用此代码处理 pdf

pdf.extract(pdfFile, {  
  firstPage: 2,
  normalizeWhitespace: true
}).then( (data) =>  {
  //console.log(data);
  spinner.stop();

  data.pages.forEach( (page) => {
    const lines = PdfExtract.utils.pageToLines(page, 1);
    const rows = PdfExtract.utils.extractTextRows(lines);
    fileContent.push(rows);
  });
  fileContent = fileContent.map( (row) => {
    return row.join('');
  });

  console.log(fileContent);

}).catch( (error) => console.log(error) );

如何正确提取pdf内容并解决问题?

【问题讨论】:

    标签: javascript node.js pdf


    【解决方案1】:

    我认为问题出在异步代码上。

    我像这样转换了您的代码。如果您的 pdf 数据正确,这可能会解决问题

    const data = await pdf.extract(pdfFile, {
        firstPage: 2,
        normalizeWhitespace: true
    });
    await spinner.stop();
    for(var page of data.pages) {
        const lines = await PdfExtract.utils.pageToLines(page, 1);
        const rows = await PdfExtract.utils.extractTextRows(lines);
        fileContent.push(rows);
    }
    fileContent = fileContent.map((row) => {
        return row.join('');
    });
    console.log(fileContent);
    

    【讨论】:

    • 比原始代码效果更好但根本没有解决问题,我需要将每个问题的答案放入一个数组中,此时我得到一个大字符串
    • @newbiedev 新格式不应该引起这样的问题。如果您只需要像您的问题中那样的数组,我相信我们可以使用 map() 来解决它
    • 我尝试过使用 map 但它只会给我一些问题,而不是所有已解析的文件内容。问题在于推送
    • 这里是原始pdf文件concorsando.it/blog/wp-content/uploads/…concorsando.it/blog/wp-content/uploads/…它有一个特定的结构,我认为这是问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 2014-01-24
    • 2013-03-10
    • 1970-01-01
    相关资源
    最近更新 更多