python |
您所在的位置:网站首页 › word文档格式设置的主要内容 › python |
python-docx结合lxml读取word文档段落格式、字体格式等信息
最近还是在研究docx文档,搞了几天终于有点心得了。不得不说,虽然python-docx库没那么强大能直接获取样式继承的字体信息之类的,但是通过使用python-docx,获取段落的xml信息会简单很多,结合lxml进一步获取信息也会方便很多。 首先还是,记一下关于样式继承。 一个样式可以从另一个样式继承属性,有点类似于层叠样式表 (CSS) 的工作方式。base_style使用属性指定继承 。通过将一种风格建立在另一种风格上,可以形成任意深度的继承层次结构。没有基本样式的样式会从文档默认值继承属性。 许多字体属性是三态的,这意味着它们可以采用值 True、False和None。True表示该属性是“on”,False表示它是“off”。从概念上讲,None价值意味着“继承”。 样式继承依然不是那么好理解。 这次写详细一点点叭 document.xml/style.xml当我们把文档后缀的.docx修改成.zip,解压就会看到一些文件。 其中word文件夹下document.xml是存放文本的主要文件,文档的样式信息则在style.xml中。 如果,文档中的某个段落应用了样式,则该段落的字体格式等一些信息需要从style.xml中获取。 那么问题来了,返回为None时或者想要获取到中文字体该怎么办呢?接下来要说说我不是很懂以及我也很苦恼的xml了。 首先让我们打印一下段落的xml看看它是个啥。 print(paragraphs[0]._p.xml) 这里是应用了标题样式的一个标题(黑体 小二号居中)字体信息在中的,可以看到这里面是没有显示详细的字体信息的。注意到前面有,说明这里用到了id为“6”的style。所以打印一下这个段落的样式的xml看看。 print(paragraphs[0].style.element.xml)可以看到在style中是有字体信息的。 获取字体信息方法1转换成lxml后进行信息提取 from lxml import etree from xml.dom.minidom import parseString p_style_xmlstr = paragraphs[0].style.element.xml p_style_xml = etree.fromstring(p_style_xmlstr) # 转换成lxml结点 p_style_dom = parseString(etree.tounicode(p_style_xml)) # 获取段落字体信息 # 字体名称 style_w_rfonts = p_style_dom.getElementsByTagName('w:rFonts') font_name_zh = w_rfonts[0].getAttribute('w:eastAsia') font_name = w_rfonts[0].getAttribute('w:ascii') 获取字体信息方法2使用xpath进行信息提取 link_id = paragraphs[0].style.element.xpath('string(.//w:pStyle/@w:val)') font_name_zh = doc.styles.element.xpath(f'string(.//w:style[@w:styleId={link_id}]//w:rFonts/@w:eastAsia)') font_name = doc.styles.element.xpath(f'string(.//w:style[@w:styleId={link_id}]//w:rFonts/@w:ascii)') |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |