我有一个应用程序,可以同时将多个Postscript文件转换为PDF。我称之为ps2pdf input.ps output.pdf
。有时当我有很多(假设>4)个文件需要转换时,我只得到一个pdf,其他转换失败。问题是,失败的转换不会产生除0以外的退出码ps2pdf。我的Ghostscript版本是9.16,适用于Windows x64。
我在bugzilla中找不到任何可以解释这种行为的bug。
有比检查output.pdf是否存在和重试更好的解决方案,如果它不存在?
ps2pdf.exe
内部调用gs.exe
或mgs.exe
,即ghostscript
。您不需要ps2pdf.exe
,您可以使用gs.exe
获得相同的功能。ps2pdf.exe
不能正常工作与几个实例。实际上,ps2pdf.exe
一次只执行一个实例。
嗯,我们通常不期望人们运行多个Ghostscript实例。然而…
很可能与临时文件发生某种冲突,您可以通过指定临时文件位置(显然每个实例的位置不同)来解决这个问题。
考虑到Ghostscript的标准版本使用单个DLL,它也有可能(尽管IMO不太可能,因为上下文不应该被共享),你有一个由共享DLL引起的问题。您可以设置几个目录,并单独使用每个目录,看看是否有帮助。
对于复杂的设置,使用脚本可能也不是世界上最聪明的主意。直接调用Ghostscript,你会得到更多的控制。当你的转换失败时,你会得到什么消息?你用的是什么版本的Ghostscript ?
我们找到了解决办法:
var attempts = 0;
while (true)
{
try
{
attempts++;
Ghost.Pdf2Image.Convert(pdf_filename);
break;
}
catch
{
//prevent forever loops
if (attempts > 99) break;
}
}
这会导致数百毫秒的延迟响应,这取决于同时调用的数量。您可以通过将此作为异步任务来处理延迟响应:)