
影刀RPA 批量提取PDF中的表格数据告别手工复制粘贴作者林焱前面讲过PDF的文字提取但很多PDF的核心数据在表格里——财务报表、实验数据、检测报告。文字提取能把表格读成零散的文本行但用专门的表格提取库能把结构完整保留。推荐工具工具优点缺点camelot专门针对表格准确率高只支持文本型PDFtabula-pyJava后端表格识别强需要Java环境| pdfplumber | 轻量同时支持文字和表格 | 复杂表格可能漏 |推荐pdfplumber无需Java、安装简单、文字和表格都能处理。拼多多店群自动化上架方案pdfplumber提取表格# pip install pdfplumberimportpdfplumberdefextract_tables_from_pdf(pdf_path):提取PDF中所有表格all_tables[]withpdfplumber.open(pdf_path)aspdf:forpage_num,pageinenumerate(pdf.pages):tablespage.extract_tables()fortable_idx,tableinenumerate(tables):iftable:# 有表格# 清理数据去除换行符和空白clean_table[]forrowintable:clean_row[str(cell).replace(\n, ).strip()ifcellelseforcellinrow]clean_table.append(clean_row)all_tables.append({page:page_num1,table_index:table_idx1,rows:len(clean_table),data:clean_table})returnall_tables写入Excelimportopenpyxldefsave_tables_to_excel(tables,output_path):将提取的表格写入Excel每个表格一个Sheetwbopenpyxl.Workbook()wb.remove(wb.active)# 删除默认Sheetfortintables:sheet_namef第{t[page]}页_表格{t[table_index]}wswb.create_sheet(sheet_name)forrowint[data]:ws.append(row)wb.save(output_path)print(f已保存{tables.__len__()}个表格到{output_path})指定区域提取表格如果PDF页面很复杂表格图表文字混排全局提取可能不准。指定区域提取importpdfplumberwithpdfplumber.open(report.pdf)aspdf:pagepdf.pages[0]# 指定一个矩形区域 (x0, top, x1, bottom)# 坐标需要手动测量用pdfplumber的可视化工具crop_areapage.within_bbox((50,100,550,400))tablescrop_area.extract_tables()踩坑实录坑1扫描版PDF无法提取表格pdfplumber只能处理文本型PDF文字可选择。扫描版PDF是图片需要先用OCR识别先用pdf2image转图片再用pytesseract识别然后在影刀中手动重组表格结构。准确率不高建议尽可能找原始电子版PDF。坑2合并单元格导致数据错位TEMU店群如何管理运营PDF表格中经常有合并单元格。pdfplumber会把合并单元格当成多个空单元格导致行列对齐错乱。手动处理很费劲。对于合并单元格多的表格camelot的识别效果更好。坑3垂直文字识别问题有些中文表格的表头是垂直书写的。pdfplumber对垂直文字的支持不好可能识别成乱码或空值。坑4表格跨页一个表格从第3页延伸到第4页。pdfplumber会把两页识别成两个独立表格需要你手动判断是否属于同一个表格通常是表头相同的连续表格。写在最后PDF表格提取是财务和数据分析岗位的刚需。用影刀检测新PDF文件 → Python提取表格 → 写入Excel → 推送通知就是一套完整的PDF自动化处理流水线。