PDFKit无法在浏览器

时间:2015-12-30 22:43:39

标签: javascript node.js browser browserify pdfkit

我正在使用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的模块我还需要?我没有看到记录,但这是漫长的一天。

1 个答案:

答案 0 :(得分:2)

嗯,有一些库(例如thisthis),但我强烈建议您自己编写fs.readFileSync

由于您无法从浏览器访问客户端的文件系统,因此使用某些现有解决方案意味着添加抽象级别等。

所以,可能最简单,最简单的解决方案是添加

var fs = {
  readFileSync: (path) => {
    // magic
  }
}

为什么可能?嗯......

  1. 如果有许多fs函数的用法,您显然希望使用某些库

  2. 同步请求。我猜你是从一些网址加载图片,所以你必须在fs.readFileSync的实现中使用同步请求才能获得所需的结果。这不是什么大不了的事,但你会在控制台上收到警告。

  3. P.S。抱歉,但是你可能会面临更多的问题,因为在服务器端创建pdf更常见。 Wy没有搬到后端? ;)