如何在PostScript中交换文本

3

我有以下的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个回答

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

以“581”开头的行显然移动到点581 547,然后推送一个字符串和数组,这些由xS某种方式使用。我怀疑xSshow的扩展版本,它使用该数组,但我不知道如何操作。您需要查看PS文件的开头以找到xS的定义。此外,mFS似乎是一种变换,因为它获得了一个矩阵。

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


@Ihf谢谢你的提示,你是对的!最后一个问题:你能告诉我Postscript中冒号和分号的含义吗?我在任何参考资料中都没有找到它们。提前致谢! - muffel
1
我认为冒号和分号没有任何预设含义,但它们可以被定义为任何东西,就像一个命名过的过程。请查看PS文件开头以找到定义。 - lhf
@muffel,我找到了一个可以使用的文件在这里xs只是xshow,它使用数组来移动字母。因此,当您更改文本长度时(即使您不更改),会出现混乱。冒号表示gsave,分号表示grestore。定义靠近%%BeginResource:file Pscript_Win_Basic - lhf

1

我同意@lhf的观点。你真的应该在后置脚本级别上进行这种编辑。无论源应用程序是什么,都需要在那里实现脚本编写。如果应用程序没有本地脚本,则仍然可以使用类似WinBatch的工具与其进行接口交互。我曾经使用WinBatch制作宏向导,向telnet3270客户端提供按键操作:通过交互式系统启用“批量”操作。对于Unix,有expect。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接