运行 在多个实例中出现 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.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;
}
}
这会导致数百毫秒的延迟响应,具体取决于同时调用的数量。您可以通过将此作为异步任务来解决延迟响应问题:)
我有一个应用程序可以同时将多个 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.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;
}
}
这会导致数百毫秒的延迟响应,具体取决于同时调用的数量。您可以通过将此作为异步任务来解决延迟响应问题:)