小程序开发|小程序制作|小程序开发网

搜索

前端界面生成PDF并导出下载

2023-3-15 22:12| 发布者: 梅西| 查看: 312| 评论: 0

摘要: 最近,公司后台管理系统有个项目需求,将前端定义好的界面导出PDF文档。我查阅很多文档,发现可以使用html2canvas、jspdf来完成。也可以通过jspdf来绘画PDF文档思路: 通过 html2canvas 将 HTML 页面转换成图片,然

最近,公司后台管理系统有个项目需求,将前端定义好的界面导出PDF文档。我查阅很多文档,发现可以使用html2canvas、jspdf来完成。也可以通过jspdf来绘画PDF文档

思路: 通过 html2canvas 将 HTML 页面转换成图片,然后再通过 jspdf 将图片的 base64 生成为 pdf 文件

1、安装
npm install html2canvas --save npm install jspdf --save
2、html2Canvas

文档:http://html2canvas.hertzen.com/configuration

其中,文档中还缺少dpi,dpi就是像素的意思,dpi的值越大,证明图片约清晰,我这里选择的是300

注意事项:界面隐藏、透明度为0都不能够截图成功

3、jspdf

文档:https://www.freesion.com/article/97121153598/
https://parall.ax/products/jspdf
https://www.hangge.com/blog/cache/detail_2205.html

每个文档介绍的不是很全面,所以,需要几个文档对比观看下

4、代码展示
import html2Canvas from 'html2canvas'import JsPDF from 'jspdf'export const getPdf = (title) =>{    return new Promise(resolve => {        html2Canvas(document.querySelector('#resultsHuiZongTableId'), {            allowTaint: false,            useCORS: true, // allowTaint、useCORS只能够出现一个            imageTimeout: 0,            dpi: 300,  // 像素            scale: 4,  // 图片大小        }).then(function (canvas) {            // document.body.appendChild(canvas)            // 用于将canvas对象转换为base64位编码            let pageData = canvas.toDataURL('image/jpeg', 1.0),                canvasWidth = canvas.width,                canvasHeight = canvas.height,                concentWidth = 500,                concentHeight = Math.round((concentWidth / canvasWidth) * canvasHeight),                position = 72,                pageHeight = 892,                height = concentHeight            console.log(height, pageHeight)            // 新建一个new JsPDF,A3的像素大小 842*1191,A4的像素大小 592*841。这个px像素不准确,不清楚他们的像素大小来源如何            let PDF = new JsPDF('p', 'px', 'a3')            if (height <= pageHeight) {                // 添加图片                PDF.addImage(pageData, 'JPEG', 68, position, concentWidth, concentHeight)            } else {                while (height > 0) {                    PDF.addImage(pageData, 'JPEG', 68, position, concentWidth, concentHeight)                    height -= pageHeight                    position -= pageHeight                    if (height > 0) {                        PDF.addPage()                    }                }            }            // 保存 pdf 文档            PDF.save(`${title}.pdf`)            resolve(true)        })    })}

隐藏了部分敏感信息

欢迎大家点赞、收藏,评论一起讨论


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部