2013-01-10 44 views
52

我已經自動構建了使用Pandoc將Markdown文件轉換爲DOCX文件。我甚至爲最終文檔的樣式使用了參考文檔。我使用的命令是:Markdown到docx,包括複雜的模板

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

reference.docxdocs/rendering拾起Pandoc和Pandoc呈現mydoc.docx具有相同風格的參考文檔。

但是,reference.docx不僅包含樣式。它包含公司徽標,序言等。

如何自動合併Markdown內容與reference.docx的樣式和內容。我的解決方案需要在Linux上工作。

+0

你可以試試MergeDocx(我們的商業產品; Java) – JasonPlutext

+0

我曾經試過做過這樣的事情,但我發現只是渲染一個特殊的打印樣式的網頁並讓Chrome從它製作一個PDF文件比較容易。或者將頁面打印到PDF打印機。我不得不重新創建整個DOCX,但這似乎比在整個格式中合併更容易(並冒着錯誤)。 – ayke

回答

11

理想情況下,PanDoc將很快增加此功能but it doesn't look like likely

我不知道任何可以直接完成這項工作的工具,但是您可能會回到合併reference.docx和代碼中的PanDoc生產的mydoc.docx

.docx格式是(大部分)XML文件的ZIP存檔。最重要的是word/document.xml。如果您使用XML工具從一個文件中獲取(大部分)document.xml並將其插入另一個文件中,則可以獲得更接近您需要的內容。

如果插圖能幫上忙,我可以在Ruby中舉一個例子。

10

理想情況下,您可以使用自定義docx模板,但是pandoc尚不支持。一個reference.docx文件只允許將自定義樣式嵌入到新創建的docx文件中。

幸運的是,您可以使用odt而不是docx來近似此值。您可以很容易地修改default OpenDocument template以包含您的自定義徽標,序言和其他內容。將自定義模板與reference.odt文件結合使用以獲取所有樣式和自定義內容。

以odt格式存在文件後,可以使用任意數量的命令行工具將odt轉換爲docx。例如,在Linux可以運行

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

或者對OS X:

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

爲什麼不自動將docx文件/模板轉換爲odt?然後在pandoc轉換中使用odt? (我是一個pandoc和文檔模板的新手,請原諒我的無知問題。) –

+1

Pandoc需要odt模板中的特殊變量才能正常工作(請參閱https://github.com/andrewheiss/Global-Pandoc-files/例如blob/master/templates/odt.template#L34)。你不能在本地docx中創建它們 - 它們必須通過文本編輯器手動添加。 – Andrew

10

我知道這是姍姍來遲,但我會假設人們仍在尋找解決方案,這三原來的問題幾年後 - 我知道我是。

我的解決方案是使用LaTeX作爲markdown和docx之間的中介(實際上,我是從org-mode轉換的,但是差別相同)。所以在你的情況下,我相信一個單線解決方案將是:

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

這可能會讓你更接近你的目標。當然,Pandoc可以處理大約一百個參數,並且有可能使這個更漂亮。自您首次發佈您的問題以來,它也得到了不少更新。