1

我需要自动化以下过程:

  1. 在 PostScript 输入文件中剪切页面的一部分(例如:input.ps,剪切从 10,10 到 150, 200 的所有内容)。

  2. 将该部分插入一个新的 PostScript 文件,旋转 n 度(例如,旋转 40 度,放置在 100,100 附近)。

有没有办法使用 PostScript 命令或 GhostScript 的任何特殊功能来做到这一点?

将文件转换为 PDF 并修改 PDF 也是一种选择。

编辑1:

由于我在测试基于 PS 的解决方案时发现的问题,我更喜欢使用 PDF。

到目前为止的答案解决了“剪切”PDF的问题。但是,我仍然需要将结果旋转 n 度,其中 n 不是 90 的倍数。

任何提示或方向将不胜感激。
谢谢!

4

2 回答 2

4

从 PostScript 的角度考虑问题。为了获得“剪切”的效果,您需要应用剪切路径。你想要一个矩形,这很容易:

clipleft clipbottom moveto
0 clipheight rlineto
clipwidth 0 rlineto
0 clipheight neg rlineto
closepath clip

如果您在所需页面的开始之前注入此代码,它应该剪辑到该矩形。

要获得旋转的效果,您可以应用变换矩阵或使用旋转命令:

degrees rotate

这将影响之后的所有操作。现在,更有可能的是,你会想要做这样的事情:

degrees rotate
placementx placementy translate
0 0 moveto
0 clipheight rlineto
clipwidth 0 rlineto
0 clipheight neg rlineto
closepath clip

这将旋转轴,将原点平移到您想要的位置,绘制剪辑矩形并剪辑到它。之后的任何绘图都将受到先前转换的影响——除非呈现页面的代码调用 PostScript 运算符 initgraphics(或任何其他重置页面属性的运算符),那么除了重新定义 initgraphics 之外,您无能为力真的不应该这样做(并且在许多系统上可能被禁止这样做)。

于 2012-11-21T13:10:19.260 回答
0

我的专长在于 PDF 而不是 PostScript,但 PDF 肯定是可能的。逻辑步骤将总结为:

1) 打开第一个 PDF 并更改此文件的修剪框,以便只有您想要的部分仍然可见。

2) 打开第二个 PDF 文件并将第一个 PDF 合成到所需位置。

在 PDF 中执行此操作使其更安全,因为 PDF 比 PostScript 更安全(不可能在其中一个文件中出现一些巧妙的 PostScript 代码使您的算法失效)。

你如何做到这一点在很大程度上取决于你正在从事的项目中的约束条件。当然有商业工具可以做这样的事情。我猜想也有可以提供帮助的开源/免费工具,甚至可能是 GhostScript 本身或 pdflib 之类的东西。

于 2012-11-23T23:17:31.350 回答