降价至docx,包括复杂模板

Syn*_*sso 65 markdown docx pandoc

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

pandoc -f markdown -t docx --data-dir=docs/rendering/ mydoc.md -o mydoc.docx
Run Code Online (Sandbox Code Playgroud)

reference.docx从拾起Pandoc docs/rendering和Pandoc使mydoc.docx具有相同风格的参考文档.

但是,不仅reference.docx包含样式.它包含公司徽标,序言等.

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

Fra*_*anc 24

更新

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

pandoc -t latex mydoc.md | pandoc -f latex --data-dir=docs/rendering/ -o mydoc.docx
Run Code Online (Sandbox Code Playgroud)

我知道这是迟到的,但我会假设人们仍然在寻找原始问题后三年的解决方案 - 我知道我是.

我的解决方案是使用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
Run Code Online (Sandbox Code Playgroud)

这可能会让你更接近你的目标.当然,Pandoc有大约一百个它可以处理的参数,并且可能有办法使这个更漂亮.自您第一次发布问题以来,它也获得了不少更新.

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

And*_*rew 12

理想情况下,您可以使用自定义docx模板,但pandoc尚不支持.一个reference.docx文件只允许被嵌入到新创建的docx文件自定义样式.

幸运的是,你可以使用odt而不是docx来估算它.您可以相当轻松地修改默认的OpenDocument模板,以包含您的自定义徽标,前导码和其他内容.将自定义模板与reference.odt文件结合使用可获取所有样式和自定义内容.

一旦你有了odt格式的文件,你可以使用任意数量的命令行工具从odt转换为docx.例如,在Linux上你可以运行

libreoffice --invisible --convert-to docx test.odt
Run Code Online (Sandbox Code Playgroud)

或者在OS X上:

/Applications/LibreOffice.app/Contents/MacOS/soffice.bin --invisible --convert-to docx test.odt
Run Code Online (Sandbox Code Playgroud)

  • Pandoc 需要 odt 模板中的特殊变量才能正常工作(例如,请参见 https://github.com/andrewheiss/Global-Pandoc-files/blob/master/templates/odt.template#L34)。您无法在原生 docx 中创建它们——它们必须通过文本编辑器手动添加。 (2认同)

RJH*_*ter 11

理想情况下,PanDoc会增加此功能,很快就会出现这种情况.

我不知道任何可以直接完成这项工作的工具,但你可能会回到合并reference.docxmydoc.docx代码中生成的PanDoc .

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

如果插图有帮助的话,我可以将Ruby中的一个例子合并在一起.


Jas*_*son 9

更新:此功能不完整

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


此功能现已在 Pandoc 中提供,如下所述:

Markdown 到 docx,包括复杂的模板

从上面的链接:

pandoc  input --reference-docx=my-reference.docx -o out.docx
Run Code Online (Sandbox Code Playgroud)

其中my-reference.docx(nb not a .dotx) 可以是:

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