news 2026/7/14 8:16:01

解析word格式和字体

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
解析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)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 22:09:22

Cube-Studio模型部署平台:让AI推理服务化繁为简

Cube-Studio模型部署平台:让AI推理服务化繁为简 【免费下载链接】cube-studio cube studio开源云原生一站式机器学习/深度学习AI平台,支持sso登录,多租户/多项目组,数据资产对接,notebook在线开发,拖拉拽任…

作者头像 李华
网站建设 2026/7/14 11:58:34

阿里开源Wan2.1-I2V:14B参数视频生成模型完整部署指南

阿里开源Wan2.1-I2V:14B参数视频生成模型完整部署指南 【免费下载链接】Wan2.1-I2V-14B-480P 项目地址: https://ai.gitcode.com/hf_mirrors/Wan-AI/Wan2.1-I2V-14B-480P 快速上手:从零开始的视频AI生成实战教程 阿里巴巴通义实验室最新开源的W…

作者头像 李华
网站建设 2026/7/14 15:50:57

终极指南:3步上手Quasar远程管理工具,轻松掌控Windows系统

终极指南:3步上手Quasar远程管理工具,轻松掌控Windows系统 【免费下载链接】Quasar Remote Administration Tool for Windows 项目地址: https://gitcode.com/gh_mirrors/qua/Quasar 还在为管理多台Windows电脑而烦恼吗?Quasar远程管理…

作者头像 李华
网站建设 2026/7/14 11:58:21

PostCSS-CSSNext警告系统:3个实战场景深度解析与高效应对策略

PostCSS-CSSNext警告系统:3个实战场景深度解析与高效应对策略 【免费下载链接】postcss-cssnext postcss-cssnext has been deprecated in favor of postcss-preset-env. 项目地址: https://gitcode.com/gh_mirrors/po/postcss-cssnext 当您在CSS开发中遇到黄…

作者头像 李华
网站建设 2026/7/14 15:49:40

spotDL音频格式终极指南:从MP3到FLAC的完整格式解析

spotDL音频格式终极指南:从MP3到FLAC的完整格式解析 【免费下载链接】spotify-downloader Download your Spotify playlists and songs along with album art and metadata (from YouTube if a match is found). 项目地址: https://gitcode.com/GitHub_Trending/s…

作者头像 李华
网站建设 2026/7/14 18:32:19

微服务数据加密破局:SQLCipher实战指南与密钥管理策略

你是否正面临这样的困境:在微服务架构中部署数据加密时,发现不同服务节点间的密钥同步变得异常复杂,跨服务数据传输的加密方案相互冲突,而加密带来的性能损耗却远超预期?别担心,本文将带你用30分钟彻底解决…

作者头像 李华