6

我正在尝试使用 ImageMagick 在 PC 和 OSX 上将 PDF 转换为 PNG——但我实际上无法在我的软件将要使用的任何计算机上安装 GhostScript。

有没有办法将 GhostScript 与 ImageMagick 捆绑在一起,只需将 ImageMagick 的路径重定向到该包,这样我就可以使用它而无需在用户的计算机上正式“安装”它?

我找到了这个页面,但我不明白如何更改 ImageMagick 中的 delegates.xml 文件以使其正常工作。我收集到我必须更改此行的某些部分:

  <delegate decode="pdf" encode="eps" mode="bi" command=""@PSDelegate@" -q -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dEPSCrop -sDEVICE=epswrite "-sOutputFile=%o" -- "%i"" /> 

但我不知道该怎么做——把路径放在哪里,或者路径应该基于什么——ImageMagick的位置,还是别的什么?任何帮助将不胜感激。

更新 v1.2:我尝试将上面的委托更改为以下,在命令行中使用可执行文件:

 <delegate decode="pdf" encode="eps" mode="bi" command="&quot;F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe&quot; -q -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dEPSCrop -sDEVICE=epswrite &quot;-sOutputFile=%o&quot; -- &quot;%i&quot;"/>

但是当我运行程序时,我在 cmd 提示符中收到以下错误:

Microsoft Windows XP [Version 5.1.2600]

(C) 版权所有 1985-2001 Microsoft Corp.

F:\Documents and Settings\Administrator>F:\ImageMagickTest\ImageMagick\convert.e
xe F:\ImageMagickTest\PDFs\Appointment.pdf F:\ImageMagickTest\ConvertedPDFs\Appo
intment.png
convert.exe: `%s' (%d) "F:/ImageMagickTest/ImageMagick/gs9.06/bin/gswin32c.exe"
-q -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -d
EPSCrop -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -d
GraphicsAlphaBits=4 "-r72x72"  "-sOutputFile=F:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/
magick-5996ZNQmVN7RFumY--0000001" "-fF:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/magick-5
996r7pmg8XgvrNB" "-fF:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/magick-5996yhTQgwoLswnn"
@ error/utility.c/SystemCommand/1890.
convert.exe: Postscript delegate failed `F:\ImageMagickTest\PDFs\Appointment.pdf
': No such file or directory @ error/pdf.c/ReadPDFImage/679.
convert.exe: no images defined `F:\ImageMagickTest\ConvertedPDFs\Appointment.png
' @ error/convert.c/ConvertImageCommand/3044.

对我来说,这似乎表明它没有找到文件“Appointment.pdf”。但它就在那里。我不是在摸索什么?

为了好玩,这里是 gs 的完整路径,取自 Windows 资源管理器:

F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe

为了更有趣,这里是从 Unity 3D 应用程序中调用它的 c# 脚本(我没有收到任何错误):

    string currDir = System.Environment.CurrentDirectory;
    string convertPath = currDir + @"\ImageMagick\convert.exe";
    string convertedDir = currDir + @"\ConvertedPDFs\";
    string pdfFolder = currDir + @"\PDFs\";
    string fileName = "Appointment";
    string argumentForImageMagick;


    argumentForImageMagick = pdfFolder + fileName + ".pdf" + " " + convertedDir + fileName + ".png";
    ProcessStartInfo info = new ProcessStartInfo {Arguments = argumentForImageMagick , FileName = convertPath};
    System.Diagnostics.Process.Start(info).WaitForInputIdle();
4

5 回答 5

3

尝试用(或您要将 Ghostscript 可执行文件安装到的任何路径)替换该""@PSDelegate" -q行的一部分。"/usr/local/bin/gs -q

根据您的环境,您可能需要向该命令行/行添加额外的参数,这些参数告诉gs(在 Windows 上:gswin32c.exegswin64c.exe)在哪里可以找到它的库:
-I/usr/local/share/ghostscript/9.06/lib/


更新: 尝试直接在 cmd.exe 窗口中运行此 Ghostscript 命令,以查看它是否有效(或产生哪些错误):

"F:/ImageMagickTest/ImageMagick/gs9.06/bin/gswin32c.exe" \
   -o F:/ImageMagickTest/PDFs/test.png                   \
   -dEPSCrop                                             \
   -dAlignToPixels=0                                     \
   -dGridFitTT=2                                         \
   -sDEVICE=pngalpha                                     \
   -dTextAlphaBits=4                                     \
   -dGraphicsAlphaBits=4                                 \
   -r72                                                  \
    F:/ImageMagickTest/PDFs/Appointment.pdf

不要担心我使用正斜杠('/')作为目录分隔符——Windows 上的 Ghostscript 可以很好地处理这些。

我希望您的 Ghostscript 安装是最新版本(否则它将无法理解-o输出文件的语法)。

如果此命令不起作用,您应该会在窗口中看到某种错误消息(因为我跳过了-q -dQUIET参数)。

可能 Ghostscript 找不到它的库,因为您可能只复制了 .exe 文件,而没有正确安装完整的软件包。

也许您需要添加-I"F:/ImageMagickTest/ImageMagick/gs9.06/lib"或类似于命令行的内容(我不知道您的 Ghostscript/lib目录是否真的位于 - 这只是一个猜测!):

"F:/ImageMagickTest/ImageMagick/gs9.06/bin/gswin32c.exe" \
   -o F:/ImageMagickTest/PDFs/test.png                   \
   -I"F:/ImageMagickTest/ImageMagick/gs9.06/lib"         \
   -dEPSCrop                                             \
   -dAlignToPixels=0                                     \
   -dGridFitTT=2                                         \
   -sDEVICE=pngalpha                                     \
   -dTextAlphaBits=4                                     \
   -dGraphicsAlphaBits=4                                 \
   -r72                                                  \
    F:/ImageMagickTest/PDFs/Appointment.pdf

只有在 cmd.exe 窗口中直接运行 Ghostscript 成功后,您才应该继续修改 delegates.xml 中的行。

于 2012-11-09T10:33:57.263 回答
1

尝试在没有管理权限的计算机上使用 ImageMagick 和 GhostScript(使用两者的便携版本)时,我遇到了同样的问题。尝试在 delegates.xml 中手动设置 GhostScript 的路径时出现错误,尝试将隐藏的 PDF 文件批量转换为 TIFF。

我找到的解决方案"@PSDelegate"是用完整路径替换所有实例,例如:&quot;C:\<path_to_exec>\gswin32c.exe&quot;在 delegates.xml 文件中,而不仅仅是 PDF 特定行。在这之后它工作得很好。

这可能是因为 GhostScript 也用于其他格式,并且"@PSDelegate"在转换 PDF 文件时可能依赖于 delegates.xml 文件中的其他实例。

于 2015-01-09T09:35:42.580 回答
0

Postscript delegate failed在运行 ImageMagick 进行 PDF 阅读时,我也收到了这条消息。问题是由 ImageMagick 读取以下注册表项之一(在 SOFTAWRE 下)以获取 Windows 上 gs 可执行文件的路径引起的。

  • GPL 鬼脚本
  • GNU 鬼脚本
  • AFPL Ghostscript
  • 阿拉丁鬼脚本

问题是这指向了一个非常旧版本的 Ghost 脚本,安装在用户的机器上,并且无法将 PDF 转换为图像。

解决方案是从机器上卸载有问题的古老包,或者更新 delegates.xml 文件以明确指向随附的 gs 可执行文件。

于 2015-05-29T12:14:30.443 回答
0

我有同样的问题,没有一个答案有帮助。事实证明,安装了 32 位版本的 ImageMagick 和 64 位版本的 GhostScript,但播放效果不佳。因此,我们删除了 64 位 GhostScript 并安装了 32 位版本,并且在取消了 delegates.xml 中的路径后它工作正常

于 2016-11-10T15:19:11.533 回答
0

就我而言,这是 Windows 10 上的问题。

我尝试了不同的选项,但 ImageMagick 总是尝试使用 gs.exe。所以我做了一些我认为不起作用的事情,基本上将我的gswin64c.exe文件重命名为gc.exe

在那之后它就起作用了。我唯一需要的是将路径添加到 exe 所在的环境变量中,在我的例子中是:C:\Program Files\gs\gs9.53.3\bin.

于 2020-12-22T00:51:43.737 回答