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

Python实现PDF转Excel:如何解决长文本跨行拆分问题?

解决PDF转Excel时长文本换行拆分的问题

优化Tabula参数,直接修复识别问题

你用的Tabula本身就有参数能解决这类换行拆分的问题,调整代码即可:

  • 启用流式识别模式:如果你的PDF表格是无严格边框的流式布局,设置stream=True+guess=False,让Tabula按文本行的连续性识别,避免把同一单元格的换行内容拆成多行:
import tabula

file = r"mydirectory.pdf"
# 流式模式读取,关闭自动猜测增强准确性
pdfData = tabula.read_pdf(file, pages="all", stream=True, guess=False)
# 转换时同步用相同参数
tabula.convert_into(file, r"mydirectory.csv", pages="all", stream=True, guess=False)
  • 调整线条识别容错度:如果表格边框模糊,用line_vertical_tol和line_horizontal_tol放宽线条识别的阈值,让Tabula更准确判断单元格边界:
pdfData = tabula.read_pdf(file, pages="all", line_vertical_tol=5, line_horizontal_tol=5)
  • 手动指定列分隔线:如果只有特定区域出问题,先用Tabula的GUI工具确定列分隔的x坐标,强制按设定列拆分,避免长文本误换行:
# 示例:列分隔线在x=100、200、300的位置
pdfData = tabula.read_pdf(file, pages="all", columns=[100, 200, 300])

数据清洗补漏(参数调整后仍有问题时)

要是还有个别单元格被拆分,用Pandas对读取后的DataFrame做针对性合并:

import pandas as pd

def merge_wrapped_cells(df):
    # 假设第一列是易换行的变量名列,根据你的实际列调整
    merged_rows = []
    current_row = None
    for _, row in df.iterrows():
        # 判断是否是上一行的换行内容(比如后续列为空)
        if pd.isna(row.iloc[1]) and current_row is not None:
            current_row.iloc[0] += " " + str(row.iloc[0])
        else:
            if current_row is not None:
                merged_rows.append(current_row)
            current_row = row.copy()
    if current_row is not None:
        merged_rows.append(current_row)
    return pd.DataFrame(merged_rows, columns=df.columns)

# 应用清洗并保存
cleaned_df = merge_wrapped_cells(pdfData[0])
cleaned_df.to_excel(r"mydirectory_cleaned.xlsx", index=False)

备选工具(Tabula不适用时)

如果上述方法都不好用,试试这些工具:

  • Camelot:对复杂表格的识别逻辑更灵活,支持更多自定义规则处理换行文本
  • PyMuPDF(fitz):直接读取PDF原始文本,手动解析表格结构,完全自定义文本合并逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:35:24