2013-01-10 7 views
52

Ich habe meinen Build automatisiert, um Markdown-Dateien mit Pandoc in DOCX-Dateien zu konvertieren. Ich habe sogar ein Referenzdokument für das Styling des endgültigen Dokuments verwendet. Der Befehl, den ich verwenden ist:Markdown zu docx, einschließlich komplexer Vorlage

pandoc -f markdown -t docx --data-dir=docs/rendering/ mydoc.md -o mydoc.docx 

Die reference.docx wird durch Pandoc von docs/rendering und Pandoc macht mydoc.docx mit den gleichen Arten wie die Referenz doc aufgenommen.

Allerdings enthält reference.docx mehr als nur Stile. Es enthält Firmenlogos, Präambel usw.

Wie kann ich die Zusammenführung der Markdown-Inhalt mit den Stilen und Inhalt von reference.docx automatisieren. Meine Lösung muss unter Linux funktionieren.

+0

Sie könnten versuchen, MergeDocx (unser kommerzielles Produkt; Java) – JasonPlutext

+0

Ich habe einmal versucht, so etwas zu tun, aber ich fand es einfacher, nur eine Webseite mit speziellen Druckstilen zu rendern und lassen Sie daraus ein PDF erstellen. Oder drucken Sie die Seite auf einen PDF-Drucker. Ich musste das ganze DOCX neu erstellen, aber das schien einfacher als das Zusammenführen in der ganzen Formatierung (und das Risiko zu riskieren). – ayke

Antwort

11

Im Idealfall wird PanDoc diese Funktion but it doesn't look like likely in absehbarer Zeit erweitern.

Ich weiß nicht über irgendwelche Werkzeuge, die die Arbeit direkt tun, aber Sie könnten wahrscheinlich erreichen, fallen reference.docx und Ihre PanDoc-produzierten mydoc.docx in Code.

Das DOCX-Format ist ein ZIP-Archiv von (meist) XML-Dateien. Das wichtigste ist word/document.xml. Wenn Sie ein XML-Tool verwenden, um (die meisten) die document.xml aus einer Datei zu übernehmen und in die andere einzufügen, haben Sie etwas näher an dem, was Sie brauchen.

Ich könnte ein Beispiel in Ruby hacken, wenn eine Illustration helfen würde.

10

Idealerweise könnten Sie eine benutzerdefinierte docx-Vorlage verwenden, aber pandoc unterstützt dies noch nicht. Eine Datei reference.docx ermöglicht nur das Einbetten benutzerdefinierter Formatvorlagen in neu erstellten docx-Dateien.

Glücklicherweise können Sie dies mit odt anstelle von docx annähern. Sie können das default OpenDocument template ziemlich leicht ändern, um Ihre kundenspezifischen Logos, Präambel und andere Sachen einzuschließen. Verwenden Sie die benutzerdefinierte Vorlage in Verbindung mit einer reference.odt-Datei, um alle Stile und benutzerdefinierten Inhalt zu erhalten.

Sobald Sie die Datei im ODT-Format haben, können Sie eine beliebige Anzahl von Befehlszeilen-Tools verwenden, um von ODT nach DOCX zu konvertieren. Zum Beispiel auf Linux können Sie

libreoffice --invisible --convert-to docx test.odt 

Oder auf OS X laufen:

/Applications/LibreOffice.app/Contents/MacOS/soffice.bin --invisible --convert-to docx test.odt 
+1

Warum werden die docx Dateien/Vorlagen nicht automatisch in odt konvertiert? Und dann die odt in der Pandoc Konvertierung verwenden? (Ich bin ein Pandovo- und Dokument-Template-Neuling, also bitte verzeihen Sie meine ignorante Frage.) –

+1

Pandoc benötigt spezielle Variablen in der odt-Vorlage, um korrekt zu funktionieren (siehe https://github.com/andrewheiss/Global-Pandoc-files/ blob/master/templates/odt.template # L34 zum Beispiel). Sie können diese nicht in nativem docx erstellen - sie müssen manuell über einen Texteditor hinzugefügt werden. – Andrew

10

Ich weiß, das spät in den kommenden ist, aber ich werde die Menschen immer noch unter der Annahme suchen nach Lösungen für diese drei Jahre nach der ursprünglichen Frage - ich weiß, ich war.

Meine Lösung war, LaTeX als Vermittler zwischen Abschrift und docx zu verwenden (tatsächlich konvertierte ich vom org-Modus, aber gleichen Unterschied). Also in Ihrem Fall, glaube ich, eine Einzeiler Lösung wäre:

pandoc -f markdown -t latex -o mydoc.tex mydoc.md && \ 
pandoc -f latex -t docx --data-dir=docs/rendering/ -o mydoc.docx mydoc.tex 

Was Sie Ihr Ziel näher kommen könnte. Natürlich hat Pandoc ungefähr hundert Argumente, mit denen es umgehen kann, und es gibt wahrscheinlich Möglichkeiten, dies hübscher zu machen. Es hat auch einige Updates erhalten, seit du deine Frage zum ersten Mal gestellt hast.

Verwandte Themen