【mdout】我開源了一款Markdown轉Pdf命令行工具(一)獲取安裝、使用說明

以下文檔來自 JabinGP/mdout,如果覺得對你有幫助,不妨點個star鼓勵一下~

mdout

一個Go語言實現的Markdown轉PDF命令行工具,基于headless chrome,簡單、可靠、易安裝、可定制化、易拓展

mdout有何特點

簡單

mdout會根據后綴,自動識別輸入類型

mdout markdown.md
mdout local_html.html
mdout http://www.baidu.com

可靠

mdout可以完整保留你md文件里的代碼格式,圖片,甚至是數學公式,支持代碼格式語法高亮

電腦不會如人一般等待頁面加載完全再選擇打印,電腦自動執行打印時頁面尚未渲染完全是件非常頭疼的事情,對此,mdout沒有簡單地使用sleep休眠機制去碰運氣,而是實現了一套非常簡單的同步渲染機制,即便是你有1萬行的mathjax數學公式、1萬行的代碼語法高亮要渲染,mdout都能完美的保證你的pdf上不會有任何一個未渲染完成的元素

易安裝

除了chrome,mdout不依賴于其他任何環境,你只需要選擇對于系統的安裝包,下載并解壓即可使用,更為macOS和linux提供了一鍵安裝腳本,為windows提供了豐富的圖文教程

可定制化

mdout將每個模板獨立為主題,并且支持指定輸出html文件,可以很方便地自定義頁面配色,自定義語法高亮配色

易拓展

mdout基于headless chrome,這使得mdout幾乎兼容市面上所有能用于的前端組件,并且mdout將組件歸類為主題的一部分,你同樣可以輸出html來調試自己的自定義拓展插件

獲取和安裝

由于Github下載速度實在是太過寒酸,只有30KB/s,以下的鏈接全部來自于阿里云服務器,盡管服務器有帶寬限制,但是應對這個大小的文件還是沒問題的

mdout同時支持windows,linux,macOS,但目前只支持64位的系統

mdout已經為各平臺打包了可執行文件,因此無論何種方式安裝,無非就是下載可執行文件壓縮包后解壓縮,解壓完就可以在mdout所在文件夾使用mdout了

但是為了命令行使用方便,我更推薦將mdout配置到系統的環境變量中,這樣隨時隨地隨心所欲mdout

適用于老鳥的安裝方式

稍微懂點命令行的使用以下命令即可輕松安裝

  • linux

    wget http://112.74.177.253:8000/f/edcb3b9e460d4d18ab3f/?dl=1
    tar -xvzf mdout.macOS.x86-64.tar.gz
    sudo mv mdout /usr/local/bin
    mdout install
    
  • macOS

    wget http://112.74.177.253:8000/f/100873c74622474da4d9/?dl=1
    tar -xvzf mdout.linux.x86-64.tar.gz
    mv mdout /usr/local/bin
    mdout install
    

腳本安裝

非常感謝Fisher的腳本支持! 自己日用的腳本

linux && macOS推薦使用腳本安裝

  • curl方式

    bash -c "$(curl -fsSL https://raw.githubusercontent.com/FisherWY/Shell/master/mdout/install_mdout.sh)"
    
  • wget方式

    bash -c "$(wget https://raw.githubusercontent.com/FisherWY/Shell/master/mdout/install_mdout.sh -O -)"
    

手動安裝

點擊前文給出的各版本鏈接,下載成功后解壓縮,你會得到一個mdout可執行文件

windows

  1. 點擊下載

    下載后使用zip工具解壓縮,解壓后會得到一個mdout.exe可執行文件

  2. 放置軟件

    mdout.exe可執行文件放置平時放軟件的地方,比如D:\mdout這個文件夾里面,此時你的mdout.exe的全路徑應該是D:\mdout\mdout.exe

  3. 設置環境變量

    如果不設置環境變量也可以使用,但是缺點是你需要使用cmd,powershell或者gitbash手動進入D:\mdout才能使用mdout命令

    確定路徑


    1.jpg

設置環境變量,右鍵我的電腦 -> 選擇屬性 -> 左邊的高級系統設置

2.jpg

選擇高級 -> 點擊環境變量

3.jpg

找到下半部分的系統變量,雙擊Path

4.jpg

在彈出來的窗口選擇新建

5.jpg

填入D:\mdout,然后一定要連續點完三個確定

6.jpg
  1. 檢驗

    打開cmd,或者powershell,或者你有gitbash都ok(推薦使用命令行的windows用戶都裝一個gitbash),輸入mdout,看到如下輸出就是成功了

7.jpg

linux

  1. 下載linux版本

    點擊下載

    下載完成后解壓tar.gz包,解壓后會得到一個mdout可執行文件

  2. 將軟件放入可執行文件庫

    打開終端,定位到剛剛下載的文件所在路徑

    cd 你的文件所在文件夾
    

    然后將可執行文件直接移動到/usr/local/bin,linux環境下需要sudo權限

    sudo mv ./mdout /usr/local/bin
    

    輸入密碼就可以了

  3. 檢驗是否成功

    輸入mdout --version,看到版本號輸出就是成功了

macOS

  1. 下載macOS版本

    點擊下載

    下載后使用工具解壓tar.gz包,解壓后會得到一個mdout可執行文件

  2. 將軟件移動到可執行文件庫

    打開終端,定位到剛剛下載的文件所在路徑

    cd 你的mdout可執行文件所在文件夾
    

    然后將可執行文件直接移動到/usr/local/bin

    mv ./mdout /usr/local/bin
    
  3. 檢驗是否成功移動

    輸入mdout --version,看到版本號輸出就是成功了

使用說明

使用前提

mdout依賴于chrome瀏覽器,如果你的電腦已經安裝了新版的chrome瀏覽器,無需更多配置,可以直接運行mdout,如果是舊版的chrome瀏覽器,建議進行升級后使用,如果還未安裝chrome瀏覽器,請安裝后再使用mdout

進行系統初始化

如果你不是使用腳本安裝的,或者腳本安裝不完全成功的,需要手動執行初始化,如果腳本安裝成功,則跳過這一步

mdout依賴于html、css、js的模板,但是模板沒有打包進程序,這是出于自定義化的考慮,執行初始化命令,程序會自動下載需要的文件到配置文件路徑,至于這個路徑在哪,在后面會提到,同時初始化程序執行結束后也會輸出這個路徑,請記住這個路徑,在一些自定義和設置默認值時會使用到

mdout install

最簡單的示例

mdout 文件路徑

文件路徑可以是相對路徑

  • 文件在當前目錄

    mdout yourfile.md
    
  • 或文件在上級目錄

    mdout ../yourfile.md
    
  • 文件路徑也可以是絕對路徑

    mdout /tmp/markdown/yourfile.md
    

幫助文檔

每個命令行程序都有幫助文檔,mdout也不例外

mdout -h
mdout --help

輸入文件類型

mdout支持許多輸入類型,其中最普遍的就是markdown,但同樣也支持html輸入,url輸入,但是注意,如果輸入是url,不要忘記帶上http:://

  • markdown

    mdout yourfile.md
    
  • html

    mdout yourfile.html
    
  • url

    mdout http://www.baidu.com
    

輸出文件類型

對于markdown輸入,mdout支持輸出中間過程的結果。但對于html輸入或者url輸入,它們的唯一輸出結果就是pdf文件了

  • markdown輸出pdf(輸出pdf為默認選項)

    mdout youtfile.md -t pdf  
    mdout yourfile.md
    
  • markdown輸出解析后html標簽(這個選項可以得到markdown解析器的解析結果)

    mdout youtfile.md -t tag
    
  • markdown輸出經過處理后的完整html文件(常常用來調試主題)

    mdout youtfile.md -t html
    

輸出路徑

mdout支持指定輸出路徑,輸出文件名

你可以使用-o來指定輸出路徑,-o選項同樣做了防呆設計,你可以指定路徑但不帶文件名,mdout會自動識別你輸入文件的文件名和你指定的輸出類型為你設置名稱,但你同樣可以指定路徑+文件名

  • 指定輸出到上級文件夾,自動命名

    mdout yourfile.md -o ../
    
  • 指定輸出到/tmp/markdown文件夾,自動命名

    mdout yourfile.md -o /tmp/markdown
    
  • 指定輸出到當前文件夾下的badoutput.name

    mdout yourfile.md -o badoutput.name
    

    千萬不要這么干,盡管程序不會阻止你設置你的文件名,但是使用規范的后綴是個好習慣。

  • 指定輸出到當前文件夾下的goodname.pdf

    mdout yourfile.md -o goodname.pdf
    

指定主題

主題系統只對markdown輸入有效

mdout有著方便易用的主題系統,你可以很自由地自定義主題,mdout預設了三套主題

  • 默認主題:default
  • 數學公式拓展主題:mathjax
  • github風格主題:github

你可以使用-e選項來指定主題

  • 指定為github主題

    mdout yourfile.md -e github
    
  • 指定為數學公式拓展主題

    mdout yourfile.md -e mathjax
    

指定主題后上面提到的輸出選項依舊可用,可以配合-t html選項輸出中間的html文件,這樣可以調試主題效果,詳細的說明將在自定義章節中提到

defaultmathjax這兩套主題的配色是一模一樣的,區別在于mathjax是同時支持代碼語法高亮和數學公式渲染的,而default只支持代碼語法高亮

mathjax可以渲染類似這樣的公式

$$\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.$$

我可以將mathjax設為默認主題并刪除default,但是我沒有那么做,因為default可以作為一個能滿足代碼語法高亮的最小模板 (當然你可能不需要代碼語法高亮,這樣的話default并不能算最小模板) ,基于default模板進行自定義主題將變得非常簡單

至于自定義主題的教程,將在后面提到

打印頁面設置

此項僅在輸出pdf時有效

打印頁面大小設置

mdout預設了8種頁面大小,如果有更多需求,可以在issues提出

  • A1 - A5
  • Legal
  • Letter
  • Tabloid

A4為默認輸出頁面大小,你可以使用-f來指定輸出頁面的大小。同時做了防呆設計,如果你一不小心打成了大寫、小寫,甚至你手抽打成了大小寫混合,都是可以正常識別的??上?,防呆不防傻,你把字母都打錯了就不能怪我了

  • 指定輸出pdf頁面格式為A4(閑著沒事干敲著玩)

    mdout yourfile.md -f a4
    
  • 指定輸出pdf頁面格式為Tabloid

    mdout yourfile.md -f tabloid
    

打印頁面方向設置

mdout只支持兩種方向

  • 縱向:portrait
  • 橫向:landscape

默認打印頁面方向為縱向,你可以使用-r指令來指定頁面方向格式

  • 指定輸出pdf頁面格式為橫向

    mdout yourfile.md -r landscape
    

打印頁面邊距設置

mdout支持你自定義頁面邊距,以英寸為單位,默認為0.4英寸

  • 0.4英寸 ≈ 10cm

你可以使用-m指令來指定頁面邊距大小

  • 指定打印邊距為0.2英寸

    mdout yourfile.md -m0.2
    
  • 去除頁面邊距

    mdout yourfile.md -m0
    

自定義配置文件

在配置文件安裝目錄下面

  • macOS : /Users/你的用戶名/binmdout
  • linux: /home/你的用戶名/binmdout
  • windows: /c/users/你的用戶名/binmdout

有一個conf.json文件

{
    
    "Out":"",

    "Type":"pdf",

    "Theme":"default",

    "PageFormat":"a4",

    "PageOrientation":"portrait",

    "PageMargin":"0.4"
    
}

包含了以上所有的可選設置,直接修改配置文件可以作為每次使用mdout的默認參數值

自定義配色

mdout有著簡單易用的主題系統,跟著下面的步驟來,你可以很輕松的添加自己的自定義效果

首先打開你的配置文件所在的文件夾

在你的配置包里面會有一個conf.json文件和theme主題文件夾,其中conf.json文件是用來更改默認參數的,theme存放了你的主題包。

進入theme主題包,你可以看到默認的三個主題包

  • default
  • mathjax
  • github

假設你現在需要自定義你的頁面配色,大小,語法高亮等一切和css有關的內容,并且你想要為你的主題起名為mytheme

首先你需要完整復制default的所有內容,到default文件夾所在的目錄并重命名為mytheme,此時你的theme文件夾里有四個文件夾:

  • default
  • mathjax
  • github
  • mytheme

然后你需要找到一個測試用例比如說這樣一個markdown文件

# 測試標題

## 測試二級標題

### 測試三級標題

#### 測試四級標題

- 測試無序列表1
- 測試無序列表2

1. 測試有序列表1
2. 測試有序列表2

- 測試嵌套
    1. 測試嵌套第二次
        - 測試嵌套第三層


> 測試引用

測試表格

| 標題1 | 標題2 | 標題3 |
| ----- | ---- | ---- |
| 文本1 | 文本2 | 文本3 |
| 文本4 | 文本5 | 文本6 |

**這是加粗的文字**  
*這是傾斜的文字*  
***這是斜體加粗的文字***  
~~這是加刪除線的文字~~

![百度圖片](https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_86d58ae1.png)

[測試超鏈接](https://github.com/JabinGP/mdout)

`測試代碼段高亮`

測試代碼塊高亮

    package main

    import (
        "fmt"
    )

    func main() {
        fmt.Println("Hello Mdout")
    }

緊接著使用mdout yourfile.md -e mytheme -t html來獲取這個markdown文件指定mytheme主題的html輸出結果,用編輯器打開html文件,同時用chrome打開html文件,可以看到,頁面已經自動引入了你剛剛創建的自定義主題包css

<!-- 添加頁面樣式 -->
<link rel="stylesheet" href="/Users/jabin/binmdout/theme/mytheme/css/page.css"/>
<!-- 添加hljs樣式 -->
<link rel="stylesheet" href="/Users/jabin/binmdout/theme/mytheme/css/hljs.css"/>

主題配色分為兩個文件,一個是頁面配色css文件,一個是代碼高亮的css文件

如果你要修改頁面配色,只需要一邊開著瀏覽器,一遍打開剛剛主題包里面的
mytheme->css->page.css修改,然后刷新瀏覽器查看結果

或者你想更改語法高亮的配色,由于mdout依賴于hljs,你只需要去hljs官網下載你喜歡的主題包,然后替換mytheme->css->hljs.css里的內容就可以了

如果你完成了你的主題修改,你可以將剛剛生成的html刪除,或者你想留做自己動手的紀念也是可以的

最后,你可以使用mdout yourfile.md -e mytheme來指定使用你的自定義主題啦,或者你可以在前面提到過的conf.json里面配置默認使用你的mytheme主題

如果覺得對你有幫助,點個star吧!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • Markdown概述 宗旨 Markdown 的目標是實現「易讀易寫」。Markdown 的特點就是,讓寫作變得更...
    心疼你萌萌噠閱讀 7,905評論 1 24
  • 最近遇到一些問題,就是團隊中會有些伙伴踩得坑的收集問題或者有些較為復雜的業務需求文檔共享上成本較高,所以考慮弄...
    tobAlier閱讀 3,915評論 0 5
  • 去年有段時間得空,就把谷歌GAE的API權威指南看了一遍,收獲頗豐,特別是在自己幾乎獨立開發了公司的云數據中心之后...
    騎單車的勛爵閱讀 20,644評論 0 41
  • 喜歡到底是啥呀? 遠遠地、默默地看著他,看他跟別人玩。君君以為那樣就夠了。 聽他講話,聽他講大千世界,聽他胡侃瞎聊...
    念去去兮閱讀 669評論 5 19
  • 綠裙一片托玉蓬 月色迷蒙 心亦迷蒙 荷香千縷繞古城 夜夜聽蛙聲
    梅開如雪閱讀 265評論 0 10