2013-01-10 13 views
52

Ho automatizzato la mia build per convertire i file Markdown in file DOCX usando Pandoc. Ho persino usato un documento di riferimento per lo stile del documento finale. Il comando che uso è:Markdown a docx, incluso il modello complesso

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

il reference.docx viene prelevato da Pandoc da docs/rendering e Pandoc rende mydoc.docx con gli stessi stili come il documento di riferimento.

Tuttavia, reference.docx contiene più di semplici stili. Contiene loghi di cope rate, preambolo, ecc.

Come è possibile automatizzare la fusione del contenuto di Markdown con gli stili e il contenuto di reference.docx. La mia soluzione deve funzionare su Linux.

+0

Si potrebbe provare MergeDocx (il nostro prodotto commerciale; Java) – JasonPlutext

+0

Una volta ho provato a fare qualcosa di simile, ma ho scoperto che era più semplice eseguire il rendering di una pagina Web con stili di stampa speciali e consentire a Chrome di creare un PDF. O stampare la pagina su una stampante PDF. Ho dovuto ricreare l'intero DOCX, ma ciò mi è sembrato più facile della fusione dell'intera formattazione (e del rischio di errori). – ayke

risposta

11

Idealmente, PanDoc aumenterà questa funzione in qualsiasi momento entro il but it doesn't look like likely.

Non conosco alcuno strumento che faccia direttamente il lavoro, ma probabilmente si potrebbe ottenere un ritorno all'unione reference.docx e il codice mydoc.docx prodotto in PanDoc nel codice.

Il formato .docx è un archivio ZIP di file (principalmente) XML. Il più importante è word/document.xml. Se utilizzi uno strumento XML per prendere (la maggior parte) lo document.xml da un file e inserirlo nell'altro, avrai qualcosa di più vicino a quello che ti serve.

Potrei incidere un esempio in, diciamo, Ruby se un'illustrazione sarebbe d'aiuto.

10

Idealmente è possibile utilizzare un modello docx personalizzato, ma pandoc non lo supporta ancora. Un file reference.docx consente solo l'incorporamento di stili personalizzati nei file docx appena creati.

Fortunatamente è possibile approssimare questo utilizzando odt al posto di docx. Puoi facilmente modificare lo default OpenDocument template per includere i tuoi loghi personalizzati, il preambolo e altre cose. Utilizzare il modello personalizzato insieme a un file reference.odt per ottenere tutti gli stili e il contenuto personalizzato.

Una volta ottenuto il file in formato odt, è possibile utilizzare qualsiasi numero di strumenti da riga di comando per convertire da odt a docx. Per esempio, su Linux è possibile eseguire

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

O su OS X:

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

Perché non convertire automaticamente i file/i file docx in odt? E poi usare l'odt nella conversione pandoc? (Sono un newbie pandoc e modello di documento, quindi scusami per la mia domanda ignorante.) –

+1

Pandoc ha bisogno di variabili speciali nel modello odt per funzionare correttamente (vedi https://github.com/andrewheiss/Global-Pandoc-files/ blob/master/templates/odt.template # L34, ad esempio). Non è possibile crearli in docx nativo: devono essere aggiunti manualmente tramite un editor di testo. – Andrew

10

So che questo è tarda ad arrivare, ma sarò assumendo le persone sono ancora alla ricerca di soluzioni a questo tre anni dopo la domanda originale - lo so che lo ero.

La mia soluzione era usare LaTeX come intermediario tra markdown e docx (in realtà, stavo convertendo da org-mode, ma la stessa differenza). Quindi nel tuo caso, credo che una soluzione one-liner sarebbe:

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

Il che potrebbe arrivare più vicino al vostro obiettivo. Naturalmente, Pandoc ha circa cento argomenti che può gestire, e ci sono probabilmente dei modi per renderlo più carino. Ha anche ricevuto parecchi aggiornamenti da quando hai pubblicato la tua domanda.

Problemi correlati