You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现PDF转CSV时列内容错位问题的修复指导请求

修复PDF转CSV的列错位问题

列错位的核心原因是tabula依赖的列分隔坐标(columns参数)与当前PDF实际内容的列位置不匹配,另外你手动删除第5列的操作也可能打乱列对应关系。以下是具体修复步骤:

  • 重新校准列分隔坐标
    tabula的columns参数是按PDF页面的横坐标(从左到右)定义列分割线的位置,之前的坐标可能因为PDF内容排版变化失效了:

    1. 可以运行tabula.gui()打开可视化工具,加载目标PDF后手动拖曳列分割线,复制生成的坐标替换到代码中。
    2. 若不用GUI,可通过PDF阅读器(如Adobe Acrobat)查看元素横坐标,对应调整columns列表内的数值。
  • 验证列删除操作的合理性
    代码中df1[0]=df1[0].drop(columns=5)是固定删除第5列(索引从0开始),但如果PDF列结构已变化,这个操作可能误删正确列:

    1. 先注释掉该行代码,运行后查看原始DataFrame的列数和内容,确认是否真的存在多余列。
    2. 若确实需要删除,要根据当前列的实际内容确定删除索引,而非固定使用5。
  • 修复后的示例代码

#!/usr/bin/env python3
import tabula
import pandas as pd

pdf_file='/pdf2xls/Input.pdf'
column_names=['Product','Batch No','Machin No','Time','Date','Drum/Bag No','Tare Wt.kg','Gross Wt.kg',
              'Net Wt.kg','Blender','Remarks','Operator']

# 替换为重新校准后的列分隔坐标(需根据实际PDF调整)
df1 = tabula.read_pdf(pdf_file, pages=1, area=(95,20, 800, 840),
                      columns=[90, 175, 215, 250, 305, 312, 330, 365, 408, 448, 478, 518],
                      pandas_options={'header': None})

# 先打印查看原始列内容,确认是否需要删除列
# print(df1[0].head())

# 确认需要删除的列索引后再执行,示例为保留原删除逻辑,可根据实际情况调整
# df1[0] = df1[0].drop(columns=5)

df1[0].columns = column_names
result = pd.DataFrame(df1[0])
# 加上index=False避免生成多余的索引列
result.to_csv("/pdf2xls/Input.csv", index=False)
  • 额外检查点
    1. 确认目标PDF是否有版本更新或排版修改,这是坐标失效的常见诱因。
    2. 导出CSV时添加index=False,避免将DataFrame的索引列写入文件,减少不必要的干扰。

内容的提问来源于stack exchange,提问作者linux01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:53:31