2009-10-03 13 views
31

Ho cercato di scrivere un semplice Markdown -> docx parser/writer, ma sono completamente bloccato con l'ultima parte, che dovrebbe essere la più semplice: ossia comprimendo la cartella in a. docx che Word, o qualsiasi altro lettore .docx, riconoscerà.Come comprimere una cartella WordprocessingML in docx leggibile

Il mio parser-writer è irrilevante in realtà: ho questo problema se semplicemente decomprimo un vecchio file * .docx prodotto da Word e poi provo a ricomprimerlo con le solite utilità di compressione, dandogli il docx file-finale. C'è qualche intestazione misteriosa che dovrei aggiungere, o ho bisogno di una speciale utility di compressione OPC, o cosa?

Non voglio tanto uno strumento che faccia questo, quanto capire cosa dovrebbe essere lì. Sembra essere indipendente dalla specifica di WordprocessingML.

Inutile dire che non so nulla di compressione. Tutto quello che riesco a trovare su Google ha a che fare con utility di fantasia che puoi usare nel mondo degli affari, ma sto facendo un piccolo eseguibile che sarebbe GPLd o qualcosa del genere, e dovrebbe funzionare su qualsiasi cosa.

+2

Eric White è giusto in dedurre che ho sperimentato "il problema più comune intorno zippare manualmente un documento Open XML". L'errore è già visibile nel titolo della domanda: stavo comprimendo una cartella contenente il materiale, piuttosto che unire i materiali separatamente in un file zip. Mi sembra di averlo indovinato, visto che se decidi di decomprimere un file .docx, non ottieni una piccola directory, ma file in tutta la directory in cui stai recitando. Grazie! - Ovviamente, questo significa che dovrei tornare al progetto che ho menzionato sopra ... :) – applicative

risposta

1

L'algoritmo di compressione utilizzato è la compressione "Zip" (Base 64).

7zip sembra offrire questo, sebbene non l'abbia provato.

2

In seguito a quanto detto da Mica, il contenuto del file ZIP è organizzato in base alla Convenzione di imballaggio aperta; cf. Microsoft's Essentials of the Open Packaging Convention.

È possibile utilizzare .NET System.IO.Packaging per creare e modificare file .docx; questa classe è implementata nel progetto Mono.

37

Il problema più comune relativo alla chiusura manuale dei documenti Open XML è che non funzionerà se si esegue il zip della directory anziché dei contenuti. In altre parole, il file [content_types] .xml e le directory word, docProps e _rels devono risiedere al livello root del file zip.

+4

Ciao, sono il poster originale, ma ho perso questo S.O. conto, altrimenti lo segnerei come la "risposta giusta". Hai ragione che il mio errore era quello di comprimere la directory che includeva tutto il materiale, pensando che avevo bisogno della giusta formula, della compressione ... una certa sottigliezza. MSWord è pronto ad aprire il file se accumulo tutti i file rilevanti (inclusa l'aggiunta all'ingrosso di sottodirectory come 'word' che sono a loro volta al livello principale.) In un unico file zip. Finora ho provato questo su OS X senza incidenti. Studierò di più le cose. – applicative

+0

Docx autoprogrammato e aperto da WinZip e WinRAR sono tutti leggibili! –

11

Qui ci sono passi per decomprimere my.docx e ri-zip:

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