Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 鬼脚本';ImageMagick中的文件路径_Xml_Windows_Macos_Imagemagick_Ghostscript - Fatal编程技术网

Xml 鬼脚本';ImageMagick中的文件路径

Xml 鬼脚本';ImageMagick中的文件路径,xml,windows,macos,imagemagick,ghostscript,Xml,Windows,Macos,Imagemagick,Ghostscript,我试图在PC和OSX上使用ImageMagick将PDF转换为PNG,但实际上我无法在任何使用我的软件的计算机上安装GhostScript 有没有办法将GhostScript与ImageMagick捆绑在一起,并将ImageMagick的路径重定向到该包,这样我就可以使用它,而无需在用户的计算机上正式“安装”它 ,但我无法理解如何更改ImageMagick中的delegates.xml文件以使其正常工作。我想我必须改变这一行的某些部分: <delegate decode="pdf" e

我试图在PC和OSX上使用ImageMagick将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"" /> 
(C) 版权所有1985-2001微软公司

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#脚本(我没有收到错误):

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

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


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

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

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

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

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

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


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

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

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


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

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

  • GPL鬼脚本
  • GNU鬼脚本
  • AFPL鬼脚本
  • 阿拉丁鬼书
问题是这指向了安装在用户机器上的非常旧版本的Ghost脚本,并且无法将PDF转换为图像


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

我也遇到了同样的问题,但没有一个答案有帮助。原来安装了32位版本的ImageMagick和64位版本的GhostScript,但效果不好。因此,我们删除了64位的GhostScript并安装了一个32位版本,在对delegates.xml中的路径进行了日期标注后,它运行良好。在我的例子中,这在Windows 10上是一个问题

我尝试了不同的选项,但ImageMagick始终尝试使用gs.exe。因此,我做了一些我认为不起作用的事情,并将我的gswin64c.exe文件重命名为gc.exe


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

Kurt!谢谢你的帮助。我正试图按照您的指示更改xml行……但我不确定是否正确确定了路径。我已经更新了这个问题以反映它……您的更新显示您没有将Ghostscript可执行文件放入命令行,而只是将其假定位于的目录:
…\bin`。在Windows上,您要查找的可执行文件名为
gswin32c.exe`或gswin64c.exe。好的,很酷,我已将可执行文件添加到末尾,但仍然没有更改。我已经用新的错误更新了我原来的问题——据我所知,基本上是一样的。顺便说一句,再次感谢你帮了我这么大的忙。如果没有您,则无法执行此操作。请删除包含路径的两个
@
字符。当您给出可执行文件的完整路径时,它不再是一个变量(就像
@PSDeletage@
一样)。它应该是
。。。command=”“F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe”…
--另外,您肯定已经检查过这确实是您的Ghostscript可执行文件?!嘿,库尔特!谢谢您回复我。我肯定这是我的可执行文件--至少,它在windows中显示了自己
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.
F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe
    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();
"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
"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