如何将doc/docx文件转换为Markdown或结构化文本?

116
有没有一个程序或工作流可以将 .doc.docx 文件转换为 Markdown 或类似的文本格式?
注:理想情况下,我希望在 MS Word 文档中指定的字体(例如consolas)被呈现为text-code: ```....```

2
看起来 pandoc 现在支持直接将 .docx 转换为 .md,包括数学公式。请查看这里的第35个示例。 - akhmed
请访问wordtomarkdown.com。Windows商店里有一个非常有用的应用程序。它比Pandoc功能更强大,包括表格、图片和代码等方面。 - Bruno
1
wordtomarkdown.com在撰写本文时存在勒索病毒。 - MarkD
Pandoc经常被引用,而且是开源的。在维基百科上查看它的页面。 - Roland
12个回答

151
Pandoc支持直接将docx转换为markdown:
pandoc -f docx -t markdown foo.docx -o foo.markdown

支持多种 Markdown 格式:

-t gfm (GitHub-Flavored Markdown)  
-t markdown_mmd (MultiMarkdown)  
-t markdown (pandoc’s extended Markdown)  
-t markdown_strict (original unextended Markdown)  
-t markdown_phpextra (PHP Markdown Extra)  
-t commonmark (CommonMark Markdown)  

4
在OS-X El Capitan上测试并且使用Homebrew (brew install pandoc)成功运行。 - tdc
2
Word表格未能正确转换 - 最终只成为了MD中的纯文本。 - WestCoastProjects
6
有办法保存这些图片吗? - Chris
1
关于从Word文件中保存图像的问题:将Word文档另存为HTML格式。Word会将所有文档中的图像放在一个单独的文件夹中。可以选择保存为JPG或PNG格式... - RBV
23
为了保存图片,请在上述命令中添加选项 --extract-media=./。它会创建一个名为media的文件夹,并将所有图片放入其中,这些图片将正确地显示在Markdown文件中。 - Sergio
显示剩余5条评论

30

docx -> markdown

针对“docx -> markdown”这个问题,可以使用 Microsoft Word 的 Writeage 插件。此插件也支持反向转换,即“markdown -> docx”。

更多选项

  1. 使用转换工具进行多文件转换。
  2. 使用所见即所得编辑器处理单个文件以及更好的字体效果。

哪些转换工具比较好?

我测试过以下三种:(1) Pandoc (2) Mammoth (3) w2m


Pandoc

这是最优秀的转换工具,支持众多文件类型(请查看 Pandoc 的手册以获得支持的文件类型列表):

pandoc -f docx -t gfm somedoc.docx -o somedoc.md
NB
  • 要将pandoc导出Markdown表格(在pandoc中称为'pipe_tables'),请使用multimarkdowngfm输出格式。

  • 如果要将格式设置为PDF,则pandoc会使用LaTeX模板,因此您可能需要安装适用于您的操作系统的LaTeX软件包,如果该命令无法直接使用。有关说明,请参见LaTeX安装


哪些所见即所得编辑器?

对于docx,请使用Writeage


保持优秀的字体

如果您希望保留unicode字符表情符号并保持优秀的字体,则在文件格式之间使用复制和粘贴操作时,您可以从以下编辑器中获得一些收益。请注意,这些不会原生读取或写入docx

编程等效

对于编程等效,您可以通过调用不同的pdf-engine及其各自的选项来获得一些结果,但我尚未测试过此方法。 pandoc默认为'pdflatex'。

pandoc --pdf-engine=
pandoc --pdf-engine-opt=STRING

更新:A4纸和美国信纸的区别

对于美国以外的地区,请设置geometry变量:

pandoc -s -V geometry:a4paper -o outfile.pdf infile.md

脚注

值得一提的是,当我们发现Markdown语法时,很不明显的一点是MultiMarkdown是目前功能最丰富的markdown格式。

MultiMarkdown支持元数据、目录、脚注、数学公式、表格和YAML等功能。

但是Github默认使用gfm格式,也支持表格。我在Github/GitLab上使用gfm,在其他地方使用MultiMarkdown


请查看wordtomarkdown.com。Windows商店中有一个非常有用的应用程序。它比Pandoc做得更多,包括表格、图片和代码等功能。 - Bruno

12

Mammoth 以将 Word 转换为 HTML 的功能而闻名,但现在它还支持一个Markdown 写作器模块。最近我检查时,Mammoth 对 Markdown 的支持仍处于早期阶段,所以您可能会发现某些功能不被支持。通常情况下,请查看网站获取最新信息。

安装

如果想使用 Javascript 版本,请先安装 NodeJS,然后再安装 Mammoth:

npm install -g mammoth

命令行

使用命令行将Word文档转换为Markdown...

mammoth document.docx --output-format=markdown

API

NodeJS API 用于将内容转换为 Markdown 格式...

var mammoth = require("mammoth");
mammoth.convertToMarkdown({path: "path/to/document.docx"});

特点:

Mammoth Markdown Writer目前支持以下功能:

  • 列表(有序和无序)
  • 链接
  • 文字样式,如加粗、斜体
  • 图片

Mammoth命令行工具和API已经被移植到多种语言中:

无Markdown(2016年5月):

使用Markdown:


mammoth document.docx --output-format=markdown > document.md 这个命令对我来说很有效,因为似乎还没有直接支持这样做的功能。 - pollirrata
注意:Markdown支持已被弃用。https://github.com/mwilliamson/mammoth.js#markdown - Gagik

12
鉴于您在stackoverflow上提出了这个问题,您可能需要一个编程或命令行解决方案,我已经提供了另一个答案。
但是,另一种解决方案可能是使用Microsoft Word的Writage Markdown插件
Writage将Word转换为Markdown WYSIWYG编辑器,因此您可以像通常在Microsoft Word中编辑任何文档一样打开Markdown文件并进行编辑。同时,还可以将Word文档保存为Markdown文件,无需其他转换器。
在幕后,Writage使用Pandoc,您还需要安装此插件才能使用。
它目前支持以下Markdown元素:
- 标题 - 列表(有序和无序) - 链接 - 字体样式,如粗体、斜体 - 表格 - 脚注
对于许多最终用户来说,这可能是理想的解决方案,因为他们不需要安装或运行任何命令行工具,而只需坚持他们最熟悉的东西即可。

值得注意的是,Writage只支持Windows系统。我已经给作者发了电子邮件询问是否支持OS X系统。 - Dave Everitt
值得注意的是,这是一款付费应用程序(至少在撰写本文时是如此)。 - Jerry

8
您可以使用Word to Markdown(Ruby Gem)一步完成转换。转换可能非常简单,如下所示:
$ gem install word-to-markdown
$ w2m path/to/document.docx

它通过LibreOffice路由文档,但也尽最大努力根据相对字体大小使标题语义化。
还有一个托管版本,只需拖放即可进行转换。

感谢分享托管版本;我喜欢这种方式,而不是在我的电脑上安装二进制文件。 - Ron
托管版本似乎消失了 :-( - Roland

5

Word to Markdown 可以一试,或者可以尝试使用 这里描述的方法,使用 CalibrePandoc 通过HTMLZ转换,以下是他们使用的bash脚本:

#!/bin/bash
mkdir temp
cp $1 temp
cd temp
ebook-convert $1 output.htmlz
unzip output.htmlz
cd ..
pandoc -f html -t markdown -o output.md temp/index.html
rm -R temp

1
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。 - Eduard Luca
@EduardLuca 抱歉,你是想让我真的发布源代码吗?哦,你是指后者,没错,我可以总结一下... - Tobias Kienzler
链接式答案背后的想法是,那些网站的内容可能会发生变化,或者在未来被删除,因此最好在您的答案中包含来自这些网站的任何相关信息,以便即使链接发生变化,也能帮助未来的人们。这些相关信息可以是代码,也可以是您链接到的网站内容的摘要。 - Eduard Luca
@EduardLuca 我知道这一点(实际上我自己也标记/踩过许多仅有链接的答案),不过我希望链接到工具能够提供足够的起点。实际上并没有传达更多的信息... - Tobias Kienzler
1
我认为你发布的代码非常有帮助。我参考了http://networkcultures.org/digitalpublishing/2013/08/30/docx-to-markdown-using-calibre-and-pandoc/,其中包含了详细的说明,但是你发布的简化版Bash也很好。 - Eduard Luca

3

来源于这里

unoconv -f html test.docx
pandoc -f html -t markdown -o test.md test.html

3
您可以使用此Visual Basic脚本在MS Word中将Word文档转换为Markdown:

https://gist.github.com/hawkrives/2305254

按照“使用代码”下的说明,在Word中创建一个新的宏。
注意:这会将当前打开的Word文档转换为Markdown格式,从而去除所有的Word格式(标题、列表等)。在运行宏之前,请先保存您计划转换的Word文档,然后再将该文档另存为一个新文档。这样,您就可以随时返回到原始的Word文档进行修改。
这里还有更多将Word转换为Markdown的VB脚本示例:

https://www.mediawiki.org/wiki/Microsoft_Word_Macros


1
这里有一个用Ruby构建的开源Web应用程序,可以完成这个任务:https://word2md.com

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接