最近公司給了個任務医清,差不多的流程就是接受json數(shù)據(jù),然后最后生成圖片售躁。我想的辦法是根據(jù)json數(shù)據(jù)生成html然后轉成pdf预烙。使用的語言是python墨微。然后具體來說使用的工具就是使用python名為pdfkit的庫去調(diào)用基于webkit的wkhtmltopdf。
目前來說html轉pdf最主流的程序就是wkhtmltopdf扁掸,但是坑還是挺多的而且網(wǎng)上資源不是很豐富翘县,所以寫一篇踩坑總結。
##1. 無法讀取本地文件
顯示在html上好好的本地圖片谴分,到了pdf上就讀取不出來锈麸,但是來源于網(wǎng)絡(給一個url)的圖片卻能完美讀出來。
后來發(fā)現(xiàn)牺蹄,原來在上一個版本0.12.5是可以讀取的忘伞,到了0.12.6不能讀取了是因為其中的一個參數(shù)--enable-local-file-access變?yōu)榱朔悄J。在python中改這個參數(shù)的方法是
然后再在后續(xù)調(diào)用wkhtmltopdf中加載這個option(我一開始想的是把value改成True,結果一直報錯氓奈,吐了)
##2. 無法解析latex格式的公式
在html使用了MathJax提供的js去解析latex格式的數(shù)學公式匿刮,在html界面可以完美顯示,但是到了pdf中就解析不了探颈,然后我以為是沒有添加'enable-javascript'的問題。結果加上之后還是不行训措。然后我發(fā)現(xiàn)又有一個參數(shù)叫做'no-stop-slow-scripts'的參數(shù)伪节,可以等到js運行完畢之后再進行pdf的轉化。結果還是不行绩鸣。
然后我就在想會不會js在運行的時候出了什么問題怀大,加上了'debug-javascripts'的參數(shù)。果然發(fā)現(xiàn)在調(diào)用MathJax提供的鏈接的時候發(fā)現(xiàn)這個鏈接已經(jīng)過期了(我也不知道為啥過期了在html界面還能完美展示呀闻。化借。。)捡多,把js里的鏈接換成了
https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-AMS-MML_HTMLorMML
完美解決
##3. 部分css失效
css3中的flex全部失效蓖康,所以大家得換一下!
當時遇到了一個講的很好的博客垒手,給大家分享一下蒜焊,然后再放一個官方文檔的鏈接
博客:http://www.reibang.com/p/4d65857ffe5e
官方文檔:https://wkhtmltopdf.org/usage/wkhtmltopdf.txt