9

我转换PDF -> 许多 JPEG许多 JPEG -> 许多 PDF使用ghostscript. 我需要在每个转换后的 JPEG (PDF) 页面上添加水印文本。是否可以仅使用 Ghostscript 和 PostScript?

我发现的唯一方法:

gswin32c -q -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -sOutputFile=output.pdf watermark.ps input.pdf

但这会watermark.psoutput.pdf.

我可以直接在输出 PDF 页面上执行此操作吗?

我可以直接在输出 JPEG 页面上执行此操作吗?

<<
   /BeginPage
   { gsave
       /Helvetica_Bold 120 selectfont
       .85 setgray 130 70 moveto 50 rotate (Sample) show
     grestore
   } bind
>> setpagedevice

如果我使用/EndPage而不是/BeginPage- 它说不setpagedevice适用......

如何重新制作这个脚本/EndPage

4

3 回答 3

8

评论有点太大了,所以我添加了一个新答案。EndPage 过程(请参阅 PostScript 语言参考手册的第 441 页)在堆栈上采用两个附加参数,一个到目前为止发出的页面计数,以及一个原因代码。

您可以使用页面计数来做有趣的事情,例如双面打印,或者只标记偶数页或其他什么,但我假设在这种情况下您不想要它,所以您只需从堆栈中“弹出”它。

原因代码告诉您为什么发出页面,您可能也不在乎,所以您只需弹出该值。

最后,EndPage 必须向解释器返回一个布尔值,说明是否传输页面(这允许您做其他有趣的事情,比如只打印前 10 页等等)。

因此,您首先需要删除两个值,执行您的代码并返回一个布尔值。相当琐碎:

<<
   /EndPage
   { pop pop %% *BEFORE* gsave as that puts a gsave object on the stack
     gsave
     /Helvetica_Bold 120 selectfont
     .85 setgray 130 70 moveto 50 rotate (Sample) show
     grestore
     true %% transmit the page, set to false to not transmit the page
   } bind
>> setpagedevice
于 2012-09-26T07:26:51.787 回答
6

接受的答案是为我插入页面。除了水印,页面都是空白的。如果您遇到这种情况,请尝试在此处添加 2eq 位

<<
   /EndPage
   {
     2 eq { pop false }
     {
         gsave      
         /Helvetica_Bold 120 selectfont
         .85 setgray 130 70 moveto 50 rotate (Sample) show
         grestore
         true
     } ifelse
   } bind
>> setpagedevice

我发现以下网站为我指明了正确的方向

http://habjan.blogspot.com/2013/10/how-to-programmatically-add-watermark.html

这是上述文件保存为 watermark.ps 和 gswin32c 引用 ghostscript exe 的调用语法

gswin32c -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=watermarked.pdf watermark.ps original.pdf
于 2014-08-07T16:25:19.430 回答
1

我不知道你说的“直接”是什么意思。正如您所发现的,让 PostScript 解释器在每页的基础上执行多种操作是可能的。PostScript 毕竟是一种编程语言。

我建议从页面设备字典中的 /BeginPage 和/或 /EndPage 过程开始。这些允许您在每一页的开头或结尾执行任意 PostScript。

如果您定义 /BeginPage 过程,那么它将在输入程序的任何标记操作之前执行,如果您定义 /EndPage,那么它将在输入程序的标记操作之后执行(逐页(.

这使您可以让自己的标记位于程序标记的“下方”或“上方”。

于 2012-09-03T07:11:35.007 回答