我正在使用libxml2和libzip在C语言中打开和编辑Word文档。它大部分都可以工作。当我使用libxml的unlink和free node函数从Word文档中删除运行或段落时,Microsoft Word无法打开文件并声称文件已损坏,但是例如libreoffice之类的其他程序可以打开它。例如,document.xml
就是删除前后的样子。
之后:
<w:p w:rsidR="00EB2661" w:rsidRPr="002D26CA" w:rsidRDefault="00EB2661" w:rsidP="00EB2661">
<w:pPr>
<w:spacing w:line="240" w:lineRule="auto"/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="000000" w:themeColor="text1"/>
</w:rPr>
</w:pPr>
</w:p>
之前:
<w:p w:rsidR="00EB2661" w:rsidRPr="002D26CA" w:rsidRDefault="00EB2661" w:rsidP="00EB2661">
<w:pPr>
<w:pStyle w:val="Heading1"/>
<w:spacing w:line="240" w:lineRule="auto"/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="000000" w:themeColor="text1"/>
</w:rPr>
</w:pPr>
<w:r w:rsidRPr="002D26CA">
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="000000" w:themeColor="text1"/>
</w:rPr>
<w:t xml:space="preserve">INHERENCY</w:t>
</w:r>
</w:p>
<w:p w:rsidR="00EB2661" w:rsidRPr="002D26CA" w:rsidRDefault="00EB2661" w:rsidP="00EB2661">
<w:pPr>
<w:spacing w:line="240" w:lineRule="auto"/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="000000" w:themeColor="text1"/>
</w:rPr>
</w:pPr>
</w:p>
此外,在libreoffice中打开文档,然后在不进行任何修改的情况下将其保存,则Microsoft Word可以将其打开。
libreoffice通过更改document
标签,修改了文档
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se wp14">
收件人:
<w:document xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" mc:Ignorable="w14 wp14">
在libreoffice的文档主要内容更改之前还有两个标签。 来自:
<w:p w:rsidR="00EB2661" w:rsidRPr="002D26CA" w:rsidRDefault="00EB2661" w:rsidP="00EB2661">
<w:pPr>
<w:pStyle w:val="Title"/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="000000" w:themeColor="text1"/>
</w:rPr>
</w:pPr>
<w:bookmarkStart w:id="0" w:name="_GoBack"/>
<w:bookmarkEnd w:id="0"/>
</w:p>
<w:p w:rsidR="00EB2661" w:rsidRPr="002D26CA" w:rsidRDefault="00EB2661" w:rsidP="00EB2661">
<w:pPr>
<w:spacing w:line="240" w:lineRule="auto"/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="000000" w:themeColor="text1"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="000000" w:themeColor="text1"/>
</w:rPr>
<w:pict>
<v:rect id="_x0000_i1025" style="width:0;height:1.5pt" o:hrstd="t" o:hr="t" fillcolor="#a0a0a0" stroked="f"/>
</w:pict>
<w:t xml:space="preserve"/>
</w:r>
</w:p>
收件人:
<w:p>
<w:pPr>
<w:pStyle w:val="Title"/>
<w:spacing w:before="240" w:after="120"/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="000000" w:themeColor="text1"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:cs="Arial" w:ascii="Arial" w:hAnsi="Arial"/>
<w:color w:val="000000" w:themeColor="text1"/>
</w:rPr>
<w:t xml:space="preserve"/>
</w:r>
<w:bookmarkStart w:id="0" w:name="_GoBack"/>
<w:bookmarkStart w:id="1" w:name="_GoBack"/>
<w:bookmarkEnd w:id="1"/>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="Normal"/>
<w:spacing w:lineRule="auto" w:line="240"/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="000000" w:themeColor="text1"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr/>
<mc:AlternateContent>
<mc:Choice Requires="wps">
<w:drawing>
<wp:inline distT="0" distB="0" distL="0" distR="0">
<wp:extent cx="5944235" cy="19685"/>
<wp:effectExtent l="0" t="0" r="0" b="0"/>
<wp:docPr id="1" name=""/>
<a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
<wps:wsp>
<wps:cNvSpPr/>
<wps:nvSpPr>
<wps:cNvPr id="0" name="Rectangle 1"/>
<wps:cNvSpPr/>
</wps:nvSpPr>
<wps:spPr>
<a:xfrm>
<a:off x="0" y="0"/>
<a:ext cx="5943600" cy="19080"/>
</a:xfrm>
<a:prstGeom prst="rect">
<a:avLst/>
</a:prstGeom>
<a:solidFill>
<a:srgbClr val="a0a0a0"/>
</a:solidFill>
<a:ln>
<a:noFill/>
</a:ln>
</wps:spPr>
<wps:bodyPr/>
</wps:wsp>
</a:graphicData>
</a:graphic>
<wp14:sizeRelH relativeFrom="page">
<wp14:pctWidth>100000</wp14:pctWidth>
</wp14:sizeRelH>
</wp:inline>
</w:drawing>
</mc:Choice>
<mc:Fallback>
<w:pict>
<v:rect id="shape_0" fillcolor="#a0a0a0" stroked="f" style="position:absolute;margin-left:0pt;margin-top:-1.55pt;width:467.95pt;height:1.45pt;mso-position-horizontal:left;mso-position-vertical:top">
<w10:wrap type="none"/>
<v:fill o:detectmouseclick="t" type="solid" color2="#5f5f5f"/>
<v:stroke color="#3465a4" joinstyle="round" endcap="flat"/>
</v:rect>
</w:pict>
</mc:Fallback>
</mc:AlternateContent>
<w:t xml:space="preserve">100000</w:t>
</w:r>
</w:p>
除此之外,我没有发现其他变化
未经编辑的原始文件:https://pastebin.com/pd1Cx97D
由我的c程序编辑的文件:https://pastebin.com/MBABRV1w
打开并保存没有任何更改的libre office后的先前文件:https://pastebin.com/9t4vcXm5