我正在使用PDFKit在浏览器中生成PDF,然后将该PDF的blob数据发送到新标签供用户下载。我真的很喜欢PDFKit ......它很漂亮。
但是,当我尝试使用PDFDocument.image()
函数“绘制”图像文件时,我遇到了一个问题:
未捕获的TypeError:
fs.readFileSync
不是函数
我对Node非常熟悉,因此我立即认识到了方法签名 - 浏览器本身没有fs
!我对Browserify不太熟悉,而是选择使用pre-built version of PDFKit来避免必须集成另一个我甚至不熟悉的依赖项。
我唯一的猜测是,PDFKit的开发人员没有在浏览器中使用这个特定功能而没有使用Browserify的工作后备 - 使用Browserify甚至可以让我访问fs
模块(再次,从未使用过)它)?这是我唯一的选择吗?我错过了使此功能运行所需的特定步骤吗?
目前,我将以下JS文件作为generate_pdf.js
文件的依赖项包含在内:
pdfkit.js
blob-stream.js
是否有模仿fs
的模块我还需要?我没有看到记录,但这是漫长的一天。
答案 0 :(得分:2)
嗯,有一些库(例如this或this),但我强烈建议您自己编写fs.readFileSync
。
由于您无法从浏览器访问客户端的文件系统,因此使用某些现有解决方案意味着添加抽象级别等。
所以,可能最简单,最简单的解决方案是添加
var fs = {
readFileSync: (path) => {
// magic
}
}
为什么可能?嗯......
如果有许多fs
函数的用法,您显然希望使用某些库
同步请求。我猜你是从一些网址加载图片,所以你必须在fs.readFileSync
的实现中使用同步请求才能获得所需的结果。这不是什么大不了的事,但你会在控制台上收到警告。
P.S。抱歉,但是你可能会面临更多的问题,因为在服务器端创建pdf更常见。 Wy没有搬到后端? ;)