一、先搞清楚:PDF 加密有两种

很多人以为”加密的 PDF”都一样,其实分两种,处理难度天差地别:

类型英文名作用能否去除
打开密码User Password不输密码根本打不开❌ 难,没密码就得暴力穷举
权限密码Owner Password能打开,但禁止复制/打印/编辑✅ 容易,几行代码搞定

日常遇到的”能看但不能复制文字”的 PDF,几乎都是第二种

二、为什么”禁止复制”那么容易去掉

这是 PDF 加密设计上的一个根本弱点:

  1. PDF 内容是用一个”加密密钥”加密的,而这个密钥本身就存在文件里
  2. 如果设了打开密码,密钥会被密码锁住——没密码算不出密钥,所以打不开(这种才是真加密)。
  3. 但”禁止复制”的文件没设打开密码,等于用空密码——任何软件都能直接算出密钥,正常显示内容。
  4. 那个”禁止复制”的标志,只是一个写在文件里的”请求”:「请阅读器不要让用户复制」。

关键:这个限制纯靠阅读器自觉遵守,文件本身并没有真正锁住文字。 Adobe、预览这些软件”讲规矩”,看到标志就把复制按钮灰掉而已。

三、pikepdf 怎么去除(就两步)

1
2
3
4
5
import pikepdf

pdf = pikepdf.open("文件.pdf") # ① 用空密码打开(默认即空密码,无需你提供密码)
pdf.save("新文件.pdf") # ② 不带加密地重新保存 → 限制标志消失
pdf.close()
  • 第①步:文件没有打开密码,所以空密码就能开,拿到完全解密的内容。
  • 第②步:重新存成一个完全不加密的新 PDF——既然不加密,”禁止复制”的标志自然不存在了。

本质不是”破解”,而是”解密后重新存一份干净的”。内容一个字没改,只是扔掉了那个没有约束力的”请勿复制”牌子。

四、批量处理(整个文件夹)

1
2
3
4
5
6
7
8
9
10
import os, pikepdf

src, dst = "原文件夹", "输出文件夹"
os.makedirs(dst, exist_ok=True)

for f in os.listdir(src):
if f.lower().endswith(".pdf"):
pdf = pikepdf.open(os.path.join(src, f))
pdf.save(os.path.join(dst, f))
pdf.close()

安装:pip install pikepdf

五、重要提醒

  1. pikepdf 去不了”打开密码”。 如果一个 PDF 不输密码连打开都不行(真·加密),pikepdf 也无能为力,只能靠知道密码或暴力穷举。
  2. pikepdf 不擅长提取文字。 它是改 PDF 结构的工具(去权限、合并、拆分)。要提取文字用 PyMuPDF / pdfplumber / pdftotext。
  3. 版权与合理使用。 去除复制限制应仅用于自己合法拥有的文件(如方便自己查词、做笔记)。破解他人版权材料的保护并传播,属于侵权。

一句话总结

“禁止复制”的 PDF 没有真正的打开密码,只有一个靠阅读器自觉遵守的限制标志。pikepdf 用空密码打开、不加密地重新保存一遍,这个标志就没了——这是”去权限”,不是”破密码”。