2009-10-03 4 views
31

Ich habe versucht, einen einfachen Markdown -> docx - Parser/Schreiber zu schreiben, bin aber völlig am letzten Teil fest, der am einfachsten sein sollte: zB den Ordner komprimieren. docx, das Word oder jeder andere DOCX-Reader erkennt.Wie man einen WordprocessingML - Ordner in lesbares docx zippt

Mein Parser-Writer ist eigentlich irrelevant: Ich habe dieses Problem, wenn ich einfach irgendein altes Word-produziertes * .docx entzippe und dann versuche, es mit den üblichen Komprimierungsprogrammen neu zu komprimieren und ihm die Dateiendung docx zu geben. Gibt es einen mysteriösen Header, den ich hinzufügen sollte, oder brauche ich ein spezielles OPC-Komprimierungsprogramm, oder was?

Ich will nicht so sehr ein Werkzeug, das dies tun wird, um herauszufinden, was da sein soll. Es scheint unabhängig von der WordprocessingML-Spezifikation zu sein.

Unnötig zu sagen, ich weiß nichts über die Komprimierung. Alles, was ich über Google finden kann, hat mit nützlichen Dienstprogrammen zu tun, die Sie geschäftlich nutzen können, aber ich mache eine kleine ausführbare Datei, die GPLd oder so etwas ist, und sollte an allem arbeiten.

+2

Eric White ist genau richtig in Folgern, dass ich erlebt "um die am häufigsten auftretenden Problem um manuell ein Open XML-Dokument zu zippen". Der Fehler ist bereits im Titel der Frage sichtbar: Ich habe einen Ordner mit dem Material komprimiert, anstatt die Materialien einzeln in eine ZIP-Datei zu integrieren. Es kommt mir vor, dass ich das erraten habe, denn natürlich, wenn Sie eine .docx-Datei entpacken, erhalten Sie nicht ein kleines Verzeichnis, sondern Dateien über das ganze Verzeichnis, in dem Sie agieren. Danke! - Das bedeutet natürlich, dass ich zurück zu dem Projekt komme, das ich oben erwähne ... :) – applicative

Antwort

1

Der Komprimierungsalgorithmus ist "Zip" (Base 64) Komprimierung.

7zip scheint dies zu bieten, obwohl ich es nicht getestet habe.

2

Zusätzlich zu dem, was Mica sagte, ist der Inhalt der ZIP-Datei nach der Open Packaging Convention organisiert; vgl. Microsoft's Essentials of the Open Packaging Convention.

Sie können das .NET System.IO.Packaging verwenden, um .docx-Dateien zu erstellen und zu bearbeiten. Diese Klasse ist im Mono-Projekt implementiert.

37

Das häufigste Problem beim manuellen Komprimieren von Open XML-Dokumenten besteht darin, dass es nicht funktioniert, wenn Sie das Verzeichnis anstelle des Inhalts komprimieren. Mit anderen Worten, die Dateien [content_types] .xml und die Verzeichnisse word, docProps und _rels müssen sich auf der Stammebene der ZIP-Datei befinden.

+4

Hallo, ich bin das Originalplakat, aber ich habe dieses S.O. verloren. Konto, sonst würde ich dies als die "richtige Antwort" markieren. Du hast recht, dass mein Fehler darin bestand, das Verzeichnis zu schließen, das das gesamte Material enthielt, und dachte, dass ich die richtige Beschwörungsformel, Form der Komprimierung, etwas Subtilität brauchte. MSWord ist durchaus bereit, die Datei zu öffnen, wenn ich alle relevanten Dateien (einschließlich der groß angelegten Hinzufügung von Unterverzeichnissen wie "Wort", die sich selbst auf der Stammebene befinden) in einer einzigen Zip-Datei ansammeln. Bisher habe ich das unter OS X ohne Zwischenfall ausprobiert. Ich werde mehr lernen. – applicative

+0

Wirklich offene, selbst erstellte docx von WinZip und WinRAR sind alle lesbar! –

11

Hier sind Schritte my.docx und Re-Zip entpacken:

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