使用 PDF.js 从带有 node.js 的 url 读取 pdf

Nee*_*rni 9 javascript node.js pdf.js

我正在尝试从 pdf 的 url 中提取 pdf 的文本。按照 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)
})
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我收到以下错误:

  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.'

Run Code Online (Sandbox Code Playgroud)

关于如何去做这件事的任何想法?我要做的就是从它的 URL 中提取 pdf 的文本。我正在尝试使用 nodejs 来做这个服务器端。感谢任何输入!

Nee*_*rni 11

您需要导入 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)
})

Run Code Online (Sandbox Code Playgroud)

另请查看https://github.com/mozilla/pdf.js/blob/master/examples/node/getinfo.js以获取 node.js 的工作示例


小智 11

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

packaje.json 配置:

  • 角度版本: 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;
Run Code Online (Sandbox Code Playgroud)


Abh*_*gal 6

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

但就我而言,路径 -pdfjs-dist/es5/build/pdf没有用。

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