【问题标题】:How to Trim White Space in Post Script如何在 Post Script 中修剪空白
【发布时间】:2012-12-25 16:16:22
【问题描述】:

我每个月都有数百万个 Post Script 文件。每个文件每个有 4-5 页。 除了第 1 页,每一页的内容都很少。所以虽然文件中的内容不是太大,但也有不必要的纸张浪费。

我正在寻找一些工具,可以将第 2 页压缩到最后或修剪未使用的空白区域,以便最佳地使用纸张。

我得到了具有 PSNUP 命令的 PSUTILS,但它也没有完全满足我的解决方案。

任何有想法的人都可以帮助解决这个问题。

可以从以下位置下载我的示例 Post Script 文件

https://www.dropbox.com/s/2z9oirsvxzf13di/1010472622.ps

以上是一个三页的后置脚本文件。是否可以将第 2 页和第 3 页打成棒状以优化纸张使用。

请详细指导

问候' code.box@rediffmail.com

【问题讨论】:

  • 嗨 - 欢迎来到 Stackoverflow!由于您在帖子中留下了电子邮件地址:请注意,答案仅在本论坛和本论坛内给出,因为这是 stackoverflow 和此类网站的全部要点 - 不是通过邮件。
  • 一个简单的解决方案可能是使用“n-up”实用程序在每张纸上打印多页。缩小尺寸对你有用还是太小而不适合?
  • 链接已失效。如果它不是太大,您可以将文件包含在代码块中。或 pastebin。
  • 这实际上是一个有趣的问题,但如果没有示例文件,就没有什么可做的了。

标签: postscript


【解决方案1】:

这是一个有趣的问题。这是部分答案。

引用similar answer to a similar question,你必须解决两个问题:

  1. 如何确定每个页面的边界框,即包围页面上所有可见标记的最小坐标。
  2. 如何将多个输入页面合并到一个输出页面。

对于#1,您可以使用Bounding Box output deviceGhostscript。使用如下调用:

gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=bbox 

和 Ghostscript 打印到标准输出一个边界框,如:

%%BoundingBox: 14 37 570 719
%%HiResBoundingBox: 14.308066 37.547999 569.495061 718.319158

这四个数字是页面上可见内容边界框左上角和右下角的 x,y 坐标。它们以默认 PostScript 语言坐标系表示。

对于#2,以某种方式捕获边界框输出,并使用它来生成修改后的输出文件,其中在每个输出页面上组合了多个输入页面。

如果您的 PostScript 语言文件遵循 Document Structuring Conventions,您就有机会在 PostScript 语言中执行此操作。如果没有,那么您最好使用 GhostScript 将文件转换为 PDF 语言并在该级别进行组合。

约定的重要属性是每个页面都是独立的,并且文件包含结构化 cmets,因此您可以检测输入文件中每个页面的开始和结束位置。另外,如果你将不同的输入文件组合成一个输出文件,输出文件需要包含每个输入文件所有头文件的所有资源。

您需要编写逐页遍历输入文件的代码。它需要逐页生成输出文件。对于每个输出页面,它需要跟踪页面上到目前为止内容的边界框是什么。

对于每个输入文件,它从第 1 步开始查找边界框。它将其与输出页面的边界框进行比较。如果输出页面上有输入页面内容的空间,那么: * 生成 PostScript 语言代码保存图形状态,然后将坐标系向下平移到输出页面的空白部分, * 将输入页面内容复制到输出文件, * 生成恢复图形状态的代码

如果没有空间,则结束当前输出页面,开始一个新的输出页面,然后执行上述操作。

我不知道有任何现有的、易于使用的工具可以执行这种页面内容拼版。对于熟悉 PostScript 语言和文档结构约定的程序员来说,编写这样一个工具会很简单。这与编写基于 PostScript 语言的页面拼版程序类似。

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2018-08-26
    • 2017-03-16
    • 1970-01-01
    • 2012-08-07
    • 2013-10-21
    相关资源
    最近更新 更多