本项目已针对扫描件PDF的表格提取进行了全面优化,特别适用于处理银行流水、财务报表等包含中文内容的扫描件表格。
- 更高分辨率: DPI提升至400,图片尺寸优化为2400x3200
- 多语言支持: 支持英文、简体中文、繁体中文识别
- 表格优化配置: 针对表格结构的OCR参数调优
- 空格保持: 保持单词间空格,提高表格列分割准确性
- 灵活分隔符: 支持2个或更多空格、制表符、逗号、分号等多种分隔符
- 中文数字模式: 识别"中文+数字"、"数字+小数"等常见表格模式
- 序号检测: 自动识别"序号+中文+数字"的表格行结构
- 智能分割: 当常规分隔符失效时,使用智能算法分割表格列
- 识别包含数字、中文、英文混合的行
- 支持金额格式(如123.45)、百分比、长数字(账号)
- 支持中文数字(一二三四五六七八九十)
- 自动检测连续序号(1、2、3...)开头的表格行
- 适用于编号列表类型的表格
- 基于"合计"、"总计"、"序号"、"户名"、"账号"、"金额"等关键词
- 自动定位表格区域和表头
- 空格规范化: 合并多个空格,移除零宽字符
- 行数据验证: 过滤无效行,确保数据质量
- 列数对齐: 自动调整行数据与表头列数一致
- 长度限制: 防止异常长文本影响表格结构
import { TableExtractService } from './services/tableExtractService';
const service = new TableExtractService();
// 提取扫描件表格
const tables = await service.extractTables({
pdfPath: '/path/to/scanned-document.pdf',
outputPath: '/path/to/output.xlsx'
});
console.log(`成功提取 ${tables.length} 个表格`);
tables.forEach((table, index) => {
console.log(`表格 ${index + 1}:`);
console.log(`页码: ${table.page}`);
console.log(`列数: ${table.headers.length}`);
console.log(`行数: ${table.rows.length}`);
console.log(`表头: ${table.headers.join(', ')}`);
});序号 户名 账号 金额
1 济南市章丘区枣园街道后枣园村经济合作社 20400015942050000010641 54280.67
2 济南市章丘区枣园街道白塔村经济合作社 20400015942050000010557 87850.45
项目 本期金额 上期金额 增减变动
营业收入 1000000.00 800000.00 25%
营业成本 600000.00 500000.00 20%
地区 人口数量 GDP总值 人均GDP
北京 2154万 4万亿 18.5万
上海 2428万 4.3万亿 17.7万
- 多层次识别: 从PDF文本提取 → OCR识别 → 多种表格模式匹配
- 容错性强: 处理扫描件中的文字倾斜、模糊、间距不规整等问题
- 中文优化: 专门针对中文表格的识别和处理
- 自动清理: 智能清理OCR识别中的噪声和格式问题
- Excel导出: 自动生成格式化的Excel文件
- 图片质量: 扫描件分辨率建议300DPI以上
- 表格清晰度: 表格线条清晰,文字无严重模糊
- 语言设置: 确保Tesseract已安装中文语言包
- 内存使用: 高分辨率图片处理需要较多内存
node-tesseract-ocr: OCR文字识别pdf2pic: PDF转图片pdf-parse: PDF文本提取unpdf: 高级PDF处理xlsx: Excel文件生成
确保系统已安装Tesseract OCR引擎和中文语言包:
# macOS
brew install tesseract tesseract-lang
# Ubuntu
sudo apt-get install tesseract-ocr tesseract-ocr-chi-sim tesseract-ocr-chi-tra