我每个月都有数百万个 Post Script 文件。每个文件有 4-5 页。除第1页外,每页内容很少。这样虽然文件内容不是太大,但是却造成了不必要的纸张浪费。
我正在寻找一些工具,可以将第 2 页压缩到最后一页或修剪未使用的空白区域,以便最佳地利用纸张。
我得到了具有 PSNUP 命令的 PSUTILS,但它也没有完全满足我的解决方案。
任何有想法的人都可以帮助解决这个问题。
我的示例 Post 脚本文件可以从以下位置下载
https://www.dropbox.com/s/2z9oirsvxzf13di/1010472622.ps
以上是一个三页的 Post 脚本文件。页码 2 和 3 可以组合在一起以实现最佳纸张使用。
请详细指导
问候 code.box@rediffmail.com
这是个有趣的问题。这是部分答案。
要引用类似问题的类似答案,您必须解决两个问题:
对于#1,您可以使用Ghostscript的边界框输出设备。使用如下调用:
gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=bbox
Run Code Online (Sandbox Code Playgroud)
Ghostscript 会向标准输出打印一个边界框,例如:
%%BoundingBox: 14 37 570 719
%%HiResBoundingBox: 14.308066 37.547999 569.495061 718.319158
Run Code Online (Sandbox Code Playgroud)
这四个数字是页面上可见内容的边框的左上角和右下角的 x,y 坐标。它们以默认的 PostScript 语言坐标系表示。
对于#2,以某种方式捕获边界框输出,并使用它生成修改后的输出文件,其中每个输出页面上组合有多个输入页面。
如果您的 PostScript 语言文件遵循文档结构约定,那么您就有很大的机会在 PostScript 语言中执行此操作。如果没有,那么您最好使用 GhostScript 将文件转换为 PDF 语言并在该级别进行合并。
约定的重要属性是每个页面都是独立的,并且文件包含结构化注释,以便您可以检测输入文件中每个页面的开始和结束位置。另外,如果将不同的输入文件合并到一个输出文件中,则输出文件需要包含每个输入文件的所有标头的所有资源。
您需要编写逐页迭代输入文件的代码。它需要逐页生成输出文件。对于每个输出页面,它需要跟踪页面上迄今为止内容的边界框。
对于每个输入文件,它会查找步骤 1 中的边界框。它将其与输出页面的边界框进行比较。如果输出页面上有输入页面内容的空间,则: * 生成 PostScript 语言代码来保存图形状态,然后将坐标系下移到输出页面的空白部分, * 将输入页面内容复制到输出文件,*生成恢复图形状态的代码
如果没有空间,它将完成当前的输出页面,开始一个新的输出页面,然后执行上述操作。
我不知道有任何现有的、易于使用的工具可以进行此类页面内容拼版。对于熟悉 PostScript 语言和文档结构约定的程序员来说,编写这样的工具会很简单。这与编写基于 PostScript 语言的页面拼版程序类似。