Как обмениваться текстом в PostScript - PullRequest
3 голосов
/ 22 сентября 2011

У меня есть следующее содержимое кода PostScript, первоначально созданного принтером Ghostscript в Windows XP.

/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 голосов
/ 24 сентября 2011

xS почти наверняка просто xshow, который принимает строку и массив и использует массив для преобразования текста.Вы можете заменить текст с помощью простого show.Где вы видите:

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

замените это на:

(This is my replacement content) show

В преамбуле вашего файла будет некоторое сокращенное имя для show, но вам не нужно его использовать.Этот текст может все еще не соответствовать, но если вы просто изменяете запись в форме или что-то одинаково изолированное (заголовок, сноска и т. Д.), То, вероятно, все будет в порядке.возможно, вы можете воспользоваться тем, что PostScript является полноценным языком программирования.Вы можете написать функцию, которая определяет ширину старой строки (для этого xshow вы найдете правый край последнего элемента массива плюс stringwidth последнего символа строки), а затем вычислит длинуваша новая строка (stringwidth) и затем использует ashow, чтобы сжать / растянуть вашу строку на свое место.

2 голосов
/ 22 сентября 2011

Строка, начинающаяся с '581', по-видимому, перемещается в точку 581, 547, затем толкает строку и массив, который каким-то образом используется xS. Я подозреваю, что xS - это расширенная версия show, которая использует этот массив, но я не знаю как. Вам нужно будет посмотреть начало PS-файла, чтобы найти определение xS. Также mFS кажется преобразованием, потому что получает матрицу.

В любом случае, если файл PS содержит набранный текст, маловероятно, что вы сможете изменить текст внутри него, не нарушая набор текста.

1 голос
/ 22 сентября 2011

Я согласен с @lhf. Вы действительно должны сделать такого рода редактирование "вверх по течению" от уровня PostScript. Каким бы ни было исходное приложение, сценарии должны вступить в силу. Если у приложения нет собственных сценариев, вы все равно можете взаимодействовать с ним с помощью чего-то вроде WinBatch. Я использовал WinBatch для создания мастеров макросов для передачи нажатий клавиш клиенту telnet3270: включение «пакетных» операций в интерактивной системе Для Unix есть ожидание.

...