如何从PPT中提取自由形状形状并使用PPTX将其保存在PNG文件中
我有一个ppt文件,其中包含一些地图(例如世界地图)在XML文件中标记为Freeform形状。我想解码自由形式对象,并以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文件中看到。 在此处输入图像描述
I have a ppt file that contains some maps(for eg. world map) tagged as freeform shape in xml file. I want to decode the freeform object and extract it in png or any appropriate format.
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)
Can anyone help on how to extract freeform tag in xml file.
Like the example below.
how to decode this Freeform object.
<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>
this type of image can be seen in ppt file.
enter image description here
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以在所有幻灯片上运行一个宏,并查找FreeForm(MSOfreeform),并使用保存机制(Shaperange()。用pphapeformatpng导出)。
You could run a macro through all all slides and look for freeform (msoFreeform) and use the save mechanism (ShapeRange().Export with ppShapeFormatPNG).