【问题标题】:How to re-zip Docx file contents after modification修改后如何重新压缩 Docx 文件内容
【发布时间】:2023-10-05 01:58:01
【问题描述】:

我会尽量保持简短。

我制作了一个能够修改 Docx document.xml 文件中的文本的程序。我通过 xml 解析实现了这一点,效果很好。现在我的程序正在输出一个新的 document.xml 文件,该文件与原始文件完全相同,但减去了更改的文本。当我尝试重新压缩 docx 文件时,我的问题就开始了。

仅出于测试目的,我一直在手动删除 word 文件夹中的原始 document.xml 文件并添加新文件。最终,我希望我的程序能够做到这一点,但那时还没有。

所以发生了什么,在重新压缩所有内容后,Microsoft Word 说文件已损坏。顺便说一句,如果我不更改 document.xml 文件并重新压缩它,它就可以正常工作。所以我不认为拉链有什么问题。

但是如果我删除原始的 document.xml 文件然后将其放回去,Microsoft word 会说它已损坏。它真的很奇怪。

这是我原来的 document.xml 文件

https://www.dropbox.com/s/ghe1m176rdqtng7/document.xml?dl=0

和更新的。

https://www.dropbox.com/s/8n9llagozbvb2mz/document_output.xml?dl=0

希望有人能对正在发生的事情有所了解。

谢谢!

【问题讨论】:

    标签: python xml zip docx corrupt


    【解决方案1】:

    如果我使用的是原始文档,Word 也会说它会损坏。

    据我所知,有三个参考资料没有指向任何地方。 如果您注释掉三个 w:headerReference 元素(在底部作为 w:sectPr 元素的子元素),我可以打开它而不会出现 Word 抱怨。

    整个新部分:

    <w:sectPr w:rsidR="00EC0B63" w:rsidSect="00EC0B63">
        <!--<w:headerReference w:type="even" r:id="rId8"/>
        <w:headerReference w:type="default" r:id="rId9"/>
        <w:headerReference w:type="first" r:id="rId10"/>-->
        <w:pgSz w:w="12240" w:h="15840"/>
        <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720"
            w:footer="720" w:gutter="0"/>
        <w:cols w:space="720"/>
        <w:titlePg/>
        <w:docGrid w:linePitch="360"/>
    </w:sectPr>
    

    【讨论】: