首页 > 解决方案 > ImageMagick:不使用文件的 PDF 到 PNG nodejs?

问题描述

我需要创建一个端点来将 pdf 渲染到 nodejs 中的图像,并且在尝试了不同的方法之后 imagemagick/ghostscript 似乎是最好的选择。

然而,他们期望文件作为输入和输出。

有没有办法只在内存/变量中工作而不是弄乱文件系统(性能/资源是这里的一个问题)?

理想的情况是向 imagemagick 提供一个 pdf 作为 base64 字符串,并获得 base64 字符串中的图像。

但是由于 imagemagick 是一个命令行工具,我不知道如何实现它以及是否有可能?也许有一种方法可以连接到流式处理过程中,这样我就可以覆盖数据的去向(比如以某种方式覆盖 imagemagick 过程的 stdin/stdout 或任何将数据累积到变量中而不是将其发送到文件的方法)

或者,如果它是死胡同,在不使用文件的情况下在节点中将 pdf 渲染为 png 的替代方法是什么?尝试了 pdf.js ,但它在节点中似乎非常不可靠。

非常感谢任何建议

标签: node.jspdfimagemagick

解决方案


夏普可以做到这一点。它使用poppler进行 PDF 渲染,而不是使用 Ghostscript,因此您可以在进程中完成所有操作,而无需接触文件系统。它也将逐步呈现 PDF,因此内存使用率保持在较低水平。

您将遇到的困难是 poppler 是 GPL,因此锐器的二进制文件不包括它。您需要安装包含 PDF 支持的系统版本libvips (sharp 使用的底层图像处理库)。您还需要注意,将 GPL 库链接到您的节点程序也会使您的代码成为 GPL。这意味着如果您打算出售您的程序,您将不得不放弃源代码。当然,出售您的程序的访问权限是可以的。

Imagemagick 是一个很棒的工具,但它会使用一组大型临时文件通过 ghostscript 处理 PDF。


推荐阅读