介紹好用工具:Pandoc ( 萬用的檔案轉換器 )
由於最近經常用 Markdown 撰寫檔案,而我部落格文章現在也開始改用 Markdown 撰寫,寫習慣了之後,發現真的回不去了。現在的我不用再被難用的 Office Word 奴役,因為它功能太多了,多到有點困擾,每次都會被樣式、段落、章節、自動校正搞得很毛。不過,很多專案再交付檔案的時候,客戶都會要求用 Word 或 PDF 交付,所以最後還是要轉成 non-Markdown 的格式。我最近發現的ofollow,noindex" target="_blank">Pandoc 真的很厲害,可以轉換數十種不同的檔案格式,甚至於產生 EPUB 電子書都可以,功能非常強大!
安裝 Pandoc
完整的安裝檔案可以參考Installing pandoc 說明,這套工具是跨平臺的,所以 Windows, macOS, Linux 都可以安裝。
在 Windows 底下,只要透過Chocolatey 用一行指令就可以安裝完成:
choco install pandoc -y
如果要輸出 PDF 的話,可能還要另外安裝MiKTeX 才能用。不過這套 MiKTeX 預設並沒有內建中文字型,PDF 中無法直接輸出中文字,需要額外設定才能用。所以我不建議使用,如果要輸出 PDF 的話,可以先輸出成 docx 檔案,再用 Word 2016 內建的 PDF 輸出功能產生 PDF 檔案。
開始使用 Pandoc
這套工具只能在命令列模式下執行,所以你可以先用pandoc --version
查詢安裝版本。也可以用pandoc -h
查詢引數說明。完整的說明檔案可以參考Pandoc User’s Guide
使用手冊。
預設 Pandoc 在使用的時候,會自動判斷副檔名來決定轉換格式,所以使用上非常簡單。基本用法如下:
pandoc -o output.html input.md
所以如果你有一個檔名為README.md
的 Markdown 檔案,想轉換成Word
(*.docx
) 格式,就可以用以下命令轉換:
pandoc -o README.docx README.md
由於 Pandoc 也支援 Pipe 的方式輸入,所以你也可以這樣執行:
type README.md | pandoc -o README.docx
cat README.md | pandoc -o README.html
預設 Pandoc 都會把所有檔案輸出為部份檔案
(document fragment),意思也就是說,如果你將 Markdown 輸出為html
格式,它就只會產生HTML
的<body>
內的部份內容而已,不會是完整的一份 HTML 檔案。如果你想輸出一份獨立的檔案,可以加上-s
引數,如下範例:
pandoc -o README.docx -s README.md
指定輸入輸出格式
Pandoc 真正強大的地方,在於他可以自由的轉換格式,還可以對輸入檔案與輸出文件進行微調,產生你想要的檔案格式。
如果你想要指定輸入與輸出格式,可以用-f FORMAT
與-t FORMAT
來設定。例如你想要將Markdown
輸出成EPUB v2
格式的電子書檔案,就可以用以下命令完成檔案格式轉換:
pandoc -f markdown -t epub2 -o README.epub README.md
這種用法,有一個非常強大的能力,就是可以把任意網頁 轉換成任意格式的檔案 !
例如以下命令,就可以將將任意線上的Markdown 檔案轉換成一份Word (docx) 檔案:
pandoc -f markdown -t docx -o CHANGELOG.docx --request-header User-Agent:"Mozilla/5.0" http s://raw.githubusercontent.com/angular/angular/master/CHANGELOG.md
當然,你想要轉換成什麼格式都可以!
更多支援的格式
你可以用pandoc --list-input-formats
查詢所有支援的輸入格式
,如下清單:
-
commonmark
(CommonMark Markdown) -
creole
(Creole 1.0 ) -
docbook
(DocBook ) -
docx
(XML" rel="nofollow,noindex" target="_blank">Word docx ) -
epub
(EPUB ) -
fb2
(FictionBook2 e-book) -
gfm
(GitHub-Flavored Markdown ), or the deprecated and less accuratemarkdown_github
; useonly if you need extensions not supported in. -
haddock
(Haddock markup ) -
html
(HTML ) -
jats
(JATS XML) -
json
(JSON version of native AST) -
latex
(LaTeX ) -
markdown
() -
markdown_mmd
(MultiMarkdown ) -
markdown_phpextra
(PHP Markdown Extra ) -
markdown_strict
(original unextendedMarkdown ) -
mediawiki
(MediaWiki markup ) -
muse
(Muse ) -
native
(native Haskell) -
odt
(ODT ) -
opml
(OPML ) -
org
(Emacs Org mode ) -
rst
(reStructuredText ) -
t2t
(txt2tags ) -
textile
(Textile ) -
tikiwiki
(TikiWiki markup ) -
twiki
(TWiki markup ) -
vimwiki
(Vimwiki )
Extensions can be individually enabled or disabled by appending+EXTENSION
or-EXTENSION
to the format name. Seebelow, for a list of extensions and their names. See--list-input-formats
and--list-extensions
, below.
也可以透過pandoc --list-output-formats
查詢所有支援的輸出格式
,如下清單:
-
asciidoc
(AsciiDoc ) -
beamer
(LaTeX beamer slide show) -
commonmark
(CommonMark Markdown) -
context
(ConTeXt ) -
docbook
ordocbook4
(DocBook 4) -
docbook5
(DocBook 5) -
docx
(Word docx ) -
dokuwiki
(DokuWiki markup ) -
epub
orepub3
(EPUB v3 book) -
epub2
(EPUB v2) -
fb2
(FictionBook2 e-book) -
gfm
(GitHub-Flavored Markdown ), or the deprecated and less accuratemarkdown_github
; useonly if you need extensions not supported in. -
haddock
(Haddock markup ) -
html
orhtml5
(HTML , i.e.HTML5 /XHTMLpolyglot markup ) -
html4
(XHTML 1.0 Transitional) -
icml
(InDesign ICML ) -
jats
(JATS XML) -
json
(JSON version of native AST) -
latex
(LaTeX ) -
man
(groff man ) -
markdown
() -
markdown_mmd
(MultiMarkdown ) -
markdown_phpextra
(PHP Markdown Extra ) -
markdown_strict
(original unextendedMarkdown ) -
mediawiki
(MediaWiki markup ) -
ms
(groff ms ) -
muse
(Muse ), -
native
(native Haskell), -
odt
(OpenOffice text document ) -
opml
(OPML ) -
opendocument
(OpenDocument ) -
org
(Emacs Org mode ) -
plain
(plain text), -
pptx
(PowerPoint slide show) -
rst
(reStructuredText ) -
rtf
(Rich Text Format ) -
texinfo
(GNU Texinfo ) -
textile
(Textile ) -
slideous
(Slideous HTML and JavaScript slide show) -
slidy
(Slidy HTML and JavaScript slide show) -
dzslides
(DZSlides HTML5 + JavaScript slide show), -
revealjs
(reveal.js HTML5 + JavaScript slide show) -
s5
(S5 HTML and JavaScript slide show) -
tei
(TEI Simple ) -
zimwiki
(ZimWiki markup )
※ 請注意:odt
、docx
與epub
這三種檔案型別,必須使用-o
引數指定輸出檔案名稱,其他的檔案型別如果沒加上-o
引數,預設會從stdout
輸出。
無論是輸入格式
或輸出格式
,都可以在格式名稱
後方加上+EXTENSION
或-EXTENSION
來啟用特定 reader 或 writer 的擴充屬性設定,調整輸入或輸出的細節!