如何使用pptx从ppt中提取FREEFORM形状并将其保存在png文件中



我有一个ppt文件,其中包含一些地图(例如:在XML文件中标记为自由形状的世界地图。我想解码自由形式的对象,并提取它在png或任何适当的格式。

ppt_name = file_name + ".pptx"
prs = Presentation(ppt_name)
for slide_number, slide in enumerate(prs.slides):
for i, shape in enumerate(slide.shapes):
if shape.shape_type == MSO_SHAPE_TYPE.FREEFORM:
#now i want to save this freeform object in appropriate format.
Process_freeform_obj(shape)

谁能帮助如何提取自由格式标记在xml文件。就像下面的例子。如何解码这个Freeform对象

<p:sp>
<p:nvSpPr>
<p:cNvPr id="1914" name="Freeform 1506"/>
<p:cNvSpPr>
<a:spLocks/>
</p:cNvSpPr>
<p:nvPr/>
</p:nvSpPr>
<p:spPr bwMode="auto">
<a:xfrm>
<a:off x="3130" y="2669"/>
<a:ext cx="14" cy="30"/>
</a:xfrm>
<a:custGeom>
<a:avLst/>
<a:gdLst>
<a:gd name="T0" fmla="*/ 12 w 14"/>
<a:gd name="T1" fmla="*/ 0 h 30"/>
<a:gd name="T2" fmla="*/ 12 w 14"/>
<a:gd name="T3" fmla="*/ 2 h 30"/>
<a:gd name="T4" fmla="*/ 14 w 14"/>
<a:gd name="T5" fmla="*/ 16 h 30"/>
<a:gd name="T6" fmla="*/ 10 w 14"/>
<a:gd name="T7" fmla="*/ 30 h 30"/>
<a:gd name="T8" fmla="*/ 8 w 14"/>
<a:gd name="T9" fmla="*/ 28 h 30"/>
<a:gd name="T10" fmla="*/ 6 w 14"/>
<a:gd name="T11" fmla="*/ 28 h 30"/>
<a:gd name="T12" fmla="*/ 4 w 14"/>
<a:gd name="T13" fmla="*/ 28 h 30"/>
<a:gd name="T14" fmla="*/ 4 w 14"/>
<a:gd name="T15" fmla="*/ 26 h 30"/>
<a:gd name="T16" fmla="*/ 4 w 14"/>
<a:gd name="T17" fmla="*/ 24 h 30"/>
<a:gd name="T18" fmla="*/ 2 w 14"/>
<a:gd name="T19" fmla="*/ 24 h 30"/>
<a:gd name="T20" fmla="*/ 2 w 14"/>
<a:gd name="T21" fmla="*/ 18 h 30"/>
<a:gd name="T22" fmla="*/ 0 w 14"/>
<a:gd name="T23" fmla="*/ 16 h 30"/>
<a:gd name="T24" fmla="*/ 0 w 14"/>
<a:gd name="T25" fmla="*/ 12 h 30"/>
<a:gd name="T26" fmla="*/ 2 w 14"/>
<a:gd name="T27" fmla="*/ 8 h 30"/>
<a:gd name="T28" fmla="*/ 2 w 14"/>
<a:gd name="T29" fmla="*/ 8 h 30"/>
<a:gd name="T30" fmla="*/ 4 w 14"/>
<a:gd name="T31" fmla="*/ 8 h 30"/>
<a:gd name="T32" fmla="*/ 8 w 14"/>
<a:gd name="T33" fmla="*/ 6 h 30"/>
<a:gd name="T34" fmla="*/ 10 w 14"/>
<a:gd name="T35" fmla="*/ 6 h 30"/>
<a:gd name="T36" fmla="*/ 12 w 14"/>
<a:gd name="T37" fmla="*/ 4 h 30"/>
<a:gd name="T38" fmla="*/ 12 w 14"/>
<a:gd name="T39" fmla="*/ 0 h 30"/>
<a:gd name="T40" fmla="*/ 12 w 14"/>
<a:gd name="T41" fmla="*/ 0 h 30"/>
<a:gd name="T42" fmla="*/ 0 60000 65536"/>
<a:gd name="T43" fmla="*/ 0 60000 65536"/>
<a:gd name="T44" fmla="*/ 0 60000 65536"/>
<a:gd name="T45" fmla="*/ 0 60000 65536"/>
<a:gd name="T46" fmla="*/ 0 60000 65536"/>
<a:gd name="T47" fmla="*/ 0 60000 65536"/>
<a:gd name="T48" fmla="*/ 0 60000 65536"/>
<a:gd name="T49" fmla="*/ 0 60000 65536"/>
<a:gd name="T50" fmla="*/ 0 60000 65536"/>
<a:gd name="T51" fmla="*/ 0 60000 65536"/>
<a:gd name="T52" fmla="*/ 0 60000 65536"/>
<a:gd name="T53" fmla="*/ 0 60000 65536"/>
<a:gd name="T54" fmla="*/ 0 60000 65536"/>
<a:gd name="T55" fmla="*/ 0 60000 65536"/>
<a:gd name="T56" fmla="*/ 0 60000 65536"/>
<a:gd name="T57" fmla="*/ 0 60000 65536"/>
<a:gd name="T58" fmla="*/ 0 60000 65536"/>
<a:gd name="T59" fmla="*/ 0 60000 65536"/>
<a:gd name="T60" fmla="*/ 0 60000 65536"/>
<a:gd name="T61" fmla="*/ 0 60000 65536"/>
<a:gd name="T62" fmla="*/ 0 60000 65536"/>
<a:gd name="T63" fmla="*/ 0 w 14"/>
<a:gd name="T64" fmla="*/ 0 h 30"/>
<a:gd name="T65" fmla="*/ 14 w 14"/>
<a:gd name="T66" fmla="*/ 30 h 30"/>
</a:gdLst>
<a:ahLst/>
<a:cxnLst>
<a:cxn ang="T42">
<a:pos x="T0" y="T1"/>
</a:cxn>
<a:cxn ang="T43">
<a:pos x="T2" y="T3"/>
</a:cxn>
<a:cxn ang="T44">
<a:pos x="T4" y="T5"/>
</a:cxn>
<a:cxn ang="T45">
<a:pos x="T6" y="T7"/>
</a:cxn>
<a:cxn ang="T46">
<a:pos x="T8" y="T9"/>
</a:cxn>
<a:cxn ang="T47">
<a:pos x="T10" y="T11"/>
</a:cxn>
<a:cxn ang="T48">
<a:pos x="T12" y="T13"/>
</a:cxn>
<a:cxn ang="T49">
<a:pos x="T14" y="T15"/>
</a:cxn>
<a:cxn ang="T50">
<a:pos x="T16" y="T17"/>
</a:cxn>
<a:cxn ang="T51">
<a:pos x="T18" y="T19"/>
</a:cxn>
<a:cxn ang="T52">
<a:pos x="T20" y="T21"/>
</a:cxn>
<a:cxn ang="T53">
<a:pos x="T22" y="T23"/>
</a:cxn>
<a:cxn ang="T54">
<a:pos x="T24" y="T25"/>
</a:cxn>
<a:cxn ang="T55">
<a:pos x="T26" y="T27"/>
</a:cxn>
<a:cxn ang="T56">
<a:pos x="T28" y="T29"/>
</a:cxn>
<a:cxn ang="T57">
<a:pos x="T30" y="T31"/>
</a:cxn>
<a:cxn ang="T58">
<a:pos x="T32" y="T33"/>
</a:cxn>
<a:cxn ang="T59">
<a:pos x="T34" y="T35"/>
</a:cxn>
<a:cxn ang="T60">
<a:pos x="T36" y="T37"/>
</a:cxn>
<a:cxn ang="T61">
<a:pos x="T38" y="T39"/>
</a:cxn>
<a:cxn ang="T62">
<a:pos x="T40" y="T41"/>
</a:cxn>
</a:cxnLst>
<a:rect l="T63" t="T64" r="T65" b="T66"/>
<a:pathLst>
<a:path w="14" h="30">
<a:moveTo>
<a:pt x="12" y="0"/>
</a:moveTo>
<a:lnTo>
<a:pt x="12" y="2"/>
</a:lnTo>
<a:lnTo>
<a:pt x="14" y="16"/>
</a:lnTo>
<a:lnTo>
<a:pt x="10" y="30"/>
</a:lnTo>
<a:lnTo>
<a:pt x="8" y="28"/>
</a:lnTo>
<a:lnTo>
<a:pt x="6" y="28"/>
</a:lnTo>
<a:lnTo>
<a:pt x="4" y="28"/>
</a:lnTo>
<a:lnTo>
<a:pt x="4" y="26"/>
</a:lnTo>
<a:lnTo>
<a:pt x="4" y="24"/>
</a:lnTo>
<a:lnTo>
<a:pt x="2" y="24"/>
</a:lnTo>
<a:lnTo>
<a:pt x="2" y="18"/>
</a:lnTo>
<a:lnTo>
<a:pt x="0" y="16"/>
</a:lnTo>
<a:lnTo>
<a:pt x="0" y="12"/>
</a:lnTo>
<a:lnTo>
<a:pt x="2" y="8"/>
</a:lnTo>
<a:lnTo>
<a:pt x="4" y="8"/>
</a:lnTo>
<a:lnTo>
<a:pt x="8" y="6"/>
</a:lnTo>
<a:lnTo>
<a:pt x="10" y="6"/>
</a:lnTo>
<a:lnTo>
<a:pt x="12" y="4"/>
</a:lnTo>
<a:lnTo>
<a:pt x="12" y="0"/>
</a:lnTo>
<a:close/>
</a:path>
</a:pathLst>
</a:custGeom>
<a:grpFill/>
<a:ln w="6350">
<a:solidFill>
<a:schemeClr val="bg2">
<a:lumMod val="85000"/>
</a:schemeClr>
</a:solidFill>
<a:round/>
<a:headEnd/>
<a:tailEnd/>
</a:ln>
</p:spPr>
<p:txBody>
<a:bodyPr/>
<a:lstStyle/>
<a:p>
<a:endParaRPr lang="en-US" dirty="0">
<a:latin typeface="+mn-lt"/>
</a:endParaRPr>
</a:p>
</p:txBody>
</p:sp>

这种类型的图像可以在PPT文件中看到。输入图片描述

您可以在所有幻灯片中运行宏并查找自由格式(msoFreeform)并使用保存机制(ShapeRange())。导出ppShapeFormatPNG).

最新更新