【问题标题】:How add watermark to ghostscript with command line?如何使用命令行向 ghostscript 添加水印?
【发布时间】:2016-08-01 07:31:32
【问题描述】:

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

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

我只需要设置水印、不透明度、位置 x、y 和宽度\高度的路径

【问题讨论】:

    标签: pdf ghostscript watermark


    【解决方案1】:

    如果您负担得起仅使用文本而不是图像来添加水印,那么您可以使用“setlinewidth stroke”来模拟水印。

    只需创建一个如下所示的 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 项目中提供了此功能和其他功能,例如密码保护、搜索、拆分和合并。

    【讨论】:

    • 有趣的解决方案。不幸的是,语法有点过时,并且该特定字体不适用于我的系统。你认为你可以在你的答案中添加一个额外的内容来展示如何使用诸如 Hack 字体之类的字体吗?
    【解决方案2】:

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

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

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

    【讨论】:

    • 好的,你能说一下如何将带有位置的图像放到后记中作为水印吗?或包含水印的pdf
    • 您需要 'image' 运算符,这在第 3 版 PostScript 语言参考手册的第 4.10 节(第 288 页)中有描述。 607 页还描述了操作员。图像的位置由当前点给出,由提供给图像操作符的 Matrix 的 Tx 和 Ty 成员修改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    相关资源
    最近更新 更多