我已经使用 Pandoc 自动化了我的构建,将 Markdown 文件转换为 DOCX 文件。我什至使用了最终文档样式的参考文档。我使用的命令是:
pandoc -f markdown -t docx --data-dir=docs/rendering/ mydoc.md -o mydoc.docx
Pandoc 从
reference.docx
拾取 docs/rendering
,并且 Pandoc 使用与参考文档相同的样式渲染 mydoc.docx
。
但是,
reference.docx
不仅仅包含样式。包含公司标志、序言等
如何自动将 Markdown 内容与
reference.docx
的样式和内容合并。我的解决方案需要在 Linux 上运行。
更新
使用用户 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 可以处理大约一百个参数,并且可能有一些方法可以让它变得更漂亮。自从您第一次发布问题以来,它也得到了相当多的更新。
理想情况下,您可以使用自定义 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
理想情况下,PanDoc 会增加此功能但看起来不太可能很快就会实现。
我不知道有什么工具可以直接完成这项工作,但你可能可以回退到合并
reference.docx
和你的 PanDoc 生成的 mydoc.docx
在代码中。
.docx 格式是(大部分)XML 文件的 ZIP 存档。最重要的是
word/document.xml
。如果您使用 XML 工具从一个文件中获取(大部分)document.xml
并将其插入到另一个文件中,您将得到更接近您需要的内容。
如果插图有帮助的话,我可以用 Ruby 编写一个示例。
我在一些复杂的模板上使用了它,发现它很好地映射了字体、公司徽标等。但是在 .docx -> .docx 中,我必须手动将标题样式应用于章节/分节符。字体是正确的,但切片不正确。接下来我会尝试 .md -> .docx 。
此功能现已在 Pandoc 中提供,如下所述:
来自上面的链接:
pandoc input --reference-docx=my-reference.docx -o out.docx
其中
my-reference.docx
(注意不是 .dotx
)可以是:
尝试一下免费工具 MassiveMark Playground。