使用文件名为文件夹中的所有 PDF 添加水印

使用文件名为文件夹中的所有 PDF 添加水印

我文件夹中有一堆 pdf 文件。我想给所有文件都加水印。水印应该是文件本身的名称。怎么做?

我正在使用 ubuntu 18.04LTS

答案1

  • 创建一个脚本gedit /home/user/folderwithpdfs/pdfstamp.sh,它将生成 watermark.pdf 文件,其中包含缩短的文件名的文本作为水印:

    #!/bin/bash
    text=${1?missing text to show}
    # Restricts string to 15 symbols from start, without extension and folder's path
    mtext=$(echo ${text:0:15} | sed 's/.pdf//' | sed -e 's,.*/,,') 
    angle=45 # in degrees counterclockwise from horizontal
    grey=0.75 # 0 is black 1 is white
    
    ps2pdf - - <<!
    %!PS
    /cm { 28.4 mul } bind def
    /draft-Bigfont /Helvetica-Bold findfont 72 scalefont def
    /draft-copy {
            gsave initgraphics $grey setgray
            5 cm 10 cm moveto
            $angle rotate
            draft-Bigfont setfont
            ($mtext) show grestore
     } def
    draft-copy showpage
    !
    
  • 将其放入包含 pdf 文件的文件夹中

  • 在包含 pdf 文件的文件夹中运行下一个命令,该命令每次都会创建 watermark.pdf 文件,将其应用于当前文件并将其输出到新文件:

    for f in ./*.pdf 
      do ./pdfstamp.sh "$f" > watermark.pdf
      pdftk "$f" stamp watermark.pdf output "$f.pdf"
    done
    

    该命令将创建带有文件名水印但没有扩展名且长度为 15 个符号的 filename.pdf.pdf 文件。

    脚本主要由@meuh 创建。

    结果:

    在此处输入图片描述

该命令的下一个变体将水印放置在背景中,因此它看起来像透明的:

for f in ./*.pdf; do ./pdfstamp.sh "$f" > watermark.pdf && pdftk "$f" background watermark.pdf output "$f.pdf"; done

在此处输入图片描述

但这种方法有一个缺点:这个水印可能会被图像覆盖。

相关内容