PDF.js returns 整个Document的文本内容作为每个Page的textContent

PDF.js returns text contents of the whole Document as each Page's textContent

我正在构建一个使用 PDF.js 来解析所选 PDF 文件内容的客户端应用程序,但我 运行 遇到了一个奇怪的问题。

一切似乎都运行良好。代码成功加载PDF.jsPDF对象,然后循环遍历文档的Pages,然后获取每个Page的textContent。

在我输入下面的代码 运行 并检查浏览器工具中的数据后,我注意到每个页面的 textContent 对象都包含整个文档的文本,而不仅仅是相关页面中的文本.

有没有人以前经历过这种情况?

我从这里的 PDF.js 帖子中提取(并修改)了我正在使用的大部分代码,除了这个问题之外,它非常简单明了,似乎完全按照预期执行:

testLoop: function (event) {
    var file = event.target.files[0];
    var fileReader = new FileReader();
    fileReader.readAsArrayBuffer(file);
    fileReader.onload = function () {
        var typedArray = new Uint8Array(this.result);
        PDFJS.getDocument(typedArray).then(function (pdf) {
            for(var i = 1; i <= pdf.numPages; i++) {
                pdf.getPage(i).then(function (page) {
                    page.getTextContent().then(function (textContent) {
                        console.log(textContent);
                    });
                });
            }
        });
    }
},

此外,每个页面返回的 textContent 对象的大小略有不同,即使所有对象共享一个共同的最后一个对象 - 整个文档的最后一位文本。

这是我的检查员的图片,说明所有对象的大小都非常相似。

通过手动检查显示的检查器中的对象,我可以看到来自页面 #1 的数据实际上应该只包含大约 140 个数组项,那么为什么该页面的对象包含 ~700 左右?为什么会有变化?

看来这里的问题是我正在尝试解析的 PDF 文档的格式。 PDF 包含表格格式的政府记录,显然不是根据现代 PDF 标准编写的。

我已经用不同的 PDF 文件(我知道这些文件组成正确)测试了脚本,并且返回的页面 textContent 对象根据页面的内容正确分割。

以防以后其他人遇到这个问题,目前为止我想到的至少有两种可能的处理方法:

  1. 以某种方式重新格式化格式错误的 PDF 以使用更新的标准,然后对其进行处理。我不知道该怎么做,我也不确定它是否现实。

  2. Select 最大的返回页面 textContent 对象(因为它们或多或少都包含文档的全文)并对该 textContent 对象执行操作。