2

今天我发现了这个关于如何使用 pdf.js 从 pdf 文件中提取文本的精彩代码示例。功能很完美,但脚本本身的代码比调用 pdf.js 库真正需要的代码多,而且相当混乱。这方面的一个例子是对另一个页面进行不需要的(?)ajax 调用。由于这个原因,我决定清理这段代码,以便我和其他人可以在未来的项目中使用它。

我花了一整天的时间清理这段代码并使它与 html5 文件 api 一起工作,但是我的重写有一个小问题......

对于我的一生,我无法弄清楚如何在循环遍历 PDF 页面中的每个文本层后将输出的 pdf 页面文本记录到浏览器控制台。文本将添加到页面 DOM,但它位于具有原始字体的画布内,这不好。我想实现与现有脚本相同的功能——即向 div 添加文本,使其看起来像纯文本。我不想将 canvas html 或原始字体附加到文本中。

问题出在filedrag.js中:

page.startRendering(context, function(){
    if (++self.complete == total){            
        window.setTimeout(function(){
            var layers = [];
            var nodes = document.querySelectorAll(".textLayer > div");
            for (var j = 0; j < nodes.length; j++){
                layers.push(nodes[j].textContent + "\n");
            }
            console.log("testing logging");
            console.log(layers.join("\n").replace(/\s+/g, " "));
        }, 1000);
    }
}, textLayer);

如您所见,我在代码中添加了一个调试行(在上面的第 9 行):

console.log("testing logging");

但是,如果您尝试运行我的脚本版本并上传提供的 pdf 文件,则不会将任何数据输出到浏览器控制台,但文本将作为 canvas 元素的父级附加到 DOM。呸!

为什么文本没有输出到浏览器控制台?我感觉这是某种线程问题,但我真的没有足够的经验来编写 Javascript 来判断。原始代码通过window使用 iframe 发送变量,但我觉得这真的很难看,我更喜欢使用我的代码版本,因为它更整洁,更灵活的扩展。

我已将此项目发布到 github,因为它需要额外的依赖项,这意味着我无法将其发布在 jsfiddle 等上......这是我第一次使用 github,所以我希望每个人都可以访问 repo。

如果有人可以在这里帮助我,我将不胜感激。任何修复建议都会很好。我不希望有人继续为我修复此代码,我只是喜欢一些关于如何修复此问题的指示。

干杯。

4

0 回答 0