Как заархивировать папку WordprocessingML в удобочитаемый документ - PullRequest
33 голосов
/ 03 октября 2009

Я пытался написать простой Markdown -> docx parser / writer, но полностью застрял с последней частью, которая должна быть самой простой: то есть сжатие папки в .docx, это Word или любой другой .docx. читатель, узнает.

Мой синтаксический анализатор на самом деле не имеет значения: у меня возникает такая проблема, если я просто разархивирую любой старый * .docx, созданный в Word, а затем пытаюсь повторно сжать его с помощью обычных утилит сжатия, выдавая файл с окончанием файла. Есть какой-то загадочный заголовок, который я должен добавить, или мне нужна специальная утилита сжатия OPC, или что?

Мне не очень нужен инструмент, который будет это делать, чтобы выяснить, что там должно быть. Кажется, он не зависит от спецификации WordprocessingML.

Излишне говорить, что я ничего не знаю о сжатии. Все, что я могу найти через Google, связано с модными утилитами, которые вы можете использовать в бизнесе, но я делаю небольшой исполняемый файл, который будет GPLd или чем-то подобным, и должен работать на чем угодно.

Ответы [ 4 ]

45 голосов
/ 22 апреля 2011

Самая распространенная проблема, связанная с ручным архивированием документов Open XML, заключается в том, что он не будет работать, если вместо содержимого скопировать каталог. Другими словами, файл [content_types] .xml и каталоги word, docProps и _rels должны находиться на корневом уровне zip-файла.

14 голосов
/ 19 апреля 2013

Вот шаги для распаковки my.docx и повторной архивации:

% mkdir unzipped
% cd unzipped/
% unzip ../my.docx    
% zip -r ../rezipped.docx *
% open ../rezipped.docx 
2 голосов
/ 11 мая 2010

В дополнение к тому, что сказал Мика, содержимое файла ZIP организовано в соответствии с Конвенцией об открытой упаковке; ср Основы Microsoft Конвенции об открытой упаковке .

Вы можете использовать .NET System.IO.Packaging для создания и обработки файлов .docx; этот класс реализован в проекте Mono.

1 голос
/ 06 октября 2009

Используется алгоритм сжатия "Zip" (Base 64).

7zip, кажется, предлагает это, хотя я не проверял это.

...