node.js - ImageMagick:不使用文件的 PDF 到 PNG nodejs?
问题描述
我需要创建一个端点来将 pdf 渲染到 nodejs 中的图像,并且在尝试了不同的方法之后 imagemagick/ghostscript 似乎是最好的选择。
然而,他们期望文件作为输入和输出。
有没有办法只在内存/变量中工作而不是弄乱文件系统(性能/资源是这里的一个问题)?
理想的情况是向 imagemagick 提供一个 pdf 作为 base64 字符串,并获得 base64 字符串中的图像。
但是由于 imagemagick 是一个命令行工具,我不知道如何实现它以及是否有可能?也许有一种方法可以连接到流式处理过程中,这样我就可以覆盖数据的去向(比如以某种方式覆盖 imagemagick 过程的 stdin/stdout 或任何将数据累积到变量中而不是将其发送到文件的方法)
或者,如果它是死胡同,在不使用文件的情况下在节点中将 pdf 渲染为 png 的替代方法是什么?尝试了 pdf.js ,但它在节点中似乎非常不可靠。
非常感谢任何建议
解决方案
夏普可以做到这一点。它使用poppler进行 PDF 渲染,而不是使用 Ghostscript,因此您可以在进程中完成所有操作,而无需接触文件系统。它也将逐步呈现 PDF,因此内存使用率保持在较低水平。
您将遇到的困难是 poppler 是 GPL,因此锐器的二进制文件不包括它。您需要安装包含 PDF 支持的系统版本的libvips (sharp 使用的底层图像处理库)。您还需要注意,将 GPL 库链接到您的节点程序也会使您的代码成为 GPL。这意味着如果您打算出售您的程序,您将不得不放弃源代码。当然,出售您的程序的访问权限是可以的。
Imagemagick 是一个很棒的工具,但它会使用一组大型临时文件通过 ghostscript 处理 PDF。
推荐阅读
- php - 联系表格,发送电子邮件只是下载我的 PHP 文件
- c++ - 如何使用 CMake 和 Catch2 获得测试覆盖率
- nuxt-auth - @nuxt/auth $auth.loggedIn 没有反应
- asp.net-mvc - 类似于 页面加载事件 - MVC
- firebase - 如何在不同的 Google Cloud 项目中使用相同的 IP 地址
- python - 如何检查包含字符串的变量是否等效于特定关键字?
- c# - 检查 Clipboard.GetImage() 在 C# 中是否透明
- javascript - 引导表:过滤器控制不起作用
- angular - 如何从 Angular Web 应用程序中读取 Firebase 配置?
- javascript - Day Calculation is wrong