【问题标题】:GhostScript Percentage CompleteGhostScript 完成百分比
【发布时间】:2014-02-12 15:16:36
【问题描述】:

我有一个正在使用 Python 和 GhostScript 进行的项目。目前我有一个几百页的 PDF 文件,我需要获取这个 PDF 并将页面分成 TIF 文件,我已经启动并正确运行了代码,但是由于这个程序可能需要一些时间才能完成,所以我想要给用户的输出,显示它在过程中的距离。

gs_appdir = 'C:\\Program Files\\gs\\gs9.10\\bin\\'
os.chdir(gs_appdir)
args = "-o \""+wkgdir+"Images\\Image_%03d.tif\" -sDEVICE=tiffg4 -q -NODISPLAY -r200x200 -s \""+inPDFFile+"\""
os.system("gswin64c.exe %s" % args)

当我从参数中取出 -q 参数时,它会显示给我,但是它会逐行显示:

xxxx 的第 1 页
第 2 页,共 xxxx
第 3 页,共 xxxx
...等等。

我想做类似的事情:

print "\r[ Preparing Images ] %s%%" % ((img+1)*100/imgcount),

它将在同一行打印百分比,但是我不太确定如何使用 GhostScript 完成此操作。任何建议都将不胜感激。

【问题讨论】:

    标签: python parameters formatting ghostscript


    【解决方案1】:

    嗯,我认为基本上你不能这样做。通过大量 PostScript 编程,您可以获得您想要传递的形式的消息,但它会在标准输出上,所以如果您使用 -q 运行,那么它将被抑制。

    您必须首先使用 4 个 Ghostscript 扩展来打开 PDF 文件,开始 PDF 解释,计算页数,然后进入渲染每个页面并发出消息的循环。随后关闭一切。通常,Ghostscript 中的便利例程会为您处理所有这些,但它们不会发出您想要的那种消息。

    即使它们都在同一行发出,我认为您不会喜欢它。您似乎假设后面的行将简单地擦除(写在上面)前面的行,而我认为并非如此,尽管它确实取决于命令外壳(因此取决于操作系统)您正在使用。我注意到您似乎使用的是 Windows,您可能可以通过 \r 获得此效果,我不确定。

    从根本上说,如果你想这样做,你将不得不编写一个使用 API 的新应用程序,而不是将 Ghostscript 作为外部进程执行,并自己处理 stdout 回调。

    【讨论】:

    • 这几乎就是我所担心的。我认为我的用户只需要接受 1-2 分钟的等待(可能会为他们提供预先消息)。至于 \r,您是正确的,并非所有人都会接受,但是对于这个特定的设置,它是有效的。
    • @user3232819:你只需要改变你的方法。您可以在进程运行时获取进程输出,而无需等待进程完成其任务。看看这个:stackoverflow.com/questions/16557908/… // 如果您以建议的方式调用 Ghostscript,您将能够在处理页面时从 Ghostscript 获得逐行输出。我在 .NET 中做了类似的事情,它可以工作。当您逐行输出时,解析每一行以获取“当前页”以及“总页数”并计算您的进度值。
    猜你喜欢
    • 2014-04-11
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多