Open Office如何压缩其文件?

时间:2011-02-10 12:41:44

标签: zip openoffice.org opendocument

我正在尝试以编程方式创建一个Open Office电子表格,但出于某种原因,仅使用所有必需文件压缩文件夹会使Open Office将文件标记为已损坏。

我是怎么做到这一点的?我开始在Open Office中创建一个普通的电子表格,其中包含一些值。保存后,我将扩展名更改为.zip并制作该文件夹的副本。然后我使用命令行zip压缩第二个文件夹,并将文件扩展名更改为.ods。尝试打开生成的文件时,我从Open Office收到一条错误消息,说文件已损坏。

Open Office是否使用特殊的压缩算法?执行“file test.ods”会将其显示为压缩zip,那么Open Office在压缩例程中添加了什么才能使其正常工作?

5 个答案:

答案 0 :(得分:16)

这对我有用:

  1. 将原始文档文件(这是一个普通的zip文件)解压缩到某个目录:

    $ mkdir document
    $ cd document
    $ unzip ../document.odt
    
  2. 修改未压缩的数据。

  3. 创建新的odt:

    $ zip -0 -X ../document2.odt mimetype
    $ zip -r ../document2.odt * -x mimetype
    

答案 1 :(得分:8)

OASIS OpenOffice Specification的第17节定义了如何打包OpenDocument包。

第17.4节MIME类型流如下所示:

  

如果是文档的MIME类型   使用包是现有的,   包裹   应该包含一个名为“mimetype”的流。这个流应该   包裹的第一流拉链   文件,绝不能压缩,   并且绝不能使用'额外的'   标题中的字段'(参见[ZIP])..

     

目的是允许打包文件   通过'魔术'来识别   数字'机制,如Unix的   文件/魔术工具。如果是ZIP文件   包含一个开头的流   未压缩的文件,并且具有   标题中没有额外的数据,那么   流名称和流内容可以   在固定的位置找到。更多   具体来说,人们会发现:

     
      
  • 所有zip文件位置0的字符串'PK'
  •   
  • 所有此类包文件的第30位的字符串'mimetype'
  •   
  • 这种包装的第38位的mimetype本身。
  •   

答案 2 :(得分:6)

我尝试过tokland建议,但我已经证明LibreOffice 4需要特定的订单(仅适用于第一批订单?):

  1. mimetype(未压缩)
  2. meta.xml
  3. settings.xml
  4. content.xml
  5. Thumbnails/thumbnail.png
  6. Configurations2/images/Bitmaps/
  7. Configurations2/popupmenu/
  8. Configurations2/toolpanel/
  9. Configurations2/statusbar/
  10. Configurations2/progressbar/
  11. Configurations2/toolbar/
  12. Configurations2/menubar/
  13. Configurations2/accelerator/current.xml
  14. Configurations2/floater/
  15. styles.xml
  16. META-INF/manifest.xml
  17. 我创建了一个脚本来执行 folder2od.sh

    #!/bin/sh
    
    # Convert folder (unzipped OpenDocument file) to OpenDocument file (odt, ods, etc.)
    # Usage: ./folder2od.sh "path/to/folder" "file.odt"
    
    cmdfolder=$(cd `dirname "$0"`; pwd -P)
    folder=$(cd `dirname "$2"`; pwd -P)
    file=$(basename "$2")
    absfile="$folder/$file"
    
    cd "$1"
    zip -0 -X "$file" "mimetype"
    
    list=$(cat <<'END_HEREDOC'
    meta.xml
    settings.xml
    content.xml
    Thumbnails/thumbnail.png
    Configurations2/images/Bitmaps/
    Configurations2/popupmenu/
    Configurations2/toolpanel/
    Configurations2/statusbar/
    Configurations2/progressbar/
    Configurations2/toolbar/
    Configurations2/menubar/
    Configurations2/accelerator/current.xml
    Configurations2/floater/
    styles.xml
    META-INF/manifest.xml
    END_HEREDOC
    )
    
    for f in $list
    do
        zip "$absfile" "$f"
    done
    
    cd "$cmdfolder"
    

    我在这里找到了一些有趣的信息:http://www.jejik.com/articles/2010/03/how_to_correctly_create_odf_documents_using_zip/

答案 3 :(得分:0)

shell脚本也适用于我:)在解压缩odt文件后,我遇到了拉回来的问题。猜猜清单部分是什么缺失的。

上面的shell脚本没有处理内嵌图片/图形,但是,我做了一些小调整对我有用(同样,脚本有一个错误,因为END_HEREDOC不在专用线上):

#!/bin/sh

# Convert folder (unzipped OpenDocument file) to OpenDocument file (odt, ods, etc.)
# Usage: ./folder2od.sh "path/to/folder" "file.odt"

cmdfolder=$(cd `dirname "$0"`; pwd -P)
folder=$(cd `dirname "$2"`; pwd -P)
file=$(basename "$2")
absfile="$folder/$file"

cd "$1"
zip -0 -X "$file" "mimetype"

list=$(cat <<'END_HEREDOC'
meta.xml
settings.xml
content.xml
Pictures/
Thumbnails/
Configurations2/
styles.xml
manifest.rdf
META-INF/manifest.xml
END_HEREDOC
)

for f in $list
do
    zip -r "$absfile" "$f"
done

cd "$cmdfolder"

答案 4 :(得分:0)

即使这是旧的,也是在 2021 年,如果它是使用 microsoft office、office 365、google docs、libreoffice 或 openoffice 生成的,那么操作打开的文档也像以前一样简单:

  1. 复印一份文件

  2. 将复制文档的扩展名重命名为 .zip(因为每个打开的文档都是一个 zip 文件!)

  3. 用文件名创建一个文件夹,不带扩展名

  4. 将步骤 2) 中重命名的文档(zip 文件)复制到此文件夹中

  5. 解压此文件夹中的(文档)zip 文件

  6. 删除压缩文件!

  7. ... 根据需要更改 xml 数据和二进制对象

  8. 将所有文件标记为该文件夹内的文件夹并将它们添加到新的 zip 文件中(仅使用标准 zip 压缩!)

  9. 现在您应该在之前在 setp 3 中创建的文件夹中有一个新的 zip 文件)

  10. 将这个新 zip 文件的扩展名重命名回 o.odt 或 .odp 或任何原始打开的文档类型,您在步骤 2) 中重命名

  11. 尝试在任何能够处理打开文档文件的办公软件中打开这个新的、重命名的打开文档

请记住:

a) 每个打开的文档都是一个(压缩的)zip 文件

b) zip 文件包含代表本文档结构和文本内容的 xml 文件,还包含带有二进制数据(对象)的子文件夹,如媒体数据(图像、音频或视频数据以及 ole 对象),其中一些可能在 xml 文件中显示为 base64 编码。

c) 您可以将每个打开的文档的内容提取到一个新文件夹中

d) 永远不要压缩放置所有数据的文件夹,以创建新的 zip 文件/打开文档文件。 仅压缩此文件夹的内容,以创建有效的打开文档并将如此创建的 zip 文件重命名为其原始源文件使用的打开文档扩展名!

来源:https://en.wikipedia.org/wiki/OpenDocument_technical_specification

可用于操作打开的文档文件的工具:

a) https://7-zip.de/download.html(提取和压缩)

b) https://notepad-plus-plus.org/downloads/(编辑 XML 内容)

c) https://www.bulkrenameutility.co.uk/(如果你不知道windows、linux下的命令,可以批量重命名文件和文件夹...参见:https://unix.stackexchange.com/questions/181141/rename-multiple-files-with-mv-to-change-the-extension