如何在不损坏 PPTX 文件的情况下修改其内部 XML?

如何在不损坏 PPTX 文件的情况下修改其内部 XML?

我在 SO 网站上提出了这个问题,但似乎在这里更合适。

.pptx文件中我们有这个结构

结构

slide2.xml我正在尝试编辑中的内部内容..\ppt\slides

内容slide2.xml是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:cSld><p:bg><p:bgPr><a:blipFill dpi="0" rotWithShape="1"><a:blip r:embed="rId2"><a:lum/></a:blip><a:srcRect/><a:stretch><a:fillRect/></a:stretch></a:blipFill><a:effectLst/></p:bgPr></p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="4" name="CuadroTexto 3"/><p:cNvSpPr txBox="1"/><p:nvPr/></p:nvSpPr><p:spPr><a:xfrm><a:off x="2701636" y="1249854"/><a:ext cx="14505709" cy="3053139"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:noFill/><a:ln w="12700" cap="flat"><a:noFill/><a:miter lim="400000"/></a:ln><a:effectLst/><a:sp3d/></p:spPr><p:style><a:lnRef idx="0"><a:scrgbClr r="0" g="0" b="0"/></a:lnRef><a:fillRef idx="0"><a:scrgbClr r="0" g="0" b="0"/></a:fillRef><a:effectRef idx="0"><a:scrgbClr r="0" g="0" b="0"/></a:effectRef><a:fontRef idx="none"/></p:style><p:txBody><a:bodyPr rot="0" spcFirstLastPara="1" vertOverflow="overflow" horzOverflow="overflow" vert="horz" wrap="square" lIns="48766" tIns="48766" rIns="48766" bIns="48766" numCol="1" spcCol="38100" rtlCol="0" anchor="t"><a:spAutoFit/></a:bodyPr><a:lstStyle/><a:p><a:pPr marL="0" marR="0" indent="0" algn="ctr" defTabSz="1300480" rtl="0" fontAlgn="auto" latinLnBrk="0" hangingPunct="0"><a:lnSpc><a:spcPct val="100000"/></a:lnSpc><a:spcBef><a:spcPts val="0"/></a:spcBef><a:spcAft><a:spcPts val="0"/></a:spcAft><a:buClrTx/><a:buSzTx/><a:buFontTx/><a:buNone/><a:tabLst/></a:pPr><a:r><a:rPr lang="en-US" altLang="en-US" sz="9600" dirty="0"><a:solidFill><a:srgbClr val="FFBE00"/></a:solidFill><a:latin typeface="+mj-lt"/></a:rPr><a:t>Old text</a:t></a:r><a:br><a:rPr lang="en-US" altLang="en-US" sz="9600" dirty="0"><a:solidFill><a:srgbClr val="FFBE00"/></a:solidFill><a:latin typeface="+mj-lt"/></a:rPr></a:br><a:r><a:rPr lang="en-US" altLang="en-US" sz="9600" dirty="0" err="1"><a:solidFill><a:srgbClr val="00C8FF"/></a:solidFill><a:latin typeface="+mj-lt"/></a:rPr><a:t>abc</a:t></a:r><a:r><a:rPr lang="en-US" altLang="en-US" sz="9600" dirty="0"><a:solidFill><a:srgbClr val="00C8FF"/></a:solidFill><a:latin typeface="+mj-lt"/></a:rPr><a:t> Xyz</a:t></a:r><a:endParaRPr kumimoji="0" lang="es-ES_tradnl" sz="5400" b="0" i="0" u="none" strike="noStrike" cap="none" spc="0" normalizeH="0" baseline="0" dirty="0"><a:ln><a:noFill/></a:ln><a:solidFill><a:schemeClr val="bg1"/></a:solidFill><a:effectLst/><a:uFillTx/><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/><a:sym typeface="Calibri"/></a:endParaRPr></a:p></p:txBody></p:sp></p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr><p:transition spd="med"/></p:sld>

slide2.xml我想用以下这段文字替换里面的一小段文字:

...<a:t>Old text</a:t>...

更改为:

...<a:t>New text</a:t>...

当我替换至少 1 个字母并转换为.zip整个文件夹,然后将扩展名从 更改为.zip.pptx尝试打开文件时,MS Powerpoint 检测到错误并尝试修复该文件,但没有成功。

如果我只更改几个字母甚至一个字母,我不知道为什么会发生这种情况。我尝试使用 bash 命令 (sed) 并手动使用文本编辑器。

有人知道如何slideX.xml在不破坏整个 pptx 文件的情况下编辑/修改任何内容吗?

答案1

不要再次压缩文件夹,而是尝试.zip使用任何可以执行此操作的工具直接编辑文件,例如7-zip(右键单击文件 ->编辑)。请注意,您需要完全关闭编辑器,以便 7-zip 注册已保存的更改。对于我使用 LibreOffice 来说,这很有效。

这种方法更好的原因是,无论文件中存储了什么元数据,它都会被保留。当你创建一个新的文件时.zip,某些.pptx标准可能不会被遵循。

相关内容