我正在尝试确定docx文档中嵌入图像的扩展名。 此打开的xml文档可能是由其他用户使用Microsoft Word或OpenOffice生成的。 图像已通过功能区嵌入或拖放,它们可以是inlineShape(当时的时间)或Shape。 我需要访问扩展名,因为然后(不在我的管辖范围内)文档被解析并转换为pdf,并且某些图像扩展名与进程(即wmf的emf)不兼容。
这些图像可能没有名称,也没有AlternativeText属性。 linkFormat属性也不可用,因为它们是嵌入式的。 通过查看ActiveDocument.WordOpenXML字符串,可以知道是否有此类图像。但是,我无法将它们链接到文档中的相应形状以识别哪个图像有问题。 由于它们是嵌入式的,因此docx zip中的文件夹媒体包含该图像,并且它们通过document.xml.rels(例如)链接到文档中的ID。
<Relationship Target="media/image1.emf" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Id="rId8"/>
现在我可以在document.xml中找到该rId8的使用位置:
<w:drawing>
<wp:inline distT="0" distB="0" distL="0" distR="0" wp14:anchorId="59736095" wp14:editId="3A4D29FE">
<wp:extent cx="1286510" cy="712470"/>
<wp:effectExtent l="0" t="0" r="8890" b="0"/>
<wp:docPr id="2" name="Picture 2"/>
<wp:cNvGraphicFramePr>
<a:graphicFrameLocks noChangeAspect="1"/>
</wp:cNvGraphicFramePr>
<a:graphic>
<a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:pic>
<pic:nvPicPr>
<pic:cNvPr id="0" name="Picture 2"/>
<pic:cNvPicPr>
<a:picLocks noChangeAspect="1" noChangeArrowheads="1"/>
</pic:cNvPicPr>
</pic:nvPicPr>
<pic:blipFill>
<a:blip r:embed="rId8" cstate="print">
<a:extLst>
<a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}">
<a14:useLocalDpi val="0"/>
</a:ext>
</a:extLst>
</a:blip>
<a:srcRect/>
<a:stretch>
<a:fillRect/>
</a:stretch>
</pic:blipFill>
<pic:spPr bwMode="auto">
</pic:spPr>
</pic:pic>
</a:graphicData>
</a:graphic>
</wp:inline>
</w:drawing>
从那以后我被卡住了!如何处理这些数据? 图纸的父节点是一个带有ID的段落
w14:paraId="78D01A35"
但这是ActiveDocument.WordOpenXML字符串中ID的唯一实例。
我想知道我的外观。 据我了解,当Word解析docx并构建对象模型时,它会将关系链接转换为在适当位置具有锚点的inlineShape。 但它会以某种方式丢失对docx zip中图片名称或位置的所有引用。
P.S。 :我需要用vba单词找到解决方案
答案 0 :(得分:0)
您在正确的轨道上。 rId
是文档中图像位置和实际图形文件之间的“链接”。
document.xml中的所有信息都是“格式化”的,因此文件扩展名(图像类型)将永远不会存储在其中,仅在媒体关系中。
在document.xml中,这是在您显示的XML中找到rId
的地方
<pic:blipFill>
<a:blip r:embed="rId8" cstate="print">
您需要先接blip
,然后接embed
。此信息可能会对您http://officeopenxml.com/drwPic-ImageData.php
您可以尝试使用RegEx或某种字符串解析来进行选择。或者可以使用MSXML和XML“解析”来完成。有效的方法取决于所有这些东西遵循可识别模式的紧密程度,以及学习如何使用XML对象模型将花费多少时间/精力。