前端项目实战127-JsPDF转化pdf进行打印

简介: 前端项目实战127-JsPDF转化pdf进行打印
import JsPDF from 'jspdf';
const handlePrint = (id: any, isPrint: any) => {
        const dom: HTMLElement | null = document.getElementById(id);
        // let targetDom: any = pdfs.current;
        // 获取节点高度,后面为克隆节点设置高度。
        // let height = targetDom?.height;
        // // 克隆节点,默认为false,不复制方法属性,为true是全部复制。
        // let cloneDom = targetDom?.cloneNode(true);
        // // 设置克隆节点的css属性,因为之前的层级为0,我们只需要比被克隆的节点层级低即可。
        // cloneDom.style.backgroundColor = 'red';
        // cloneDom.style.position = 'absolute';
        // cloneDom.style.top = '0px';
        // cloneDom.style.index = '-1';
        // cloneDom.style.height = height;
        // // 将克隆节点动态追加到body后面。
        // document.getElementById('pdf-con')?.appendChild(cloneDom);
        // 插件生成base64img图片。
        html2canvas(dom as HTMLElement, {
            useCORS: true,
            // 画布开始渲染的y坐标位置
            y: 0
        }).then((canvas) => {
            // console.log('canvas', canvas);
            let contentWidth = canvas.width;
            let contentHeight = canvas.height;
            // 一页pdf显示html页面生成的canvas高度;
            let pageHeight = (contentWidth / 700) * 841.89;
            // 未生成pdf的html页面高度
            let leftHeight = contentHeight;
            // 页面偏移
            let position = 0;
            // a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
            let imgWidth = 700;
            let imgHeight = (700 / contentWidth) * contentHeight;
            let pageData = canvas.toDataURL('image/jpeg', 1.0);
            let pdf = new JsPDF(undefined, 'pt', 'a4');
            // 有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
            // 当内容未超过pdf一页显示的范围,无需分页
            console.log(pageHeight,leftHeight,imgWidth,imgHeight,"less")
            if (leftHeight < pageHeight) {
                pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);
            } else {
                while (leftHeight > 0) {
                    pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight);
                    leftHeight -= pageHeight;
                    // 避免添加空白页
                    position -= 841.89;
                    if (leftHeight > 0) {
                        pdf.addPage();
                    }
                }
            }
            let nowDate = moment(new Date()).format('YYYY-MM-DD');
            if (isPrint) {
                //打印
                pdf.autoPrint();
                pdf.output('dataurlnewwindow');
                setLoading(false)
            } else {
                //下载
                pdf.save('发货单-' + nowDate + '.pdf');
                setLoading(false)
            }
        });
    };
相关文章
|
23天前
|
存储 前端开发 JavaScript
前端状态管理:Vuex 核心概念与实战
Vuex 是 Vue.js 应用程序的状态管理模式和库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。本教程将深入讲解 Vuex 的核心概念,如 State、Getter、Mutation 和 Action,并通过实战案例帮助开发者掌握在项目中有效使用 Vuex 的技巧。
|
1月前
|
Web App开发 缓存 监控
前端性能优化实战:从代码到部署的全面策略
前端性能优化实战:从代码到部署的全面策略
31 1
|
1月前
|
Web App开发 前端开发 JavaScript
前端性能优化实战:从代码到部署的全面指南
前端性能优化实战:从代码到部署的全面指南
35 1
|
1月前
|
缓存 前端开发 搜索推荐
前端性能优化实战:提升网页加载速度
前端性能优化实战:提升网页加载速度
|
1月前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
68 2
|
1月前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
47 2
|
1月前
|
前端开发 JavaScript
除了 jsPDF,还有哪些前端库可以用于生成 PDF?
【10月更文挑战第21天】这些前端库都有各自的特点和优势,你可以根据具体的项目需求、技术栈以及对功能的要求来选择合适的库。不同的库在使用方法、性能表现以及功能支持上可能会有所差异,需要根据实际情况进行评估和选择。
|
1月前
|
前端开发 API
前端界面生成PDF并导出下载
【10月更文挑战第21天】利用合适的第三方库,你可以在前端轻松实现界面生成 PDF 并导出下载的功能,为用户提供更方便的文档分享和保存方式。你还可以根据具体的需求进一步优化和定制生成的 PDF 文件,以满足不同的业务场景要求。
|
2月前
|
人工智能 资源调度 数据可视化
【AI应用落地实战】智能文档处理本地部署——可视化文档解析前端TextIn ParseX实践
2024长沙·中国1024程序员节以“智能应用新生态”为主题,吸引了众多技术大咖。合合信息展示了“智能文档处理百宝箱”的三大工具:可视化文档解析前端TextIn ParseX、向量化acge-embedding模型和文档解析测评工具markdown_tester,助力智能文档处理与知识管理。
|
2月前
|
存储 缓存 算法
前端算法:优化与实战技巧的深度探索
【10月更文挑战第21天】前端算法:优化与实战技巧的深度探索
31 1