如何从 PostScript 文件(由 Opera 生成)中确定页数?

如何从 PostScript 文件(由 Opera 生成)中确定页数?

我不懂 PostScript 语言。

我有一个用 bash 编写的双面打印仿真系统。它先打印奇数页,然后打印偶数页。它需要知道是否有奇数页数,以便可以弹出没有对应偶数面的最后一个奇数页。它还使用页数来报告目的。

我不知道如何正确地做到这一点,所以我编写了代码,在 PostScript 文件的末尾和开头(如果需要)搜索“%%Pages:”,后面跟着页数。这几乎适用于除 Opera 浏览器打印的文件之外的所有文件。

有人可以建议其他方法来获取此信息吗?

Postscript 文件往往相当大,包含大量非人类可读的内容,因此我还没有花很多时间仔细研究 Opera 发布的那些文件。

短暂性脑缺血发作

当前代码位于:

http://sourceforge.net/projects/duplexpr/

function ps_page_ct

答案1

以下 Ghostscript 命令将可靠地计算 PostScript 文件中的页数 - 但它可能相当慢,因为它需要完全解释(运行)文件,正如@afrazier 在评论中所述:

gs \
 -o /dev/null \
 -sDEVICE=bbox \
  input.ps 2>&1 \
| grep HiResBoundingBox \
| wc -l

答案2

不幸的是,没有简单的方法可以在原始 Postscript 文件中查找页面。这就是%%Pages创建约定(Adobe 文档结构约定)的原因。

发出寻呼的命令是showpage。在简单情况下,你只需计数即可。

但是这个命令可以嵌入在函数主体中,然后您需要一个 Postscript 解析器。

答案3

我在某处找到了这个小代码片段,它可以非常快速地处理文档并打印出页数。如果 exiftool 由于文档生成不正确而无法打印此元数据信息,那么这会有所帮助:

gs -dNODISPLAY -dBATCH -dNOPAUSE -o /dev/null source|grep -P '^Page'|wc -l

相关内容