使用PDF.js在Node.js中从URL读取PDF文件

12

我想从一个pdf的URL提取出其文本内容。在pdf.js网站上的示例中,我了解到如何在客户端渲染pdf,但在服务器端运行时遇到了问题。

我使用 npm i pdfjs-dist下载了该包。

我尝试了下面的代码作为一个简单的示例来加载pdf:

var url = 'https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf';
var pdfjsLib = require("pdfjs-dist")
var loadingTask = pdfjsLib.getDocument(url);

loadingTask.promise.then(function (pdf) {
    console.log(pdf);
}).catch(function (error){
    console.log(error)
})

但是当我运行这个程序时,我收到了以下错误:

  message: 'The browser/environment lacks native support for critical functionality used by the PDF.js library (e.g. `ReadableStream` and/or `Promise.allSettled`); please use an ES5-compatible build instead.',
  name: 'UnknownErrorException',
  details: 'Error: The browser/environment lacks native support for critical functionality used by the PDF.js library (e.g. `ReadableStream` and/or `Promise.allSettled`); please use an ES5-compatible build instead.'

有没有关于如何做这件事的想法?我只是试图从pdf的URL中提取文本。而且我正在尝试使用nodejs在服务器端进行此操作。感谢任何意见!

3个回答

14

我也遇到了同样的问题(浏览器/环境缺乏对 PDF.js 库使用的关键功能的本地支持,例如ReadableStream和/或Promise.allSettled);请改用兼容ES5的版本),但是在Angular 8中,我留下了解决方案,以防有人需要:

packaje.json配置:

  • Angular版本:8.2.14
  • pdfjs-dist: 2.4.456

组件:

import * as pdfjs from 'pdfjs-dist/es5/build/pdf';
import { pdfjsworker } from 'pdfjs-dist/es5/build/pdf.worker.entry';

pdfjs.GlobalWorkerOptions.workerSrc = pdfjsworker;

1
甜蜜的解决方案。我在React(17.0)应用程序中遇到了同样的问题,我使用了react-pdf模块,但后来将其卸载并安装了所述版本,问题得以解决。谢谢。 - Yash Vekaria

13
你需要导入pdf.js的es5版本。以下代码应该有效:

```

var pdfjsLib = require("pdfjs-dist/es5/build/pdf.js");
var url = 'https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf';
var loadingTask = pdfjsLib.getDocument(url);

loadingTask.promise.then(function (pdf) {
    console.log(pdf);
}).catch(function (error){
    console.log(error)
})

还可以查看 https://github.com/mozilla/pdf.js/blob/master/examples/node/getinfo.js,其中包含使用 node.js 的工作示例。


12

在我的node.js项目中,我使用最新版本的pdfjs-dist(2.8.335)时也遇到了同样的问题。正如其他答案提到的那样,我们需要更改路径来解决这个问题。

但在我的情况下,路径pdfjs-dist/es5/build/pdf无法解决问题。

在最新版本中,路径已更改为pdfjs-dist/legacy/build/pdf.js


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接