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

PDF/Word文本表格提取转HTML的格式一致性及跨页表格处理咨询

解决方案

一、统一PDF与Word提取数据的格式

  • 定义统一中间数据结构:不管从Word(用python-docx)还是PDF(pdfplumber)提取内容,先转换成标准化的结构。比如文本块用{"content": "...", "style": {"font_size": 14, "bold": False, "alignment": "left"}, "type": "paragraph"};表格用{"rows": [...], "merged_cells": [...], "style": {"border_width": 1}},后续直接基于这个结构生成HTML。
  • 做样式映射规则:把Word的内置样式(Heading 1/2、List Paragraph)和PDF的文本属性(字号、粗细、缩进)做一一对应。比如Word的Heading 1对应PDF中字号≥16且加粗的文本,统一输出为<h1>标签;Word的项目符号列表和PDF中以•/○开头的文本,统一转换成<ul><li>结构。
  • 处理特殊格式兼容:对于Word的换行、分页符,PDF的空白行,统一转换成HTML的段落分隔;对于两者的合并单元格,都在中间结构中记录单元格的跨行/跨列数,生成HTML时用rowspan/colspan属性。

二、解决pdfplumber跨页表格错误与HTML排版问题

1. 修复跨页表格提取错误

  • 优化表格识别参数:在extract_tables中调整table_settings,优先用线条识别策略,同时保留空白字符避免内容丢失:
    table_settings = {
        "vertical_strategy": "lines",
        "horizontal_strategy": "lines",
        "keep_blank_chars": True,
        "text_tolerance": 3,
        "edge_tolerance": 3
    }
    
  • 手动合并跨页表格:遍历每页表格时,对比当前页表格的表头(或第一行结构)与上一页最后一个表格的表头是否一致,若匹配则将当前页表格的内容(跳过重复表头)追加到上一页表格中:
    def merge_cross_page_tables(pdf_path):
        merged_tables = []
        last_table = None
        with pdfplumber.open(pdf_path) as pdf:
            for page in pdf.pages:
                tables = page.extract_tables(table_settings=table_settings)
                for table in tables:
                    if last_table and len(table[0]) == len(last_table[0]) and table[0] == last_table[0]:
                        # 表头一致,判定为跨页表格,追加内容
                        last_table.extend(table[1:])
                    else:
                        merged_tables.append(table)
                        last_table = table
        return merged_tables
    

2. 修正HTML排版间距不符问题

  • 保留PDF的行间距信息:用page.extract_words()获取每个文本块的位置属性(top、bottom),计算相邻行的垂直距离,转换成CSS的line-height或margin-bottom:
    words = page.extract_words(keep_blank_chars=True, use_text_flow=True)
    prev_bottom = None
    for word in words:
        if prev_bottom:
            line_gap = word["top"] - prev_bottom
            # 根据gap设置对应的CSS样式
            if line_gap > 10:
                style = "margin-bottom: 8px;"
            else:
                style = "line-height: 1.2;"
        prev_bottom = word["bottom"]
    
  • 表格排版还原:生成HTML表格时,根据PDF表格的单元格内边距设置padding,用border-collapse: collapse统一边框样式;对于跨页表格的分页处,避免生成多余的边框,可在合并后的表格中调整CSS。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:51:06