Latex格式html文件轉換pdf和docx文檔

原文地址-石匠的Blog: http://www.bugclosed.com/post/2css

最近有需求將包含latex格式的html文檔轉換成pdf和docx文檔的需求,因爲以前徹底沒接觸過,最近幾天調研和實驗了一番後將格式轉換的關鍵點都實驗成功,總結記錄一下。html

轉換原理node

各類轉換工具對比以後選擇了號稱「格式轉換瑞士軍刀」的pandoc,pandoc功能強大且開源,從官方說明文檔就知道多厲害了。linux

因爲歷史緣由,須要轉換的html格式文件比較複雜,直接用pandoc轉換到docx,有極少數格式會出問題,致使轉換後的docx文件打開會提示格式錯誤。最後研究發現mathjax對各類格式的兼容處理比較強大,採用mathjax將原始latex文件轉換成mml格式後,再給到pandoc轉換docx就能夠了。centos

mathjax轉換部分找同事搭建了一個node.js服務提供轉換接口和css控制,只須要調用接口將原始latex數據轉換成mml格式,再講轉換後的格式替換掉原始html文件中的latex部分,最終生成包含mml格式的html文件。markdown

環境搭建curl

轉換環境包括:工具

  • mathjax node.js服務
  • pandoc
  • TeX Live
  • stack工具(Haskell Platform)

mathjax服務是用來將原始html文件轉換成mml格式(若是你面對的latex格式並不複雜且很標準,那麼不須要這部分,直接用pandoc處理問題也不大),咱們這裏須要mathjax處理是由於咱們有遇到各類奇怪的latex格式,且pandoc對latex格式判斷比較嚴格,經過兼容性較好的mathjax處理一遍後有明顯效果。
pandoc是最終用來作格式轉換的工具,爲了安裝pandoc,須要用到Haskell環境,所以須要安裝stack來部署和管理整個Haskell。
pandoc不提供docx到pdf的直接轉換,只能採用mml到pdf的轉換方式,可是須要額外的latex轉換引擎支持才能作到,pandoc官方推薦使用TexLive。post

TexLive安裝
首先下載安裝包
解壓後執行install-tl按照提示輸入I進行安裝,通過漫長下載等待後完成。安裝成功後xelatex可執行程序目錄在/usr/local/texlive/2016/bin/x86_64-linux/ ,須要記得將這個目錄加入到PATH環境變量中。字體

pandoc安裝
我是選擇源碼安裝方式,本身下載了pandoc-1.19.2
先安裝Stack工具:

curl -sSL https://get.haskellstack.org/ | sh

按照pandoc安裝說明文檔,切換到pandoc解壓目錄,執行:

stack setup
stack install --test

安裝成功後,須要注意pandoc可執行文件默認放到了/root/.local/bin,須要修改PATH環境變量才能找到。

轉換命令

轉換到docx的命令以下:

pandoc -s --mathml filename.mml -o output.docx

轉換到pdf的命令以下:

pandoc --latex-engine=xelatex filename.html -o output.pdf

還有不少其餘pandoc轉換命令和兼容格式,具體參考官方文檔。

轉換結果示例:
clipboard.png

轉換pdf中文編碼處理

pandoc默認轉換到pdf的時候,中文處理會有問題,顯示不出來,須要添加字體支持。

pandoc -s old.html.html --latex-engine=xelatex -V mainfont=SimHei -o 20.pdf

上述命令指定用黑體轉換中文,經過mainfont參數指定中文字體,可是前提是你的系統裏面已經安裝了相關的中文字體支持,我在centos安裝中文,採用了這個連接的方法。查看系統支持的字體命令是 fc-list。

從word中提取latex公式

一樣能夠經過pandoc將word中的latex提取出來,具體作法就是將pandoc轉換爲markdown格式以後就能夠寫程序匹配出latex公式數據($$之間的部分)

pandoc -s aaa.docx -t markdown -o aaa.md
相關文章
相關標籤/搜索