我有一个应用程序将多个Postscript文件同时转换为PDF。要做到这一点,我打电话给ps2pdf input.ps output.pdf
。有时当我有许多(比方说> 4)需要转换的文件时,我只得到一个pdf而其他转换失败。问题是,失败的转换不会导致除了0之外的ps2pdf的exitcode。对于Windows x64,我的Ghostscript版本是9.16。
我找不到任何可以解释这种行为的bugzilla中的错误。
有没有比检查output.pdf是否存在更好的解决方案,如果不存在则重试?
好吧,我们通常不希望人们运行多个Ghostscript实例。然而.....
您很可能与临时文件发生某种冲突,您可以通过指定临时文件位置来解决问题(显然每个实例都有一个不同的位置)。
鉴于标准版本的Ghostscript使用单个DLL,它也可能(尽管不太可能是IMO,因为不应该共享上下文),因为共享DLL会导致问题。您可以设置多个目录并分别使用每个目录来查看是否有帮助。
对于复杂的设置,使用脚本可能也不是世界上最聪明的想法。直接调用Ghostscript,您将获得更多控制权。
当您的转换失败时,您会收到哪些消息?您使用的是什么版本的Ghostscript?什么操作系统?
ps2pdf.exe
内部称为gs.exe
或mgs.exe
,这是ghostscript
。你不需要ps2pdf.exe
你可以使用gs.exe
获得相同的功能。 ps2pdf.exe
在多个实例中无法正常工作。实际上,ps2pdf.exe
一次只能执行一次实例。
我们找到了解决方法:
var attempts = 0;
while (true)
{
try
{
attempts++;
Ghost.Pdf2Image.Convert(pdf_filename);
break;
}
catch
{
//prevent forever loops
if (attempts > 99) break;
}
}
这导致根据同时呼叫的数量延迟响应100毫秒。您可以通过将此作为异步任务来解决延迟响应:)