如何用命令行为ghostscript添加水印?

时间:2016-08-01 07:31:33

标签: pdf ghostscript watermark

有没有办法用命令行在每个pdf上添加水印?因为我需要从代码中设置params

'gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="7ed753c56994067cb0c8dc18fbf14921.pdf" "b79d2282c15b7e824cb8ee400401161d.pdf" "f21958c0b3a4a01fe22c9a60b6e15121.pdf" "d46615b5dd7b6e6565ef1ce8b117b860.pdf" "f46ea9512f5763693c84d8061eeff742.pdf"'

我只需要设置水印,不透明度,位置x,y和宽度\高度

的路径

2 个答案:

答案 0 :(得分:3)

如果您只能使用文本而不是图像进行水印,那么您可以使用“设置行宽”笔划来模拟水印。

只需创建一个如下所示的mark.ps文件:

<<
   /EndPage
   {
     2 eq { pop false }
     {
         gsave      
         /Helvetica findfont 48 scalefont setfont
         newpath
         .90 setgray 130 70 moveto 50 rotate
         (${watermark}) false  charpath
         1 setlinewidth stroke
         grestore
         true
     } ifelse
   } bind
>> setpagedevice

然后运行:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=watermarked.pdf mark.ps original.pdf

我已经在github中名为pdf-bash-tools的普通旧bash(POB)开源CLI项目中提供了密码保护,搜索,拆分和合并等功能。

答案 1 :(得分:0)

向每个页面添加内容的唯一方法是使用PostScript为您完成。添加自定义EndPage过程将允许您在页面完成之前立即在呈现的页面位图上放置标记(或者在pdfwrite的情况下,附加到页面内容流)。

PostScript不支持透明度,因此您无法立即使用PostScript来实现“不透明度”。但是,Ghostscript确实支持pdfmark运算符,而对于PDF输出,可以使用它。

所以你需要做的是编写一个EndPage程序,该程序使用pdfmark在页面上绘制注释。注释的外观流将包含“水印”的绘图操作。如果您希望外观涉及透明度,您可能需要添加透明度组,但也可以使用pdfmark完成。