一般来说 PDF 密码存在的意义不大,使用 John the RipperHashcat 配合 GPU 可以轻松破解。但一些 under NDA 的 PDF 文档仍然会同时采用水印和密码保护,两者都给阅读体验带来不便,尤其是后者。

在已知 PDF 密码的前提下,可以简单地使用 pikepdf 库导出为一个干净的 PDF 文件。

import pikepdf
import sys
 
 
def e(filename, password=None):
    pdf = pikepdf.open(filename, password=password)
    pdf.save(filename.replace(".pdf", "_decrypted.pdf"))
 
 
if __name__ == "__main__":
    if len(sys.argv) != 3:
        print(f"Usage: {sys.argv[0]} <filename> <password>")
        sys.exit(1)
    filename = sys.argv[1]
    e(filename=filename, password=sys.argv[2])