作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我工作的公司要求在 .pptx 文档中列出所有无法访问的图像/形状(没有替代文本,也没有装饰性)。为了自动化这个过程,我正在编写一个脚本来提取指定 .pptx 中所有无法访问的图像/形状并编译一个列表。到目前为止,我已经设法让它打印出没有替代文本的图像的名称、幻灯片 # 和图像块。
不幸的是,在广泛搜索文档后,我发现 python-pptx 包不支持检查图像/形状是否具有装饰性的功能。
我过去没有将 XML 元素映射到对象,并且想知道如何制作一个读取 val
的函数。 adec:decorative
内的属性此 .pptx 文件中的元素(请参阅第 4 行)。
<p:cNvPr id="3" name="Picture 2">
<a:extLst>
<a:ext uri="{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}"><a16:creationId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" id="{77922398-FA3E-426B-895D-97239096AD1F}" /></a:ext>
<a:ext uri="{C183D7F6-B498-43B3-948B-1728B52AA6E4}"><adec:decorative xmlns:adec="http://schemas.microsoft.com/office/drawing/2017/decorative" val="0" /></a:ext>
</a:extLst>
</p:cNvPr>
由于我最近才开始使用这个包,我不确定如何在 python-pptx 中创建自定义元素类。如果有人有任何其他解决方法或建议,请告诉我,谢谢!
最佳答案
创建自定义元素类肯定会起作用,但我认为它是一种极端方法(想想用于杀死蚊子的火箭筒):)。
我倾向于认为你可以用 XPath
完成你想要的事情。查询您可以使用 python-pptx
到达的最近祖先.
像这样的事情会朝着正确的方向发展:
cNvPr = shape._element._nvXxPr.cNvPr
adec_decoratives = cNvPr.xpath(".//adec:decorative")
if adec_decoratives:
print("got one, probably need to look more closely at them")
挑战之一可能是获得
adec
注册了命名空间前缀,因为我认为它不是默认的。因此,您可能需要在 XPath 表达式之前执行此代码,也可能是在加载第一个文档之前:
from pptx.oxml.ns import _nsmap
_nsmap["adec"] = "http://schemas.microsoft.com/office/drawing/2017/decorative"]
另外,如果您稍微研究一下 XPath,我认为您实际上可以在
<adec:decorative>
上进行查询。具有
val=0
的元素或任何特定的属性状态满足您的需求。
关于python - 使用python-pptx检查powerpoint中的图像是否具有装饰性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63802783/
我是一名优秀的程序员,十分优秀!