rad*_*tao 8 pdf jpeg watermark postscript ghostscript
我转换PDF - >许多JPEG和许多JPEG - >许多PDF使用ghostscript
.我需要在每个转换的JPEG(PDF)页面上添加水印文本.是否可以只使用Ghostscript和PostScript?
我找到的唯一方法:
gswin32c -q -sDEVICE = pdfwrite -dBATCH -dNOPAUSE -sOutputFile = output.pdf watermark.ps input.pdf
但这将watermark.ps
在第一个单独的页面上插入水印output.pdf
.
我可以直接在输出PDF页面上执行此操作吗?
我可以直接在输出JPEG页面上执行此操作吗?
<<
/BeginPage
{ gsave
/Helvetica_Bold 120 selectfont
.85 setgray 130 70 moveto 50 rotate (Sample) show
grestore
} bind
>> setpagedevice
Run Code Online (Sandbox Code Playgroud)
如果我使用/EndPage
而不是/BeginPage
- 它说不setpagedevice
适用...
如何重新制作此脚本/EndPage
?
评论太大了,所以我添加了一个新答案.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
Run Code Online (Sandbox Code Playgroud)
可接受的答案是为我插入页面。除了水印外,这些页面都是空白的。如果遇到这种情况,请尝试在此处添加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
Run Code Online (Sandbox Code Playgroud)
我找到了以下指向我正确方向的网站
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
Run Code Online (Sandbox Code Playgroud)