把渲染在web畫面上指定的Dom,轉成一張圖片後下載。在實作上需要使用Html5 Canvas物件(理解成畫布)來繪製指定的Dom,再把Canvas物件轉換成Blob,再轉換成可供瀏覽器觸發下載的ObjectURL格式,並執行觸發下載動作。
lib 1.html2canvas.js 把web畫面上指定的Dom,轉成一個Canvas物件。
1 2 3 4 5 6 7 import html2canvas from "html2canvas" ;html2canvas(instance.refs.targetDom).then((canvas ) => { });
官方doc
2.FileSaver.js 把Canvas物件轉成Blob格式,並呼叫FileSaver的API saveAs。而在SaveAs的實作中,則是把Blob格式轉換成可下載的ObjectURL格式。
1 2 3 4 5 6 7 8 9 import { saveAs } from "file-saver" ;canvas.toBlob((blob ) => { saveAs( blob, `imageName.png` ); });
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 function saveAs (blob, name, opts ) { var URL = _global.URL || _global.webkitURL; var a = document .createElement("a" ); name = name || blob.name || "download" ; a.download = name; a.rel = "noopener" ; if (typeof blob === "string" ) { } else { a.href = URL.createObjectURL(blob); setTimeout (function ( ) { URL.revokeObjectURL(a.href); }, 4e4 ); setTimeout (function ( ) { click(a); }, 0 ); } }
官方doc
實作code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 const isCapturing = ref(false );const generatorImage = () => { isCapturing.value = true ; setTimeout (() => { html2canvas(instance.refs.row2).then((canvas ) => { isCapturing.value = false ; canvas.toBlob((blob ) => { saveAs( blob, `${curDepInfoDateStr.value} ${curDepInfo.value.depName} .png` ); }); }); }, 200 ); };
Blob 二進位大型物件(英語:binary large object ,或英語:basic large object,縮寫為Blob、BLOB、BLOb),在資料庫管理系統中,將二進位資料儲存為一個單一個體的集合。Blob通常是影像、聲音或多媒體檔案。
物件資料轉換關係圖 Image、DataURL、ObjectURL、Blob、Canvas、ImageData、ArrayBuffer、ImageURL。
學習資源聊一聊 15.5K 的 FileSaver,是如何工作的