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

时间:2015-10-16 08:14:10

标签: pdf ghostscript

我有一个将多个Postscript文件同时转换为PDF的应用程序。 为此,我致电ps2pdf input.ps output.pdf。 有时当我有许多(让我们说> 4)文件需要转换时,我只得到一个pdf而其他转换失败。 问题是,失败的转换不会导致除了0之外的ps2pdf的exitcode。 对于Windows x64,我的Ghostscript版本为9.16。

我找不到任何可以解释这种行为的bugzilla错误。

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

3 个答案:

答案 0 :(得分:1)

ps2pdf.exe在内部调用gs.exemgs.exe ghostscript。您不需要ps2pdf.exe即可使用gs.exe获得相同的功能。 ps2pdf.exe无法与多个实例一起正常运行。实际上,ps2pdf.exe一次只能执行一次实例。

答案 1 :(得分:0)

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

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

鉴于标准版本的Ghostscript使用单个DLL,它也可能(尽管不太可能是IMO,因为不应该共享上下文),因为共享DLL会导致问题。您可以设置多个目录并分别使用每个目录来查看是否有帮助。

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

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

答案 2 :(得分:0)

我们找到了解决方法:

            var attempts = 0;
            while (true)
            {
                try
                {
                    attempts++;
                    Ghost.Pdf2Image.Convert(pdf_filename);

                    break; 
                }
                catch
                {
                    //prevent forever loops
                    if (attempts > 99) break;
                }
            }

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