pandoc及下載和安裝
pandoc是什么
pandoc是一個軟件,是一個能把千奇百怪的文檔格式互相轉換的神器,是一把文檔轉換的瑞士軍刀(swiss-army knife)。不多說,放一張其官網(http://www.pandoc.org)
下載pandoc
下面以下載Windows下的pandoc為例:
- 官網下載鏈接:https://github.com/jgm/pandoc/releases/tag/2.2
- 根據自己的操作系統位數下載合適的msi安裝包,我下載的是:
pandoc-2.2-windows-x86_64.msi
安裝pandoc
下載pandoc安裝包之后,像安裝普通軟件一樣點開安裝就可以了。安裝完成之后,打開cmd命令行,輸入pandoc -v
,如果正常顯示出類似下面的信息就表明安裝成功,如果未成功,可能需要配置環境變量,把安裝的路徑C:\Users\Frank\AppData\Local\Pandoc\加入環境變量:
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文件,轉換成功。
-
需要轉換的md文檔與bat批處理文件放入同一文件夾下;
-
雙擊
md2doc.bat
,轉換;
走過的一些路,趟過的一些坑
下面是使用pandoc把markdown(以下簡稱md)文件轉為PDF所遇到的一系列的坑。
嘗試過的不合適的方案
下面涉及的轉換方法可以參見pandoc的使用文檔(http://www.pandoc.org/MANUAL.html),這里不再敘述細節。
- 直接使用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文件:
打開test1.md.docx
,發現整體格式還不錯,並且還支持md的表格語法:
小結
- pypandoc庫以后有需要了可以進一步研究一下。
- 在決定采取一種方案解決問題之前,首先要考慮投入/產出比,是否值得采用這種方案。