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

基于PDFminer按页获取文本字号并提取PDF每页标题的实现问题

代码修改方案

你原来的代码是把全文档所有文本块的数据都存入同一个一维列表,要实现按页拆分,只需要在遍历每页时单独创建当前页的临时存储列表即可,修改后代码如下:

from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer, LTChar
import os
path=r'cov.pdf'

# 总数据是嵌套列表,每个子元素对应单页的所有[字号, 文本]数据
Extract_Data=[]

for page_layout in extract_pages(path):
    # 每一页开始时初始化当前页的空列表
    page_data = []
    for element in page_layout:
        if isinstance(element, LTTextContainer):
            Font_size = 0
            for text_line in element:
                for character in text_line:
                    if isinstance(character, LTChar):
                        # 若要提升准确性可改为取当前文本块的最大字号:Font_size = max(Font_size, character.size)
                        Font_size = character.size
            # 把当前文本块数据加入当前页列表,过滤无有效字符的空块
            if Font_size > 0:
                page_data.append([Font_size, element.get_text()])
    # 当前页处理完成,加入总数据
    Extract_Data.append(page_data)

结果使用说明

  • 要获取指定页的数据直接按索引取值即可,你需要的第8页对应Extract_Data[7](pdfminer遍历页码从0开始计数),结构和你给出的预期输出完全一致。
  • 提取每页标题可以直接对单页列表按字号降序排序,取第一个非空文本的内容即可,示例逻辑如下:
for page_idx, page_data in enumerate(Extract_Data):
    # 按字号从大到小排序
    page_data_sorted = sorted(page_data, key=lambda x: -x[0])
    # 过滤纯空格/换行的空文本
    for item in page_data_sorted:
        title = item[1].strip()
        if title:
            print(f"第{page_idx+1}页标题:{title}")
            break

补充说明

你原代码中是取文本块最后一个字符的字号作为整个文本块的字号,如果存在单个文本块内有多种字号的场景,可以把字号赋值逻辑替换为取当前文本块的最大字号,结果会更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:30:01