Ghostscript在多个实例中运行时出错



我有一个应用程序,可以同时将多个Postscript文件转换为PDF。我称之为ps2pdf input.ps output.pdf。有时当我有很多(假设>4)个文件需要转换时,我只得到一个pdf,其他转换失败。问题是,失败的转换不会产生除0以外的退出码ps2pdf。我的Ghostscript版本是9.16,适用于Windows x64。

我在bugzilla中找不到任何可以解释这种行为的bug。

有比检查output.pdf是否存在和重试更好的解决方案,如果它不存在?

ps2pdf.exe内部调用gs.exemgs.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;
                }
            }

这会导致数百毫秒的延迟响应,这取决于同时调用的数量。您可以通过将此作为异步任务来处理延迟响应:)

最新更新