luckysheet源碼里面自帶有打印按鈕,但是功能是無法使用的,所以我把該功能重寫了一遍
1.在menuButton.js文件中找到源碼打印按鈕的觸發事件:
$("#luckysheet-icon-print").click(function () {}
2.使用自己寫的掛載方法
window.printExcel()
3.在自己的前端項目中,將printExcel掛載上去
window.printExcel = this.printExcel
4.編寫我們的導出pdf方法
printExcel(){ // 手動實現全選選區,這樣打印pdf才可以將滾動條沒有展示的內容也一起打印$('#luckysheet-left-top').click();//獲取畫布元素let sourceCanvas = document.getElementById('luckysheetTableContent')// 調用luckysheet提供的api,獲取選區的截圖數據let imgData = window.luckysheet.getScreenshot();// 目標DPI (例如300 DPI)const targetDPI = 300;// 計算從像素到毫米的轉換因子 (1 inch = 25.4 mm, 默認屏幕分辨率為96 DPI)const dpiConversionFactor = targetDPI / 96; // 如果目標是300 DPI,則轉換因子約為3.125// 將canvas的寬高按目標DPI轉換為毫米const pdfWidthMM = (sourceCanvas.width * 25.4) / targetDPI;const pdfHeightMM = (sourceCanvas.height * 25.4) / targetDPI;// 創建 jsPDF 實例const pdf = new jsPDF({orientation: sourceCanvas.width > sourceCanvas.height ? 'l' : 'p', // 根據寬高決定方向unit: 'mm', // 使用毫米作為單位format: [pdfWidthMM * dpiConversionFactor, pdfHeightMM * dpiConversionFactor] // 設置頁面尺寸});// 添加圖片到 PDF 中,注意這里我們需要根據之前設置的 PDF 頁面尺寸來調整圖片尺寸// 使用 getEffectivePageSize 來獲取實際頁面尺寸,因為可能會受到邊距等影響const effectivePageWidth = pdf.internal.pageSize.getWidth();const effectivePageHeight = pdf.internal.pageSize.getHeight();//插入luckysheet內容pdf.addImage(imgData, 'PNG', 0, 0, effectivePageWidth, effectivePageHeight);// 保存 PDF 文檔pdf.save( "導出.pdf");
}
這里我們需要先安裝jsPdf,使用命令行安裝
npm install jspdf --save
然后在指定頁面引入
import {jsPDF} from "jspdf";