运行 在多个实例中出现 Ghostscript 错误

Ghostscript errors when running in multiple instances

我有一个应用程序可以同时将多个 Postscript 文件转换为 PDF。 为此,我调用 ps2pdf input.ps output.pdf。 有时当我有很多(比方说 >4)文件需要转换时,我只得到一个 pdf,而其他转换失败。 问题是,失败的转换不会导致 ps2pdf 的退出代码不是 0。 我的 Ghostscript 版本是 9.16 for Windows x64.

我在 bugzilla 中找不到任何可以解释该行为的错误。

是否有比检查 output.pdf 是否存在并在不存在时重试更好的解决方案?

嗯,我们通常不希望人们 运行 Ghostscript 的多个实例。然而.....

很可能您与临时文件发生了某种冲突,您可以通过指定一个临时文件位置(显然每个实例都不同)来解决这个问题。

鉴于 Ghostscript 的标准版本使用单个 DLL,也有可能(尽管在 IMO 中不太可能,因为不应共享上下文)您遇到了共享 DLL 引起的问题。您可以设置多个目录并单独使用每个目录以查看是否有帮助。

对于复杂的设置,使用脚本可能也不是世界上最明智的想法。相反,直接调用 Ghostscript,您将获得更多控制权。

当您的转换失败时,您会收到什么消息?您使用的是什么版本的 Ghostscript?在什么操作系统上?

ps2pdf.exe 内部调用 gs.exemgs.exeghostscript。您不需要 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;
                }
            }

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