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庫之後有須要了能夠進一步研究一下。
  • 在決定採起一種方案解決問題以前,首先要考慮投入/產出比,是否值得采用這種方案。
相關文章
相關標籤/搜索