Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

pdf_specific_author_annotation_remover

一个基于 PyMuPDF 的命令行工具,用于从 PDF 文件中删除指定作者的所有批注(高亮、下划线、注释等),同时保留其他作者的批注与表单控件。

✨ 功能特性

  • 🎯 按作者名精确删除批注(大小写不敏感)
  • 📁 支持单个 PDF 文件或整个文件夹批量处理
  • 🔒 -r/--replace 模式采用「临时文件 + 原子替换」,避免中途失败损坏原文件
  • 🛡️ 自动跳过表单控件(Widget),不影响 PDF 可填写表单
  • 📄 无匹配批注时不改写文件,并给出清晰提示
  • 💬 中文友好的命令行输出与错误提示

📋 环境要求

安装依赖:

pip install PyMuPDF

🚀 使用方法

python script.py [选项] <作者名> <输入路径> [输出路径]

选项

选项 说明 语法
-n, --new (默认) 输出模式:把清洗后的 PDF 输出到目标位置 [input_path] [output_path]
-r, --replace 替换模式:直接在输入位置覆盖原文件 [input_path]
-h, --help 显示帮助信息

参数

参数 说明
author 要删除的批注作者名(存储在批注的 title 字段中)
input_path 输入 PDF 文件文件夹路径
output_path 输出文件或文件夹路径(仅 -n/--new 模式需要)

示例

# 1. 单个文件 → 输出到指定文件(默认模式)
python script.py john ./in.pdf ./out/out.pdf

# 2. 处理整个文件夹 → 输出到目标文件夹(自动创建,文件名加 _cleaned 后缀)
python script.py --new john ./pdfs ./cleaned

# 3. 直接替换原文件(原子替换,安全)
python script.py -r john ./pdfs

💡 提示:批量输入文件夹时,输出文件夹中会生成 <原文件名>_cleaned.pdf;若输入为单个文件且 output_path.pdf 结尾,则视为指定的输出文件名。

💡 提示:文件夹模式仅处理顶层目录中的 PDF 文件,不会递归扫描子目录。

🔍 工作原理

PDF 批注的作者名由 PyMuPDF 存放在 annot.info["title"] 字段中。脚本遍历每一页的批注链表,对作者名匹配(lower() 后比较)的批注调用 page.delete_annot() 删除:

  • 只处理真正的批注对象(fitz.Annot),跳过表单控件(fitz.Widget
  • 遍历时先保存下一个节点的引用,防止删除后丢失链表
  • 保存时使用 garbage=3 清理无用对象并压缩输出

⚠️ 注意delete_annot() 只删除批注标记(高亮、下划线、注释框等),不会删除被标记的正文文字。若需抹除 PDF 中的实际文字内容,请使用支持 redaction(红action/涂抹)功能的工具。另外,garbage=3 会全量重写文件,可能破坏已有的数字签名,且对大型文件较慢。

📁 项目结构

pdf_specific_author_annotation_remover/
├── script.py      # CLI 主脚本
├── README.md
├── LICENSE        # MIT 许可证
└── .gitignore

📄 License

MIT

About

python script tool for batch removing specific author's annotation. useful for removing watermarks.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages