在Actionscript 3中使用FZIP创建docx - Adob​​e AIR

时间:2011-05-08 17:49:35

标签: actionscript-3 air docx

您好 我会尽力解释我的问题,我真的希望有人能弄清楚可能出现的问题。

情况:

使用microsoft的office open XML格式,我能够创建一个干净的Word文档所需的文件。这些文件都是XML文件。我所做的是将XML内容写入每个文件的不同bytearray。

然后我将bytearray添加到FZIP库(http://codeazur.com.br/lab/fzip/)并使用以下代码创建docx文件:

var zip:FZip = new FZip();
zip.addFile("/_rels/", null, false);
        zip.addFile("/docProps/", null, false);
        zip.addFile("/word/", null, false);

        zip.addFile("[Content_Types].xml", bytContentType, false);
        zip.addFile("/docProps/app.xml", bytApp, false);
        zip.addFile("/docProps/core.xml", bytCore, false);
        zip.addFile("/word/document.xml", bytDocument, false);
        zip.addFile("/word/fontTable.xml", bytFontTable, false);
        zip.addFile("/word/settings.xml", bytSettings, false);
        zip.addFile("/word/webSettings.xml", bytWebSettings, false);
        zip.addFile("/_rels/.rels", bytRels, false);

        var file:File = File.documentsDirectory;
        file = file.resolvePath(folder + ".docx");
        var stream:FileStream = new FileStream();
        stream.open(file, FileMode.WRITE);
        zip.serialize(stream);
        stream.close();

好的,这会在我的文档中创建一个新的docx文件。如果我将.docx重命名为.zip并将其解压缩,它将遵循Word文档所需的确切结构(例如:http://dl.dropbox.com/u/5490354/Screen%20shot%202011-05-08%20at%2019.40.10.png) 在这个例子中,“Untitled Document”最初是“Untitled document.docx”(然后重命名为.zip并提取)

所以你可以看到一切正常直到... 你试图在Word中打开“Untitled document.docx”。它会说文件已损坏。

无论什么工作...... 在您选择Untitled Document文件夹中的所有文件/文件夹并将其压缩后,解压缩docx文件(如屏幕截图),然后将ZIP文件重命名为docx(请参阅结果:http://dl.dropbox.com/u/5490354/Screen%20shot%202011-05-08%20at%2019.44.18.png)它在Word和Word中正常工作正确读取文件。注意:如果您尝试压缩并重新命名Untitled Document文件夹,它也会再次损坏。

所以我的问题 我希望描述清楚,现在我希望有人知道在动作脚本3中使用FZIP压缩时文件文件损坏可能是什么问题,但在提取损坏的文件后压缩文件时工作正常。

由于

2 个答案:

答案 0 :(得分:2)

这只是一个机会建议,因为我无法遵循代码:但它是否以某种方式为您创建压缩目录,而不是仅仅压缩文件的累积?它应该是后者。 (诚​​然,它确实看起来像你的来源。)

这让我发现了一次很大的不同:见How to zip a WordprocessingML folder into readable docx - 特别是Eric White的优秀答案。

我在解压缩Untitled Document.zip的结果图片中看到,还有一个外部目录也称为Untitled Document。如果你没有单独创建这个目录,但它从解压缩中出现,那么我认为 可能是麻烦。 (请注意,如果您只是重命名一个随机.docx文件.zip并将其打开,那么像[Content_Types].xml这样的位将遍布其中包含zipfile的目录,而非高雅为自己创建一个新目录;因此.docx文件本身不是一个压缩目录。)另一种说法是,如果你将Archive.docx重命名为Archive.zip,并解压缩,它会覆盖目录中的文件,还是创建一个新目录?如果Word打开它,假设它是前者。

答案 1 :(得分:0)

我找到了问题的解决方案。这是一个诚实的错误,但一个令人讨厌的错误

zip.addFile("/docProps/app.xml", bytApp, false);

应该是

zip.addFile("docProps/app.xml", bytApp, false);

所有其他addFile元素相同(需要删除第一个斜杠)