杂谈Python文集Java技术升华

更优雅地把Markdown文件转为PDF格式

2018-05-06  本文已影响2831人  m2fox

markdown是什么无需在这里多言,一言以蔽之:人生苦短,快用markdown,懂的人自然知道它的众多好处。

不过虽然markdown很好很强大,但并不是所有人都知道而且还会使用,有时候为了和人交流,还是需要转为更通用的PDF格式的文档。本文就是主要记录一下最近在探索把markdown转为PDF时候的一些历程,以及最终找到的一种比较优雅的方式。

pandoc及下载和安装

pandoc是什么

pandoc是一个软件,是一个能把千奇百怪的文档格式互相转换的神器,是一把文档转换的瑞士军刀(swiss-army knife)。不多说,放一张其官网(http://www.pandoc.org)的图,一图胜千言,感受一下:

下载pandoc

下面以下载Windows下的pandoc为例:

安装pandoc

下载pandoc安装包之后,像安装普通软件一样点开安装就可以了。安装完成之后,打开cmd命令行,输入pandoc -v,如果正常显示出类似下面的信息就表明安装成功:

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.

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

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

尝试过的不合适的方案

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

一个不太合适的方案

在网上搜的时候,发现有一个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

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

脚本封装,支持批量转换

pandoc text.md -o text.docx && pause
@echo off
:: 遍历当前文件夹下的所有后缀名为md的文件
for /f %%a in ('dir /b *.md') do (
    :: 执行pandoc命令,把每个md文件都转为docx文件,docx文件的文件名为:md文件名.md.docx
    pandoc %%a -o %%a.docx
)
pause

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

# 一级标题1
## 二级标题1
* 列表项1
* 列表项2
    
## 二级标题2
正文1-1

# 一级标题2
正文2-1

# 一级标题3
表格1:

姓名|年龄|性别
---|---|---
张三|30|男
李四|28|男
王五|29|男

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

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

小结

上一篇下一篇

猜你喜欢

热点阅读