使用 PDFtk 和文本编辑器轻松去除 PDF 文件中的文字和图片水印
本文的方法仅供学习交流使用,本人不支持对正版 PDF 进行去除水印以牟利等非法行为.本人只是想看一些文档的时候不要被巨大的水印阻挡了视线,影响阅读体验.
具体方法
-
安装 PDFtk,这是个命令行工具.Windows用户请按照官网提示安装.Linux 用户一般使用包管理工具从软件源安装即可,例如
pacman -S pdftk
或apt install pdftk
. -
解压要处理的 PDF 文件,PDF 文件默认都是有压缩的,我们需要解压方便我们后续的操作.解压命令
pdftk INPUT.pdf output OUTPUT.pdf uncompress
,根据需要替换成你的 PDF 文件名. -
使用文本编辑器编辑
OUTPUT.pdf
,不断尝试删除一些元素,并检查 PDF 文件中的水印是否已经出去.建议每次只删除一个元素.这就是个不断尝试的过程.- 针对文字水印,一般是放在一个
/BBox
里,找到对应的/BBox
之后删除即可.文字水印一般是一个字对应一个/BBox
.此外,还需注意文档中的每一页都有的文字水印,可能还是每一页都有相同的/BBox
.因此,在确认删除特定的/BBox
之后,我们可以考虑用正则表达式删除全部的/BBox
.例如,我们找到了/BBox [110.6, 517.8, 199.366, 594.48]
这个是个水印,我们使用正则表达式删除它:sed -i "/394.44 230.64 460.8 295.92/d" OUTPUT.pdf
.注意,这里我们假设文字水印在每一页出现的位置都是固定的.如果不是,那就得一页一页的尝试删除了. - 针对图像水印,我们可以尝试删除 pdf 文件中的 obj 对象.在文件中找到类似
5 0 obj
这样的行,其中 5 是 obj 的编号,0 的意义我不太不清楚,但是没有看到其他的取值,删掉该行,看看水印是否还在.不断地尝试,直到水印被删除.
- 针对文字水印,一般是放在一个
小结
简单来说,本文介绍的去除 PDF 水印的方法就是将 PDF 文件解压后,使用文本编辑器,尝试删除特定的对象,看看是否能够成功去除水印.
需要说明的是,此方法仅仅使得 PDF 文件不显示水印,但是水印的信息还是保存在文件中的.如果需要删除,也许应该删除掉从 5 0 obj
到 endobj
的行,这样才是完整的删除了一个对象.而对于文字水印,则应该删除包含该 /BBox
的对象.但是似乎这样会破坏 PDF 文件,导致如果后面使用 PyPDF2 去解析的时候会有些问题.不过这是后话,不是本文的重点,就先忽略了吧.