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

问题描述 投票:0回答:3

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

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

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

pdf ghostscript
3个回答
0
投票

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

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

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

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

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


1
投票

ps2pdf.exe内部称为gs.exemgs.exe,这是ghostscript。你不需要ps2pdf.exe你可以使用gs.exe获得相同的功能。 ps2pdf.exe在多个实例中无法正常工作。实际上,ps2pdf.exe一次只能执行一次实例。


0
投票

我们找到了解决方法:

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

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

这导致根据同时呼叫的数量延迟响应100毫秒。您可以通过将此作为异步任务来解决延迟响应:)

© www.soinside.com 2019 - 2024. All rights reserved.