如何使用 PDF .js阅读页脚文本

How can I read the footer text using PDF.js?

本文关键字:文本 何使用 PDF js      更新时间:2023-09-26

我正在尝试从科学论文中提取数字对象标识符,由于它们几乎总是位于页脚中,因此我想在浏览正文之前尝试这种策略。

这是我目前的方法,使用 Mozilla 的pdf.js搜索任意 PDF 的第一页。

var Promise = require('bluebird');
const doiRegex = new RegExp(''b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&''<>])[[:graph:]])+)'b', 'i');
function pdfgrep(fileObj) {
    return Promise.spawn(function* () {
        var pdf = yield pdfjs.getDocument(fileObj.path);
        console.log(pdf);
        var page = yield pdf.getPage(1);
        var text = yield page.getTextContent();
        for (var s of text.items) {
            var match = s.str.match(regex);
            if (match !== null) {
                return match;
            }
        }
        return null;
    });
}

下面是可以测试此方法的 PDF。 请注意,DOI 位于页脚中,可以使用搜索工具在任何普通的 PDF 查看器中进行定位。 但是,pdf.getPage似乎不包含页脚中的任何文本。

  1. 如何使用 PDF 访问页脚文本.js?
  2. 如果做不到这一点,我可以使用任何其他工具来执行此操作吗?

RegExp 未正确编写:

  • 'b未在字符串中转义的,应''b
  • [:graph:]可能不起作用

意思如下:

var doiRegex = /'b(10[.][0-9]{4,}(?:[.][0-9]+)*'/(?:(?!["&''<>])['x21-'x7E])+)'b/i;

getTextContent()结果返回文本项及其在页面上的位置。通常 PDF.js 无法将单个字符组合成文本运行,因为某些 PDF 生成器将单个字形打印到单独的位置,但这在新版本的 PDF 中得到了改进.js(顺便说一句,您使用的是哪个版本的 PDF.js?尝试在匹配之前自己粘合文本运行:

...
var text = yield page.getTextContent();
var str = text.items.map(function (s) {
    return s.str;
}).join('');
var match = str.match(regex);
return match;
...