將html轉換為pdf的工具有兩個:phantomjs和wkhtmltopdf,下面分別對兩個工具進行介紹。
phantomjs
phantomjs不僅僅只是一個html2pdf的工具,這個是一個Headless WebKit(現在chrome也支持這種模式運行了),可以用來寫前端測試等一系列的功能(可惜的是該項目已經停止維護了,項目地址:https://github.com/ariya/phantomjs)。回到主題,phantomjs使用簡單,可以自己編寫相關測輸出腳本,運行的cmd:phantomjs.exe rasterize.js http://www.oschina.net/ test.pdf "A4",可以參考該項目的官方網址:https://phantomjs.org/,比較可惜的是,該項目在window下生成的pdf是很完美的,但是linux下生成的pdf文件就比較糟糕了,主要是dpi惹的禍,直到項目停止維護,該問題都沒有解決。為了解決linux下可以完美渲染,在網上查找了很多資料,最終發現phantomjs的pdf生成功能依賴於另一個項目wkhtmltopdf。
wkhtmltopdf
該項目是一個將html轉化為pdf的項目,項目地址:https://github.com/wkhtmltopdf/wkhtmltopdf,該工具生成pdf非常簡單,cmd:wkhtmltopdf {url} {file} 該工具可以解決linux下生成pdf 的dpi的問題。
需要注意的是,在linux下生成生成pdf很由可能會產生亂碼的問題,主要是linux服務器上缺少字體。可以將window的字體copy到linux的/var/share/fonts文件夾下面然后刷新字體。
//copy font
cd /usr/share/fonts/
mkfontscale
mkfontdir
fc-cache
fc-list :lang=zh
准備工作做完后就可以使用工具將html轉換為pdf了。
ps:wkhtmltopdf比較坑的是,里面有許多的默認選項是開啟的會導致一些無法想象的結果,本人就遇到過--enable-smart-shrinking(默認)導致生成出來的pdf完全走樣的問題。wkhtmltopdf相對於高速發展的互聯網,一些新的技術都沒有很好的支持,制作生成的html頁面時,還是使用比較基礎的技術,盡量使用支持比較完整的規范,減少后面會踩的坑
ps: chrome也提供了headless模式,該模式下也可以進行pdf的生成,