3

我想对 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 )
4

1 回答 1

1

根据文档的来源,您可能希望跳过处理 zip 文件并使用 Flat XML OpenDocument 格式(我相信它是 .fodt 扩展名)并直接操作 XML。这将意味着更大的文件大小,但它们确实可以很好地压缩,并且当您处理完它们后,您始终可以将它们保存为 .odt 文件。

于 2013-09-29T12:53:14.370 回答