GhostScript / PostScript / PDF - 从PS文件中剪切一个矩形,将其旋转45度,然后粘贴到另一个文件中 - 如何?

时间:2012-11-21 12:44:11

标签: pdf ghostscript postscript

我需要自动执行以下过程:

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

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

  3. 有没有办法使用PostScript命令或GhostScript的任何特殊功能?

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

    编辑1:

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

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

    任何提示或指示都将受到赞赏 谢谢!

2 个答案:

答案 0 :(得分: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之外你没有什么可以做的,真的不应该这样做(并且很多系统都可能被禁止)。

答案 1 :(得分:0)

我的专业知识更多地依赖于PDF而不是PostScript,但使用PDF肯定是可能的。逻辑步骤总结如下:

1)打开第一个PDF并更改此文件的剪裁框,以便只显示您想要的部分。

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

在PDF中执行此操作会使其更安全,因为PDF操作比PostScript更安全(在其中一个文件中没有一些聪明的PostScript代码可能会使算法失效)。

如何执行此操作很大程度上取决于您正在处理的项目中的约束条件。肯定有商业工具可以做这样的事情。我猜想还有开源/免费工具可能会有所帮助,甚至可能是GhostScript本身或类似pdflib的东西。