如何在PostScript中交换文本

时间:2011-09-22 16:09:05

标签: postscript

我确实有以下PostScript代码内容,这些内容最初是由Windows XP上的Ghostscript打印机生成的。

/Euro /Times-BoldItalic /Times-BoldItalic-Copy BuildNewFont
} if
F /F1 0 /256 T /Times-BoldItalic mF 
/F1S52 F1 [82.664 0 0 -82.664 0 0 ] mFS
F1S52 Ji 
581 547 M (This is just a little test content)[55 42 42 23 46 37 42 37 28 21 51 42 21 51 46 42 32 66 42 21 60 42 55 21 21 21 55 37 32 46 55 42
23  0]xS 
; 

我只是想编辑文本,但如果我尝试更改括号之间的文本,无论新文本是长还是短,文本都会失真。

我试图了解上面的代码是做什么的,但我没有为此找到适当的文档。

你能帮我理解一下代码 - 尤其是以'581'开头的行,以及如何在不破坏布局的情况下编辑文本?

提前谢谢!

PS:我需要这个用于自动交换某些段落的python脚本,因此我不会寻找用于编辑的第三方工具,PDF编辑工具或类似的东西;)

3 个答案:

答案 0 :(得分:2)

以'581'开头的行显然移动到581 547点,然后以某种方式推送xS使用的字符串和数组。我怀疑xS是使用该数组的show的扩展版本,但我不知道如何。您必须查看PS文件的开头才能找到xS的定义。同样mFS似乎是一种转换,因为它得到了一个矩阵。

无论如何,如果PS文件包含排版文本,那么你不可能在不打破排版的情况下更改其中的文本。

答案 1 :(得分:2)

xS几乎肯定只是xshow,它取字符串和数组并使用数组来确定文本。您可以使用简单的show替换文本。你看到的地方:

(This is just a little test content)[...]xS 

将其替换为:

(This is my replacement content) show

您文件的序言部分会有一些show的简写名称,但您不必使用它。该文本可能仍然不适合,但如果您只是更改表单中的条目或同等隔离的内容(标题,脚注等),它可能会没问题。

如果你想获得幻想,你可以利用PostScript是一种成熟的编程语言这一事实​​。您可以编写一个函数来确定旧字符串的宽度(对于此xshow,您将找到数组最后一个元素的右边缘加上字符串最后一个字符的stringwidth,然后计算新字符串的长度(stringwidth),然后使用ashow将字符串挤压/拉伸到其位置。

答案 2 :(得分:1)

我同意@lhf。你真的应该在postscript级别进行这种编辑“上游”。无论源应用程序是什么,都需要脚本生效。如果应用程序没有本机脚本,那么您仍然可以使用WinBatch之类的东西与它进行交互。我已经使用WinBatch制作宏向导来向telnet3270客户端提供击键:通过交互式系统启用“批量”操作。对于unix,我们期待。