TypeError:无法读取 Node.js 应用程序运行中未定义错误的属性“userAgent”

Dmi*_*kin 4 eval ejs node.js express

您好,我正在尝试让pdfreader模块在 node.js 中工作以将 PDF 转换为文本格式。

当我简单地使用命令行node sandbox/pdf.js(如下面的内容)运行它时,它工作得很好。

var pdfreader = require('pdfreader');

var rows = {}; // indexed by y-position

function printRows() {
  Object.keys(rows) // => array of y-positions (type: float)
    .sort((y1, y2) => parseFloat(y1) - parseFloat(y2)) // sort float positions
    .forEach((y) => console.log((rows[y] || []).join('')));
}

new pdfreader.PdfReader().parseFileItems('lib/sandbox/book-eric.pdf', function(err, item){
  if (!item || item.page) {
    // end of file, or page
    printRows();
    console.log('PAGE:', item.page);
    rows = {}; // clear rows for next page
  }
  else if (item.text) {
    // accumulate text items into rows object, per line
    (rows[item.y] = rows[item.y] || []).push(item.text);
  }
});
`
Run Code Online (Sandbox Code Playgroud)

但是,当我从express基于我的node.js应用程序启动它时,node app一旦包含该模块,我就会收到以下错误

var pdfreader = require('pdfreader');

错误是:

TypeError: Cannot read property 'userAgent' of undefined
    at detectSyncFontLoadingSupport (eval at <anonymous> (/Users/deemeetree/Documents/Root/InfraNodus/node_modules/pdf2json/lib/pdf.js:60:1), <anonymous>:42060:38)
    at eval (eval at <anonymous> (/Users/deemeetree/Documents/Root/InfraNodus/node_modules/pdf2json/lib/pdf.js:60:1), <anonymous>:42066:5)
Run Code Online (Sandbox Code Playgroud)

看起来它所依赖的模块pdf2json正在尝试获取eval一些文件,但它不起作用:

eval(_fileContent);这是文件的内容pdf2json

有人知道我能做些什么来让它发挥作用吗?

Dmi*_*kin 5

解决方案是在包含模块之前添加此内容pdfreader

global.navigator = {
  userAgent: 'node',
}

window.navigator = {
  userAgent: 'node',
}
Run Code Online (Sandbox Code Playgroud)

我希望它能对其他人有所帮助,因为我花了 2 个小时尝试解决它。

  • 感谢您与 pdfreader 分享您的问题和解决方案,Dmitry!为了节省其他`pdfreader`用户的时间,我在项目的README.md文件上分享了它:https://github.com/adrienjoly/npm-pdfreader/blob/master/README.md (2认同)