luckysheet的使用——17.将表格作为pdf下载到本地

luckysheet源码里面自带有打印按钮,但是功能是无法使用的,所以我把该功能重写了一遍

1.在menuButton.js文件中找到源码打印按钮的触发事件:

bash 复制代码
$("#luckysheet-icon-print").click(function () {}

2.使用自己写的挂载方法

bash 复制代码
window.printExcel()

3.在自己的前端项目中,将printExcel挂载上去

bash 复制代码
window.printExcel = this.printExcel

4.编写我们的导出pdf方法

bash 复制代码
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,使用命令行安装

bash 复制代码
npm install jspdf --save

然后在指定页面引入

bash 复制代码
import {jsPDF} from "jspdf";
相关推荐
风骏时光牛马2 小时前
生成一个移动端标题,只需要一个标题,不需要其他的任何文本。
前端
IT_陈寒2 小时前
Redis雪崩把我坑惨了,这是5年经验的教训
前端·人工智能·后端
SameX3 小时前
HarmonyOS ArkUI List 的侧滑删除 用 ListItem 的 swipeAction + endIcon 的做法
前端
usdoc文档预览5 小时前
USDOC系列之PPT文件在线编辑-VUE前端实现在线浏览器在线编辑PPT文档
前端·vue.js·编辑器·office365·ppt在线编辑·office文件在线编辑·文件在线编辑
Java小卷5 小时前
面向 schema 编程,轻松搞定 Element 虚拟化表格复杂应用场景
vue.js·低代码·element
用户2705077725245 小时前
Agent 调工具卡住?3 种超时与取消策略实测对比
前端
联犀5 小时前
纯 Go 的 CAD 开源库 go-cad:直接解析 DWG/DXF,现在也能导出 PDF
开发语言·golang·pdf
LuHang6 小时前
我一行代码没写,把领导派的活做成了公司内部系统😭
前端
明月_清风6 小时前
Meta 开源了一个 AI Native 组件库:Astryx,150+ React 组件,专为 AI Agent 而设计
前端·人工智能·ai编程
afumu6 小时前
把五个网页版 AI 拉进同一个群聊:不用 API key 的多 Agent 编排
人工智能·chrome·typescript