日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

html2canvas实现网页局部存为图片和打印

發(fā)布時(shí)間:2024/3/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html2canvas实现网页局部存为图片和打印 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.html2canvas.js簡介

html2canvas.js具體來說是一個(gè)腳本或者js插件, 該腳本允許您直接在用戶瀏覽器上截取網(wǎng)頁或部分網(wǎng)頁的“內(nèi)容截圖”。該腳本是基于DOM進(jìn)行渲染的,所以只支持大部分的css特效,還有就是不支持跨域顯示資源或者顯示frame框架內(nèi)容等。局限還是挺大的,但是用于普通的頁面(dom)截圖真的是太方便了。
2. 引入html2canvas.js

用插件,當(dāng)然最便捷的就是使用CDN了。下面是各個(gè)版本html2canvas.js的CDN引入地址,點(diǎn)擊進(jìn)去即可獲得,如果不會引入的請留言。
https://www.bootcdn.cn/html2canvas/
如果想要直接下載插件的,請?jiān)L問如下鏈接。
http://html2canvas.hertzen.com/
鼠標(biāo)選中插件右鍵另存為就好了。不會本地引入的就請勿留言了。
3. 使用html2canvas截圖

最近有需要,做一個(gè)電子病歷截圖下載下來。
如下圖,紅色圈圈圈起來的部分是要下載的內(nèi)容。

截圖的內(nèi)容如下。

最主要的DOM結(jié)構(gòu)如下:

<body> <div class='person-info'> 左邊的用戶信息欄 </div> <div class='record-info' id='record'> 右邊的病歷欄 </div> </body>

既然是基于DOM的,那么我們需要的就是需要截圖部分最外層的DOM。
先引入插件

<script src="js/html2canvas.js"></script>

然后是截圖

new html2canvas(document.getElementById('record'), {backgroundColor: "transparent", //png圖片透明allowTaint: true, // 顯示圖片useCORS: true //允許跨域}).then(canvas => {// canvas為轉(zhuǎn)換后的Canvas對象let oImg = new Image();oImg.src = canvas.toDataURL(); // 導(dǎo)出圖片$("img").attr("src",oImg.src);});

這里我將img標(biāo)簽地址執(zhí)行了src屬性賦值為截圖地址,通過追蹤發(fā)現(xiàn),src是base64編碼后的數(shù)據(jù),

圖片src指向了如圖所示大的一大串字符。這一大串字符就是圖片通過base64編碼后的圖片數(shù)據(jù)。這里使用截圖就是用img標(biāo)簽將截圖顯示出來,由此可見,截圖效果還可以,這也是以為我截圖的內(nèi)容基本都是純dom結(jié)構(gòu)渲染的。

4.下載截圖
下載截圖相對于來說就簡單得多了

// canvas為轉(zhuǎn)換后的Canvas對象let oImg = new Image(); oImg.src = canvas.toDataURL(); // 導(dǎo)出圖片 // document.body.appendChild(oImg); // 將生成的圖片添加到body $("img").attr("src",oImg.src); var alink = document.createElement("a"); alink.setAttribute("download","下載.png"); alink.href = oImg.src; alink.click();

就是創(chuàng)建一個(gè)a標(biāo)簽,其href指向圖片地址,設(shè)置其download屬性值為你想要保存的圖片名字,這樣就可以了。建議圖片保存格式為png,至于為啥不是jpg,你自己去研究了。
如果這里無法下載的請留言。

5.局部打印
首先,如果是要打印html2canvas所截取下來的圖片,方案是新打開一個(gè)窗口,將圖片的src傳遞過去,并設(shè)置為body的背景圖片。然后調(diào)用window自帶的打印功能進(jìn)行打印。但是,這里打印的是圖片,所以如果是黑白印刷的話容易出現(xiàn)問題。
于是,采用第二種方案,將要打印部分dom提取出來,然后打開新的瀏覽器窗口,將提取出來的dom結(jié)構(gòu)寫入,然后再執(zhí)行打印操作。

var newstr = document.getElementById("record").innerHTML; printWindow = window.open(); printWindow.document.write(newstr); printWindow.print();

執(zhí)行結(jié)果如下圖所示

這里之所以沒有背景色,是因?yàn)槲野驯尘吧腸ss提取出來了。值得注意的是,使用這種方法時(shí),得將css寫在標(biāo)簽內(nèi)部,獨(dú)立出來的css是不能通過這種方法表現(xiàn)出來的。因?yàn)樵佾@取dom時(shí)無法獲取到其引用的css樣式。


如果大家有更好的方法解決網(wǎng)頁局部截圖的問題,希望能分享出來,我想用更好的東西。

總結(jié)

以上是生活随笔為你收集整理的html2canvas实现网页局部存为图片和打印的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。