3

LibreOffice Writer ドキュメントの非常に簡単な操作を行いたい...その後、ODT ファイルとして再度保存します...

これの何が問題なのですか?これを試してみると、zipファイル(ODTファイル)に2つのcontent.xmlが含まれています...奇妙なことに、これらの両方(たとえば、「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」を別の「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 Format (.fodt 拡張子だと思います) を使用して、XML を直接操作することをお勧めします。これはファイル サイズが大きくなることを意味しますが、圧縮率はかなり高く、いじり終わったらいつでも .odt ファイルとして保存できます。

于 2013-09-29T12:53:14.370 に答える