markdown文本转换word,pdf

pandoc及下载和安装

pandoc是什么

pandoc是一个软件,是一个能把千奇百怪的文档格式互相转换的神器,是一把文档转换的瑞士军刀(swiss-army knife)。很少说,放一张其官网(http://www.pandoc.orgcss

下载pandoc

下面如下载Windows下的pandoc为例:html

安装pandoc

下载pandoc安装包以后,像安装普通软件同样点开安装就能够了。安装完成以后,打开cmd命令行,输入pandoc -v,若是正常显示出相似下面的信息就代表安装成功,若是未成功,可能须要配置环境变量,把安装的路径C:\Users\Frank\AppData\Local\Pandoc\加入环境变量:git

C:\Users\Administrator.PC-20170728DWIF>pandoc -v pandoc 2.2 Compiled with pandoc-types 1.17.4.2, texmath 0.10.1.2, skylighting 0.7.0.2 Default user data directory: C:\Users\Administrator.PC-20170728DWIF\AppData\Roaming\pandoc Copyright (C) 2006-2018 John MacFarlane Web: http://pandoc.org This is free software; see the source for copying conditions. There is no warranty, not even for merchantability or fitness for a particular purpose. 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 配置bat批处理文件: 
    建立文本文件,写入一行代码pandoc -s test.md -o test.docx,命名为md2doc.bat; 
    此批处理文件将调用pandoc将test.md转换为test.docx;
  • 将须要转换的md文件与bat文件放在同一文件夹下;
  • 点击md2doc.bat,闪烁cmd黑窗口,而后出现docx文件,转换成功。github

  • 须要转换的md文档与bat批处理文件放入同一文件夹下;windows

  • 双击md2doc.bat,转换;浏览器

走过的一些路,趟过的一些坑

下面是使用pandoc把markdown(如下简称md)文件转为PDF所遇到的一系列的坑。ruby

尝试过的不合适的方案

下面涉及的转换方法能够参见pandoc的使用文档(http://www.pandoc.org/MANUAL.html),这里再也不叙述细节。markdown

  • 直接使用pandoc把md转为PDF。问题:报错,缘由是电脑没有安装Latex解析引擎。
  • 装好了MiKTex这样一个Latex解析引擎以后,再转,又失败了,缘由是不支持中文字体(md文件中有中文字体)。
  • 指定字体为宋体后再转,虽然成功转为了PDF文件,可是文件的字体、行间距、排版等样式都比较丑陋,不满意。
  • 在网上又搜了搜,再加上指定Latex模板文件转,虽然可以调整一些参数了,但一方面模板文件犹如天书般难懂,另外一方面不少格式仍是不能精细调整。
  • 变换一下思路,采起迂回战术,按照md->HTML->PDF的路径转。因而先把md转为HTML,HTML的样式却是挺美观,而后在浏览器中使用浏览器的打印功能把HTML转为PDF。然而仍是存在文档格式不能精细调整的问题。
  • 发现转HTML的时候能够指定css样式文件,在css样式文件中能够配置标题、正文、段落的精细格式。奈何这种方法和Latex模板文件的缺点相似,投入/产出比太高,遂放弃。

一个不太合适的方案

在网上搜的时候,发现有一个Python三方库叫pypandoc(文档:https://pypi.org/project/pypandoc/),核心方法叫pypandoc.convert_file,支持一大堆参数。仍是考虑到投入/产出比,我只是想安静地转一下md到PDF,并不想开发一个很吊的文件转换工具,因此暂时不必去研究这个三方库的API,之后有须要再研究吧。工具

最终采起的解决方案

最终转换到另外一种思路来,依然采用迂回战术,不过是按照:md->docx->PDF,一试,发现这种方式很靠谱,主要是由于:一是md转为docx很简单,只需pandoc的一条命令就搞定,不须要额外装其余的软件;二是转为docx文档后,还能够在其中手动精细调整字体、字号、段落之类的格式,直到本身满意为止。最后用Word也能够完美地把docx转为PDF。字体

并且在生成的docx文档中手工调完精细格式以后,还能够把docx文档的格式模板导出成dot文档模板文件保存,后面再生成docx文档时不须要再一个个手工调格式了,只需把这个dot模板文件中的样式所有导入便可(怎么导入能够到网上搜)。

md转为docx文档的pandoc命令相似于这样: 
pandoc text.md -o text.docx

这种方案最为优雅,遂采用之。

脚本封装,支持批量转换

  • 把转换命令封装成bat批处理脚本,之后再进行转换的时候只需简单双击一下bat脚本便可,好比封装成convert.bat文件,内容以下:
pandoc text.md -o text.docx && pause 
  • 1
  • 2
  • 批量处理:假如几十上百个md文件要批量转为docx文件,难道要手工一个个复制这些文件名和pandoc命令去转换吗?彻底不须要,一个bat脚本搞定(convert.bat):
@echo off :: 遍历当前文件夹下的全部后缀名为md的文件 for /f %%a in ('dir /b *.md') do ( :: 执行pandoc命令,把每一个md文件都转为docx文件,docx文件的文件名为:md文件名.md.docx pandoc %%a -o %%a.docx ) pause 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

假设当前文件夹下有3个md文件test1.md、test2.md、test3.md,他们的内容都为:

# 一级标题1 ## 二级标题1 * 列表项1 * 列表项2 ## 二级标题2 正文1-1 # 一级标题2 正文2-1 # 一级标题3 表格1: 姓名|年龄|性别 ---|---|--- 张三|30|男 李四|28|男 王五|29|男 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

双击执行convert.bat后,生成了3个docx文件:

image.png

打开test1.md.docx,发现总体格式还不错,而且还支持md的表格语法:

image.png

小结

  • pypandoc库之后有须要了能够进一步研究一下。
  • 在决定采起一种方案解决问题以前,首先要考虑投入/产出比,是否值得采用这种方案。