【问题标题】:Markdown to docx, including complex templateMarkdown 到 docx,包括复杂的模板
【发布时间】:2019-02-01 23:43:44
【问题描述】:

我已经使用 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 上运行。

【问题讨论】:

  • 你可以试试 MergeDocx(我们的商业产品;Java)
  • 我曾经尝试过这样做,但我发现只渲染具有特殊打印样式的网页并让 Chrome 从中制作 PDF 会更容易。或将页面打印到 PDF 打印机。我不得不重新创建整个 DOCX,但这似乎比合并整个格式更容易(并且有出错的风险)。

标签: markdown docx pandoc


【解决方案1】:

更新

使用用户 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 有大约一百个可以处理的参数,并且可能有一些方法可以让这个参数更漂亮。自从您第一次发布问题以来,它也得到了很多更新。

【讨论】:

  • 此解决方案有效。为了简化一点,您可以跳过中间的.tex 文件,并将 LaTeX 格式的数据从一个 pandoc 传输到另一个 pandoc。 pandoc -t latex mydoc.md | pandoc -f latex --data-dir=docs/rendering/ -o mydoc.docx
【解决方案2】:

理想情况下,您可以使用自定义 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

【讨论】:

  • 为什么不自动将 docx 文件/模板转换为 odt?然后在pandoc转换中使用odt? (我是 pandoc 和文档模板的新手,所以请原谅我无知的问题。)
  • Pandoc 需要 odt 模板中的特殊变量才能正常工作(例如,请参阅 github.com/andrewheiss/Global-Pandoc-files/blob/master/…)。您无法在原生 docx 中创建它们——它们必须通过文本编辑器手动添加。
【解决方案3】:

理想情况下,PanDoc 很快就会增加这个功能but it doesn't look like likely

我不知道有什么工具可以直接完成这项工作,但您可能会退回到在代码中合并 reference.docx 和 PanDoc 生成的 mydoc.docx

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

如果插图有帮助,我可以拼凑出一个 Ruby 中的示例。

【讨论】:

    【解决方案4】:

    更新:此功能不完整

    我在一些复杂的模板上使用了它,发现它很好地映射了字体、公司徽标等。但是要使用 .docx -> .docx,我必须手动将标题样式应用于章节/分节符。字体是正确的,但切片不正确。我将尝试 .md -> .docx 接下来。


    此功能现已在 Pandoc 中可用,如下所述:

    Markdown to docx, including complex template

    从上面的链接:

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

    my-reference.docx(注意不是.dotx)可以是:

    • 当前文件夹或
    • 由 --data-dir OR 定义的文件夹
    • data-dir 的系统默认文件夹是
      • $HOME/.pandoc 在类 UNIX 系统上
      • C:\Documents And Settings\USERNAME\Application Data\pandoc 在 Windows XP 上你不应该再使用了
      • C:\Users\USERNAME\AppData\Roaming\pandoc 在 Windows Vista 或更高版本上。

    【讨论】:

    • 这行代码好像不完整,没有回答上面的问题。
    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2021-12-08
    • 2013-06-10
    相关资源
    最近更新 更多