最近在做將html渲染的界面導出為圖片或者pdf文件
實現思路有三(另外還有需要后台配合的,沒有研究就不寫了):
一:用系統或者聊天工具的截屏功能,這和代碼就沒關系了,但優點是不需要前端任何操作,也不需要后台任何配合;
二:用插件html2canvas庫,優點是不需要后端配合;
三:也是插件dom-to-image,和方式二一樣不需要后台操作;
其中dom-to-image不支持ie和edge瀏覽器,但效率要比html2canvas高一丟丟,bug也少,但就因為不兼容edge或者是因為bug少搜索到的信息也較少,要不是項目必須兼容edge我就用它了!
html2canvas的bug多:什么導出是空白了,丟失dom了,頁面卡死了,問題太多了:
現在就來細數html2canvas的缺陷:
1. 導出會空白偶爾出現,還沒處理,有空再說;
2. 丟失dom,導出的圖片缺少一些頁碼信息:追蹤下發現a標簽包裹的文本內容導出來就丟失,那有啥辦法,替換標簽唄,替換成span標簽然后把樣式搞過去就o了;
3. 頁面卡死:本來項目就大,插件里邊還遞歸dom樹copy節點,所以變得非常卡,谷歌和火狐瀏覽器導出一個界面需要4-6秒,edge導出一個界面需要6-8分鍾,所以給用戶的感覺就是我的edge咋卡死了?這個也還沒解決;
4. 然后是導出界面模糊,網上也有很多解決方式,但這些方式只是給了個思路,你要是不看版本直接copy就會發現:圖片是清晰了,但怎么不全了?或者是空白了一大片!下面細說下解決思路:
a.轉化時候傳入配置參數,新建一個canvas的dom對象,對象放大兩倍,然后還有個配置參數叫sacle就是縮放比例,這個縮放比例默認會按照瀏覽器的像素密度去執行,當然你也可以指定,例如現在就指定為2,
b.剛好畫布放大兩倍,縮放也是2,導出的圖片就剛剛好不留白也不缺失;
c. 具體代碼就不粘了,還是那句話,用任何第三方的東西,就去看人家的文檔,別網上瞎幾把搜,文檔解決不了了就去看源碼,網上搜不算好漢!
接下來沾幾個我試了但不行的解決方案:
1. 這個dpi這個配置項都已經廢棄了,傳了也沒用,這個方案的及俄國是截取的圖片只有1/4,
2.沒找到,就是這個作者寫的時候應該還不支持promise,你能直接copy過來用?
假裝是圖片
over!