向下标记到 docx,包括复杂的模板

我已经自动构建了使用 Pandoc 将 Markdown 文件转换为 DOCX 文件。我甚至使用了一个参考文档作为最终文档的样式。我使用的命令是:

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

reference.docx是拾起由 Pandoc 从 docs/rendering和 Pandoc 渲染 mydoc.docx与参考文档相同的样式。

然而,reference.docx包含的不仅仅是风格,它还包含公司标志、前言等等。

如何自动合并 Markdown 内容与 reference.docx的样式和内容。我的解决方案需要在 Linux 上运行。

48229 次浏览

理想情况下,PanDoc 将很快增加这个特性 但看起来不太可能

我不知道是否有任何工具可以直接完成这项工作,但是您可以将 reference.docx和 PanDoc 生成的 mydoc.docx合并到代码中。

那个。Docx 格式是(大部分) XML 文件的 ZIP 归档文件。最重要的是 word/document.xml。如果您使用 XML 工具从一个文件中获取(大部分) document.xml并将其插入到另一个文件中,那么您将获得更接近所需的内容。

如果插图有帮助的话,我可以用 Ruby 编写一个示例。

理想情况下,您可以使用一个定制的 docx 模板,但是 pandoc 还不支持它。reference.docx文件只允许在新创建的 docx 文件中嵌入自定义样式。

幸运的是,您可以使用 odt 而不是 docx 来近似处理这个问题。您可以相当容易地修改 默认的 OpenDocument 模板,以包括您的自定义徽标,前言,和其他东西。使用自定义模板和 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

更新

使用用户 Christian Long 建议的管道版本:

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

我知道这个问题来得有点晚,但我假设人们在最初的问题——我知道我曾经是——三年后仍在寻找解决方案。

我的解决方案是使用 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 可以处理大约100个参数,而且可能有一些方法可以让它变得更漂亮。自从你第一次发布你的问题以来,它也得到了相当多的更新。

更新: 此特性不完整

我在一些复杂的模板中使用了它,发现它能很好地映射字体、公司标志等。但是去。Docx-> .Docx 中,我不得不手动将标题样式应用到章节/部分分隔符中。字体是正确的,但部分不正确。我尽量。Md-> .下一个是 docx。


这个功能现在可以在 Pandoc 使用,如下所述:

向下标记到 docx,包括复杂的模板

以上连结:

pandoc  input --reference-docx=my-reference.docx -o out.docx

其中 my-reference.docx(n.b. 不是 .dotx)可以是:

  • 当前文件夹或
  • 由—— data-dir OR 定义的文件夹
  • Data-dir 的系统默认文件夹
    • $HOME/. pandoc on UNIX-like systems $HOME/. pandoc on UNIX-like systems
    • C: 文档和设置 USERNAME 应用程序数据在 WindowsXP 上不应该再使用
    • C: 用户在 WindowsVista 或更高版本上使用 USERNAME AppData 漫游 pandoc。