如何使用Python代码获取PDF文件中每个段落的字体大小?
提取PDF段落字体大小的实现方案
你之前使用的page.getText()默认仅返回纯文本内容,不会携带字体大小等样式属性。你用的fitz(PyMuPDF)库本身就支持提取结构化的带样式文本数据,只需调整提取参数即可实现需求:
基于fitz的实现代码
import fitz filepath = '/home/user/Downloads/abc.pdf' with fitz.open(filepath) as doc: # 用于存储全文档的<字体大小, 段落内容>对应关系,可按需修改存储结构 para_with_font = [] for page in doc: # 传入"dict"参数获取包含样式信息的结构化文本 page_dict = page.get_text("dict") for block in page_dict["blocks"]: # 过滤非文本类块(如图片、矢量图等) if block["type"] != 0: continue for line in block["lines"]: for span in line["spans"]: # span为最小的同样式文本单元,同一span内字体大小完全一致 current_size = span["size"] current_text = span["text"].strip() if not current_text: continue # 合并相同字体大小的连续文本为段落,可根据需求调整合并规则 if para_with_font and para_with_font[-1][0] == current_size: para_with_font[-1][1] += " " + current_text else: para_with_font.append([current_size, current_text]) # 输出结果 for font_size, text in para_with_font: print(f"字体大小:{font_size:.1f},段落内容:{text}")
补充说明
- 上述代码的合并逻辑仅做参考,你可以结合PDF的行间距、段落缩进等属性(也可从返回的结构化数据中获取)优化段落合并的准确率。
- 该方案对常规可编辑PDF的识别准确率较高,扫描件类的图片PDF需要先做OCR才能提取文本和对应样式。
内容的提问来源于stack exchange,提问作者V J
相关产品推荐
相关产品推荐

