Подтвердить что ты не робот

Как застегнуть папку WordprocessingML в читаемый файл docx

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Ниже приведены действия по распаковке my.docx и re-zip:

% mkdir unzipped
% cd unzipped/
% unzip ../my.docx    
% zip -r ../rezipped.docx *
% open ../rezipped.docx 

Ответ 3

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

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

Ответ 4

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

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