rui*_*eco 12 zip openoffice.org opendocument
我正在尝试以编程方式创建一个Open Office电子表格,但出于某种原因,仅使用所有必需文件压缩文件夹会使Open Office将该文件标记为已损坏.
我是怎么做到这一点的?我开始在Open Office中创建一个普通的电子表格,其中包含一些值.保存后,我将扩展名更改为.zip并制作该文件夹的副本.然后我使用命令行zip压缩第二个文件夹,并将文件扩展名更改为.ods.尝试打开生成的文件时,我从Open Office收到一条错误,指出该文件已损坏.
Open Office是否使用特殊的压缩算法?执行"file test.ods"会将其显示为压缩zip,那么Open Office在压缩例程中添加了什么才能使其正常工作?
tok*_*and 17
这对我有用:
将原始文档文件(它是普通的zip文件)解压缩到某个目录:
$ mkdir document
$ cd document
$ unzip ../document.odt
Run Code Online (Sandbox Code Playgroud)修改未压缩的数据.
创建一个新的odt:
$ zip -0 -X ../document2.odt mimetype
$ zip -r ../document2.odt * -x mimetype
Run Code Online (Sandbox Code Playgroud)OASIS OpenOffice规范的第17节定义了如何打包OpenDocument包.
第17.4节MIME类型流如下所示:
如果存在使用包的文档的MIME类型,则包 应该包含名为"mimetype"的流.该流应该是包的压缩文件的第一数据流,它必须不被压缩,并且它必须不在其首部用一个"额外字段"(见[ZIP])..
目的是允许通过"魔术数"机制识别打包文件,例如Unix的文件/魔术实用程序.如果ZIP文件包含未压缩文件开头的流,并且标头中没有额外数据,则可以在固定位置找到流名称和流内容.更具体地说,人们会发现:
- 所有zip文件位置0的字符串'PK'
- 所有此类包文件的位置30处的字符串'mimetype'
- mimetype本身在这样一个包的第38位.
我曾尝试过tokland建议,但我已经证明LibreOffice 4需要特定的订单(仅适用于第一批订单?):
mimetype
(未压缩)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
我创建了一个脚本来执行该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"
Run Code Online (Sandbox Code Playgroud)
我在这里找到了一些有趣的信息:http://www.jejik.com/articles/2010/03/how_to_correctly_create_odf_documents_using_zip/
归档时间: |
|
查看次数: |
10660 次 |
最近记录: |