我想对 LibreOffice Writer 文档进行一些非常简单的操作...然后再次保存为 ODT 文件...
这可能有什么问题?如果我尝试这个,我会在 zip 文件(ODT 文件)中得到 2 个 content.xmls ......奇怪的是,这两个文件(例如,如果解压缩为“content.xml”和“content_1.xml”)似乎都包含修改后的内容...
zipfile = ZipFile( file_path, "a" )
for zip_info in zipfile.infolist():
contents = zipfile.read( zip_info.filename )
if ( zip_info.filename == "content.xml" ):
document_root = parseString( contents )
# ... mess around with the contents DOM document...
zipfile.writestr( zip_info, document_root.toxml() )
zipfile.close()
我知道有各种加载项和可以使用的东西(UNO)......但我想让它尽可能简单......
之后
我的解决方案:发现无法在 Python 中以编程方式从 zip 文件中删除元素,我最初决定采用“制作新的 zip”方法:使用 ZipFile 模块从 zipfile 中删除文件
然而,尽管我能够打开生成的 ODT 文件并从中提取所有文件,但 7Zip 抱怨 CRC 失败,说 content.xml 现在“损坏”。显然是由于用一个“content.xml”粗暴地替换了另一个。
最终答案:1)将修改后的DOM结构输出到同一目录中的一个简单文件,称之为“content.xml”:
f = open( file_dir + '\\content.xml', "w" )
print >>f, document_root.toxml()
f.close()
2) 当 ODT 文件以编程方式关闭时,利用 7zip CLI:
import subprocess
subprocess.Popen( "7z u temp.odt content.xml", cwd=file_dir, shell=True )