在节点上运行的 pdf.js 会引发错误,因为 HTMLElement 和 Image 未定义

问题描述 投票:0回答:1

我正在开发一个 node 函数,它可以读取 pdf 文件并从第一页生成图像。

为了实现此目的,我使用 pdf.js 库,我已使用命令

npm install pdfjs-dist
安装了该库。我的代码基本上是 pdf.js 提供的 node example 的副本。

当我执行实现逻辑的代码时,我首先遇到错误HTMLElement未定义

我通过更改原始代码pdf.js来修复此错误

if (imgData instanceof HTMLElement || !imgData.data)

新的

if ((typeof HTMLElement !== 'undefined' && imgData instanceof HTMLElement) || !imgData.data)

然后,解决了第一个问题,我进入了第二个错误图像未定义

我修复了此错误,在 pdf.js 源文件的开头添加以下行

var Canvas = require("canvas");
global.Image = Canvas.Image;

完成这两个修复后,一切正常。

我很确定这不是库 pdf.js 的使用方式,所以我想知道我错过了什么。

javascript node.js pdf canvas pdf.js
1个回答
0
投票

直接修改库的源代码就像使用大锤进行手术——也许有效,但很难优雅或可持续。您的方法虽然富有创意,但却偏离了最佳实践的道路。

pdf.js
主要是为浏览器环境设计的;因此,您在 Node.js 中遇到的错误是预料之中的,但并非无法克服。

首先,您的手动调整是临时修复,将您绑定到特定的

pdf.js
版本,使更新和维护变得复杂。真正的解决方案在于了解 pdf.js 环境并调整 Node.js 环境来模仿它,而不是重写库。

对于

HTMLElement is not defined
问题,你的条件修复是治标不治本的典型案例。
pdf.js
寻求类似浏览器的环境。您的 Node.js 设置应该为特定于浏览器的对象(如
HTMLElement
Image
)提供必要的垫片或填充,而不改变
pdf.js
本身。

关于

Image is not defined
错误,先发制人地要求
canvas
并将
Canvas.Image
全局分配给
Image
可能看起来很聪明,但这是一个可能会导致未来头痛的黑客行为。更复杂的方法是利用现有的 Node.js 包来填充这些 API,或者在应用程序中使用条件逻辑,仅当
pdf.js
在 Node.js 中运行时才提供这些功能。

© www.soinside.com 2019 - 2024. All rights reserved.