当前位置: 首页 > news >正文

解析word格式和字体

from docx.shared import Pt from docx.enum.text import WD_COLOR_INDEX from collections import Counter def r(lis): counter = Counter(lis) return counter.most_common(1)[0][0] def parse_word_font(doc_path): """ 解析Word文档的字体信息,返回每个文本块的字体属性 :param doc_path: Word文档路径(.docx) :return: 列表,每个元素为{text: 文本内容, font: 字体属性字典} """ doc = Document(doc_path) font_info_list = [] fontsizeall=[] # 1. 解析段落文本的字体 for d,para in enumerate(doc.paragraphs): if '一九七五' in para.text: pass if not para.text.strip(): # 跳过空段落 continue # 段落可能包含多个run(不同字体样式的文本块) if para.style.font.size: parafont=para.style.font.size.pt else: parafont=None # word文档解析原理.Word里面顶层是paragraph, 如果paragraph里面写字号大小了.那么里面的子结构runs里面的字体大小就是None! tmp=[] for run in para.runs: if not run.text.strip(): continue # 提取字体核心属性 font_attr = { "name": run.font.name, # 字体名称(如"微软雅黑") "size": run.font.size.pt if run.font.size else parafont, # 字号(磅) "bold": run.font.bold, # 加粗(True/False/None) "italic": run.font.italic, # 斜体(True/False/None) "underline": run.font.underline, # 下划线(None/True/样式) "color": run.font.color.rgb if run.font.color.rgb else None, # 字体颜色(RGB) "highlight": run.font.highlight_color, # 高亮颜色(WD_COLOR_INDEX枚举) "strike": run.font.strike, # 删除线(True/False/None) "subscript": run.font.subscript, # 下标(True/False/None) "superscript": run.font.superscript, # 上标(True/False/None) } fontsizeall.append(font_attr['size']) tmp.append({ "text": run.text, "font": font_attr, "type": "paragraph" # 标记文本类型:段落 }) tmp_fixed={} tmp_fixed['text']=''.join([i['text'] for i in tmp]) tmp_fixed['name']=r([i['font']['name'] for i in tmp]) tmp_fixed['size']=r([i['font']['size'] for i in tmp]) tmp_fixed['bold']=r([i['font']['bold'] for i in tmp]) tmp_fixed['italic']=r([i['font']['italic'] for i in tmp]) tmp_fixed['underline']=r([i['font']['underline'] for i in tmp]) tmp_fixed['strike']=r([i['font']['strike'] for i in tmp]) tmp_fixed['subscript']=r([i['font']['subscript'] for i in tmp]) tmp_fixed['superscript']=r([i['font']['superscript'] for i in tmp]) tmp_fixed['color']=r([i['font']['color'] for i in tmp]) tmp_fixed['type']=r([i['type'] for i in tmp]) font_info_list.append(tmp_fixed) # 2. 解析表格中的文本字体 for table in doc.tables: for row in table.rows: for cell in row.cells: for para in cell.paragraphs: for run in para.runs: if not run.text.strip(): continue font_attr = { "name": run.font.name, "size": run.font.size.pt if run.font.size else None, "bold": run.font.bold, "italic": run.font.italic, "underline": run.font.underline, "color": run.font.color.rgb if run.font.color.rgb else None, "highlight": run.font.highlight_color, } fontsizeall.append(font_attr['size']) font_info_list.append({ "text": run.text, **font_attr, "type": "table_cell" # 标记文本类型:表格单元格 }) fontsizeall=[i for i in fontsizeall if i is not None] originsize=r(fontsizeall) for d,i in enumerate(font_info_list): font_info_list[d]['size']=originsize if font_info_list[d]['size'] is None else font_info_list[d]['size'] return font_info_list # 调用示例 if __name__ == "__main__": doc_path = "new2\叶圣陶集 第25卷 书信 2 第2版_11994042.docx" # 替换为你的Word文档路径 font_info = parse_word_font(doc_path) # 打印解析结果 for idx, item in enumerate(font_info[:10]): print(f"=== 文本块 {idx+1} ===") print(f"文本内容: {item['text']}") print(f"文本类型: {item['type']}") print("字体属性:") for k, v in item['font'].items(): # 格式化颜色/高亮显示 if k == "color" and v: v = f"RGB({v[0]}, {v[1]}, {v[2]})" elif k == "highlight" and v: v = f"{v.name} ({v.value})" print(f" {k}: {v}") print("-" * 50)
http://www.cnnetsun.cn/news/79407.html

相关文章:

  • Blender版本管理技巧:从新手到高手的全流程指南
  • F5-TTS移动端部署终极指南:5大技巧实现70%内存优化与性能飞跃
  • DataX Web UI:企业数据同步的终极可视化解决方案
  • 系统可观测性实战指南:从混乱日志到智能洞察的架构进化
  • 分布式训练终极指南:同步与异步策略深度解析
  • 一根同轴线,真的扛得住 4K 吗? ——从摄像头带宽算起,聊透车载 SerDes 接口选型
  • 掌握质谱分析:OpenMS完整使用指南与实战技巧
  • CloudStream智能文件管理:告别杂乱无章的媒体库
  • CopyQ剪贴板管理终极指南:3个核心技巧打造高效工作流
  • Linly-Talker数字人系统对网络带宽的要求分析
  • ExoPlayer状态恢复:如何让视频播放器记住你的“续播点“?
  • MSBuild BuildCheck框架:构建质量革命与团队效率提升终极指南
  • Wechaty智能消息处理全攻略:告别单一回复,实现多场景精准响应
  • Langchain-Chatchat在企业知识管理中的5大应用场景
  • Arkime性能监控完整教程:构建企业级流量分析平台
  • 秒开体验:SmartTube视频缩略图加载与缓存优化实战
  • 20、GNU Make标准库函数详解
  • 21、GNU Make 标准库实用功能与使用技巧详解
  • HyperLPR3实战指南:快速搭建高精度车牌识别系统
  • 当AI患上“健忘症“:MemGPT如何用AWS Bedrock Claude打造过目不忘的智能助手
  • SmartTube视频缩略图优化:3大策略让加载速度提升5倍
  • Excalidraw GitHub Actions工作流配置示例
  • COCO 2017 数据集完整下载指南:百度网盘高速通道
  • 6、文件操作全攻略
  • 9、Mac OS X 文件系统管理全解析
  • 16、Linux 命令行实用操作指南
  • Excalidraw金融建模辅助:业务逻辑图快速呈现
  • 3步构建gperftools性能监控系统实战指南
  • 5个AdGuardHome性能翻倍的隐藏技巧:从基础配置到深度优化
  • CloudStream下载目录管理:从混乱到有序的进阶指南