一个功能完整的 PDF 处理工具,支持文本/表格/元数据提取、图片提取、PDF 合并、注释添加以及去水印等功能,并在文本不足时提供 OCR 兜底。
- 使用 pdfplumber 进行精确文本定位
- 保留段落结构和标题层级
- 支持章节检测与章节统计
- 可在生成的 Markdown 报告中嵌入页面截图/图片引用
- 文本密度不足时可启用 OCR 兜底(基于 Tesseract)
- 多种输出格式(Markdown、纯文本、JSON)
- 基于 pdfplumber 等工具的表格提取
- 智能表格检测和识别
- 支持有边界和无边界表格
- 表格类型自动分类(财务、时间表、对比表等)
- 支持导出为 CSV、Excel、JSON
- 完整的 PDF 元数据信息
- 安全信息和权限检测
- 文档结构分析
- 文件系统信息
- 多个 PDF 文件合并
- 自动添加书签
- 可选目录页生成
- 页码添加
- 高亮、下划线、删除线
- 文本批注和图章
- 链接添加
- 多种预设样式
- 提取 PDF 中嵌入图片到
output/<文件名>/images - 生成清单文件
output/<文件名>/<文件名>_images.json - 支持按宽高过滤小图(噪点/背景)
- 支持按字节 SHA256 去重,跨页相同图片只保留一次
- 基于 PyMuPDF 的 redaction/编辑能力
- 通过
resources/watermark_patterns.json配置文本匹配规则 - 支持启发式检测:大字号、短语重复率等
- 可选清理 Stamp、FreeText 等水印性质注释
- 支持 dry-run 模式,仅输出统计而不写新 PDF
- Python 3.7+
- Windows/Linux/macOS
pip install -r requirements.txt# 提取文本并保存为Markdown格式
python scripts/extract_text.py demo.pdf -o output/text.md
# 提取为JSON格式
python scripts/extract_text.py demo.pdf -f json -o output/text.json# 提取所有表格为CSV格式
python scripts/extract_tables.py demo.pdf -o output/tables -f csv
# 提取特定页面范围的表格
python scripts/extract_tables.py demo.pdf -o output/tables -p "1-3" -f excel# 提取完整元数据
python scripts/extract_metadata.py demo.pdf -o output/metadata.json# 合并多个PDF文件
python scripts/merge_pdfs.py file1.pdf file2.pdf file3.pdf -o merged.pdf
# 合并并添加目录页
python scripts/merge_pdfs.py file1.pdf file2.pdf -o merged.pdf --add-toc# 使用配置文件添加注释
python scripts/annotate_pdf.py demo.pdf -c templates/annotation_template.json -o annotated.pdf
# 搜索文本并添加高亮
python scripts/annotate_pdf.py demo.pdf --search-text "重要内容" --annotation-type highlight -o annotated.pdf# 使用脚本按配置去除水印,输出到新的 PDF
python scripts/remove_watermark.py pdfs/test.pdf -o output/test/test_remove_watermark.pdf -c resources/watermark_patterns.json --mode both
# 只分析命中情况,不实际写出文件
python scripts/remove_watermark.py pdfs/test.pdf -c resources/watermark_patterns.json --dry-run# 提取嵌入图片到 output/<文件名>/images 并生成清单 JSON
python scripts/extract_images.py pdfs/test.pdf -o output -c resources/image_extraction_config.json
# 只提取指定页
python scripts/extract_images.py pdfs/test.pdf -o output -p "1-3,10"说明:
-o为输出根目录;实际图片会在output/<文件名>/images下。-p为页码范围,支持区间和离散组合。-c为图片提取配置文件路径。
# 提取文本、图片、表格、元数据并生成报告
python main.py demo.pdf --all --generate-report
# 只提取文本和表格
python main.py demo.pdf --extract-text --extract-tables# 指定文本输出格式为JSON
python main.py demo.pdf --extract-text --text-format json
# 指定表格输出格式为Excel
python main.py demo.pdf --extract-tables --table-format excel# 只处理前3页
python main.py demo.pdf --extract-text --pages "1-3"
# 处理第1、3、5页
python main.py demo.pdf --extract-tables --pages "1,3,5"# 对整个文档去水印,生成新的 PDF
python main.py pdfs/test.pdf --remove-watermark --watermark-config resources/watermark_patterns.json --watermark-mode both -o output/test/test_remove_watermark.pdf
# 仅对指定页尝试去水印
python main.py pdfs/test.pdf --remove-watermark --pages "1-3,5" --watermark-config resources/watermark_patterns.json# 提取图片并生成综合报告,报告中可引用图片
python main.py demo.pdf --extract-text --extract-images --generate-report# 当文档以扫描图像为主时启用 OCR
python main.py demo.pdf --extract-text --enable-ocr --ocr-lang "chi_sim+eng" \
--tesseract-cmd "C:\\Program Files\\Tesseract-OCR\\tesseract.exe"resources/table_detection_config.json - 表格检测的详细参数配置
resources/annotation_styles.json - 各种注释类型的样式定义
templates/annotation_template.json - 注释配置的示例模板
templates/extraction_report.md - 提取报告的模板
resources/image_extraction_config.json - 图片提取的参数
min_width/min_height: 最小尺寸过滤,小于阈值的图片将被忽略dedupe: 是否按 SHA256 去重save_metadata: 清单是否包含图片 xref 等信息
resources/watermark_patterns.json - 水印匹配与启发式规则
text_patterns: 按文本内容匹配的规则,支持contains/icontains/regexheuristics: 启发式参数(最小字体、最小长度、跨页重复阈值)remove_annotations: 是否同时删除水印性质的注释annotation_types: 视为水印的注释类型列表(如Stamp、FreeText)
注意:
- 基于文本/注释的去水印无法 100% 覆盖所有“图片型”或矢量路径水印。
- 对复杂版式文档,建议先使用
--dry-run观察命中情况,再执行正式去水印。
{
"type": "highlight",
"page": 1,
"coordinates": [100, 100, 200, 120],
"content": "重要内容",
"color": "yellow",
"opacity": 0.3
}# 批量提取多个 PDF 的文本
for pdf in *.pdf; do
python main.py "$pdf" --extract-text --generate-report
donefrom main import PDFProcessor
processor = PDFProcessor()
results = processor.process_pdf(
"demo.pdf",
["extract_text", "extract_tables", "extract_metadata"],
{
"text_format": "markdown",
"table_format": "csv"
}
)- Markdown: 带格式的文本,包含章节结构
- 纯文本: 纯文本内容
- JSON: 结构化数据,包含元数据和分页信息
- CSV: 逗号分隔值格式
- Excel: Microsoft Excel格式
- JSON: 结构化表格数据
- JSON: 完整的元数据信息,包括文档属性、安全信息、文件信息等
- 目录结构:
output/<文件名>/images - 清单文件:
output/<文件名>/<文件名>_images.json
错误: PDF文件已加密,需要密码才能处理
解决方案:提供密码或使用解密工具
警告: 检测到扫描版PDF,建议使用OCR处理
解决方案:使用 OCR 工具先进行文字识别,或在本工具中启用 --enable-ocr。
错误: 未检测到表格或表格格式不支持
解决方案:调整检测参数或使用不同的提取方法。
现象:去水印后残留明显水印,或 dry-run 统计中命中页很少。
解决方案:
- 将模式调整为
both,同时启用规则匹配与启发式。 - 在
text_patterns中补充更多水印关键词或正则。
- 使用分页处理避免内存溢出
- 选择合适的输出格式
- 关闭不必要的功能
- 使用多进程处理多个文件
- 合理设置输出目录
- 定期清理临时文件
- 在相应的模块中添加新的提取类
- 实现标准接口
- 更新配置文件
- 在
PDFAnnotator类中添加新的注释方法 - 更新样式配置文件
- 添加相应的模板
- 使用行业标准的PDF处理库
- 优化的算法和内存管理
- 支持大文件和批量处理
- 双重提取方法提高准确性
- 智能内容识别和分类
- 详细的错误处理和验证
- 模块化设计
- 灵活的配置系统
- 易于添加新功能
- 支持多种输入格式
- 丰富的输出选项
- 全面的文档类型支持
-
文档数字化
- 将纸质文档转换为可编辑格式
- 提取结构化数据用于分析
-
学术研究
- 提取论文中的表格和数据
- 批量处理学术文档
-
商业分析
- 从财务报告中提取数据
- 合并和注释商业文档
-
法律文档处理
- 提取合同条款
- 添加审阅注释
-
自动化办公
- 批量PDF处理
- 自动化报告生成
-
性能优化
- 添加多线程支持
- 实现流式处理
- 优化内存使用
-
功能增强
- 添加OCR支持
- 支持更多文件格式
- 增加图像处理功能
-
用户体验
- 开发图形界面
- 添加进度显示
- 改进错误提示
-
集成扩展
- 支持云存储
- 添加API接口
- 集成其他工具
MIT License - 详见LICENSE文件
欢迎提交 Issue 和 Pull Request 来改进这个项目。
如有问题,请在 GitHub 上提交 Issue 或联系维护者,优先通过 Issue 描述问题与复现步骤便于排查。