Создайте документ, используя FZIP в Actionscript 3 - Adobe AIR - PullRequest
2 голосов
/ 08 мая 2011

Здравствуйте, я сделаю все возможное, чтобы объяснить мою проблему, и я действительно надеюсь, что кто-то может выяснить, что может быть не так.

Ситуация:

Использование офиса открытоФормат XML от Microsoft Мне удалось создать файлы, необходимые для чистого документа Word.Все эти файлы являются файлами XML.Что я делаю, так это записываю содержимое XML в разные байты для каждого файла.

Затем я добавляю байты в библиотеку 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 и извлечен)

Таким образом, вы можете видеть, что все работает отлично до ... вы пытаетесь открыть« Untitleddocument.docx "в Word. Он скажет, что файл поврежден.

ЧТО ДЕЙСТВУЕТ ОДНАКО ... После извлечения файла docx (как на скриншоте) при выборе всех файлов/ папки внутри папки «Untitled Document» и заархивируйте их, затем переименуйте ZIP-файл в docx (см. результат: http://dl.dropbox.com/u/5490354/Screen%20shot%202011-05-08%20at%2019.44.18.png), он отлично работает в Word и Word правильно читает файл. ПРИМЕЧАНИЕ. Если вы попытаетесь сжать и переименовать UПапка с названием «Документ» снова будет снова повреждена.

Итак, мой вопрос Я надеюсь, что описание было ясным, и теперь я надеюсь на кого-то, кто знает, в чем может быть проблема, что словоФайл поврежден при архивации с использованием FZIP в ActionScript 3, но работает нормально, когда вы архивируете файлы после извлечения поврежденного файла.

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Это просто случайное предложение, так как я не могу следовать коду: но делает ли он каким-то образом zip-каталог для вас, а не просто копирует совокупность файлов? Должно быть последнее. (Это похоже на то, что делает ваш источник, по общему признанию.)

Это имеет большое значение, как я узнал однажды: см. Как заархивировать папку WordprocessingML в удобочитаемый документ - в частности, отличный ответ Эрика Уайта.

Я вижу, что на вашем изображении результата распаковки Untitled Document.zip есть внешний каталог , также называемый Untitled Document. Если вы не создавали этот каталог отдельно, но он возник из разархивирования, то я думаю , что может быть проблемой. (Обратите внимание, что если вы просто переименуете случайный .docx файл .zip и откроете его, биты, подобные [Content_Types].xml, будут распределены по всему каталогу, в котором находится zip-файл, вместо того, чтобы со вкусом создавать новый каталог для себя ; таким образом, файл .docx сам по себе не является заархивированным каталогом.) Другой способ поставить точку - если вы переименуете Archive.docx в Archive.zip и распакуете, перезапишет ли он файлы в каталоге или сделает новый каталог? Если Word откроет это, предположим, что это первое.

0 голосов
/ 12 мая 2011

Я нашел решение проблемы. Это была честная ошибка, но раздражающая

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

Должно быть

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

То же самое для всех других элементов addFile (необходимо удалить первую косую черту)

...