PDF 跨页表格自动检测与拼接工具 — 自动识别扫描件 PDF 中被分页截断的表格,裁剪并无缝拼接为完整图片。
- 🔍 智能表格检测 — 基于 OpenCV 形态学操作,通过横线/竖线交叉点精准定位表格区域
- 📐 跨页截断识别 — 自动判定相邻页面顶部/底部的表格碎片是否属于同一张被截断的表格
- 🧩 智能拼接 — 自适应宽度对齐(等比缩放),垂直方向无缝拼合
- 📦 批量处理 — 支持多 PDF 文件并行处理(多进程加速)
- ⚙️ 参数可调 — 所有关键阈值均通过全局变量暴露,附详细中文注释,方便微调
- 扫描合同、协议中的跨页表格(如小红书商务合作协议等)
- 纯图片型 PDF,无法使用 camelot/pdfplumber 等文字提取库的场景
- 任何需要从扫描文档中提取完整表格图像的需求
pip install -r requirements.txt- 将待处理的 PDF 文件放入
./input目录 - 运行脚本:
python pdf_table_stitcher.py- 拼接好的表格图片将输出到
./output目录
{原PDF文件名}_合并表格_Page{N}-{N+1}.jpg
例如:合同_合并表格_Page1-2.jpg
在 pdf_table_stitcher.py 顶部的全局变量区域,可以根据实际文档调整以下参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
DPI |
300 | PDF 栅格化分辨率 |
HORIZONTAL_KERNEL_WIDTH_RATIO |
1/30 | 横线检测 kernel 宽度占图像宽度比例 |
VERTICAL_KERNEL_HEIGHT_RATIO |
1/30 | 竖线检测 kernel 高度占图像高度比例 |
DILATE_ITERATIONS |
3 | 膨胀迭代次数,连接断裂线段 |
MIN_TABLE_AREA_RATIO |
0.005 | 最小表格面积占比(过滤噪声) |
EDGE_MARGIN_RATIO |
0.12 | 跨页判定边距(页面高度的 12%) |
WIDTH_SIMILARITY_THRESHOLD |
0.35 | 跨页表格宽度相似度阈值 |
OUTPUT_JPEG_QUALITY |
95 | 输出 JPEG 质量 |
- PyMuPDF (fitz) — PDF 栅格化
- OpenCV — 形态学操作 & 表格检测
- NumPy — 图像数组操作
- Pillow — 图像保存
pdf_table_stitcher/
├── pdf_table_stitcher.py # 主脚本
├── requirements.txt # Python 依赖
├── input/ # 放入待处理的 PDF
├── output/ # 输出拼接后的表格图片
├── LICENSE # MIT License
└── README.md