Ghostscript Как сделать водяной знак одной специальной страницы постскриптумного документа? - PullRequest
0 голосов
/ 04 марта 2019

Я уже добавляю водяной знак (или изображение) на каждую страницу документа .ps с помощью приведенной ниже команды и сценария gs.

[root@localhost ~]#gs -dBATCH -dNOPAUSE -q -sDEVICE=ps2write -sOutputFile=watermarked.ps mark.ps doc_test.ps

содержимое mark.ps:

<<
/EndPage
{
  2 eq { pop false }
  {
    gsave
    /STSong-Light-UniGB-UTF8-H findfont 30 scalefont setfont
    newpath
    .87 setgray
    260 50 moveto 30 rotate
    (test 测试) false  charpath
    1 setlinewidth stroke
    grestore
    true
  } ifelse
} bind
>> setpagedevice

но я не знаю, как указать страницу для добавления водяного знака, например .ps документ длиной 12 страниц, я просто хочу добавить водяной знак на странице 6, но я хочу, чтобы выходной файл содержал все 12 страниц документа и простостраница 6 имеет водяной знак.Кто-нибудь из экспертов Ghostscript знает, как написать это требование?Большое спасибо !!!

1 Ответ

0 голосов
/ 05 марта 2019

Если для ввода используется PostScript, вы можете использовать номер, который ваша программа извлекает из стека, потому что это количество выполненных к настоящему времени страниц.

Если вы посмотрите на определение EndPage в PLRM (page427 в 3-м издании), вы увидите, что стек операндов содержит два числа, код причины сверху и количество предыдущих выполнений демонстрационной страницы.Вы должны сначала проверить код причины.Если его 2, высчитайте количество и верните false.Если это не 2, то проверьте второе число, чтобы увидеть, если это значение, которое вызовет вашу страницу.Если это не так, верните true.Если это так, то сначала выполните процедуру разметки и затем верните true.

Примечание: мне кажется, ваша программа оставляет количество выполнений showpage в стеке операндов, когда код причины равен 2. Это плохопрактика;если вызывается достаточно часто, вы можете вызвать ошибку переполнения стека.Также допустимо, чтобы программа оставляла операнды в стеке во время показа страницы и использовала их после.Если вы оставите что-то в стеке, это будет означать, что программа извлекает неправильные объекты.

К сожалению, когда ввод PDF, интерпретатор Ghostscript PDF выполняет setpagedevice на каждой странице, и это сбрасывает счетчик до 0.

Поэтому, когда входной файл представляет собой PDF, вам нужно изменить свою программу, чтобы сохранить количество страниц, с которыми она столкнулась, чтобы вы могли проверить ее и активировать только при необходимости.Дайте ему уникальное имя и сохраните его в userdict, увеличивайте его при каждом выполнении EndPage и запускайте маркирующую часть программы только тогда, когда она достигает определенного значения.

PostScript равен aязык программирования ......

...