我使用nodejs包将pdf转换为图片:https://www.npmjs.com/package/pdf2images-multiple
这可以在两台具有图形卡的本地机器上的docker中成功运行。但是,当我尝试在Google Cloud(没有GPU)的服务器上运行此功能时。对于具有图形的特定pdf页面,会出现以下错误:
error: message=Failed to convert page to image, killed=false, code=1, signal=null, cmd=gm convert -density 150 -quality 100 -sharpen 0x1.0 -trim '/usr/src/app/1161115-30-1kabyqq.2bteimgqfr.pdf[7]' '/usr/src/app/pdfimages1161115-30-10uod6h.siy6pyzaor/1161115-30-1kabyqq-7.png', stdout=, stderr=gm convert: "gs" "-q" "-dBATCH" "-dMaxBitmap=50000000" "-dNOPAUSE" "-sDEVICE=pnmraw" "-dTextAlphaBits=4" "-dGraphicsAlphaBits=4" "-r150x150" "-dFirstPage=8" "-dLastPage=8" "-sOutputFile=/usr/src/app/gmxHC5iw" "--" "/usr/src/app/gm0tibSq" "-c" "quit" (child process quit due to signal 11).
gm convert: Postscript delegate failed (/usr/src/app/1161115-30-1kabyqq.2bteimgqfr.pdf).
我已经使用GPU创建了一个AWS实例,但不会发生此错误。想看看是否有一个环境变量能够跳过GhostScript中的GPU变体,至少在Google Cloud获得GPU或我在此处没有看到的替代品之前。
名为GraphicsMagick的错误消息中的命令有文档说它不使用任何GPU技术。 http://www.graphicsmagick.org/FAQ.html#are-there-any-plans-to-use-opencl-or-cuda-to-use-a-gpu
答案 0 :(得分:0)
Ghostscript不需要,并且确实无法使用(除了使用X来显示位图)GPU。有一些SIMD代码,但你可以在没有它的情况下进行编译,显然我不知道你使用的Ghostscript是如何编译的。
对于Linux,通常无法将二进制文件从一个框移动到另一个框,因为ABI在两个系统之间在C运行时方面有所不同。此外,如果可执行文件已使用共享库进行编译(许多发行版都坚持这样做),那么不同版本的共享库可能会导致问题。
我的猜测是,Google Cloud Linux和AWS Linux之间存在一些显着差异,而不是GPU的存在与否。
在Linux上部署Ghostscript的最佳方法是在您打算使用的计算机上从源代码构建它,如果您打算将它放在具有不同配置的多台计算机上,则尤其如此。