当前位置: 首页 > news >正文

43、vue导出pdf文件,并解决滚动条外内容无法获取的问题

使用插件html2canvas和jspdf插件

下载完两个插件后引入所需要的页面
import html2canvas from "html2canvas"
import jsPDF from "jspdf"

1、在导出之前将元素的高度或者宽度设置为滚动高度或者宽度,如:

el.style.height = el.scrollHeight + 'px';//把要导出的元素高度设置为滚动高度

2、转为图片之后再将高度/宽度设回来

//下载完成后改变浏览器界面可视区域高度
el.style.height = el.clientHeight+ 'px'

以下导出pdf方法

// 导出页面为PDF格式---使用插件html2canvas和jspdf插件
export function exportPDF(titleName, id) {document.body.scrollTop = document.documentElement.scrollTop = 0;let el = document.querySelector("#my_table_1");var clientH = el.clientHeight;el.style.height = el.scrollHeight + 'px';//把要导出的元素高度设置为滚动高度html2canvas(el, {allowTaint: true,useCORS: true,dpi: 120, // 图片清晰度问题background: "#142D42", //如果指定的div没有设置背景色会默认成黑色,这里是个坑y: 0}).then((canvas) => {var currentPage = 1;//未生成pdf的html页面高度var leftHeight = canvas.height;var a4Width = 576;var a4Height = 772.89; //A4大小,210mm x 297mm,四边各保留10mm的边距,显示区域190x277//一页pdf显示html页面生成的canvas高度;var a4HeightRef = Math.floor((canvas.width / a4Width) * a4Height);//pdf页面偏移var position = 0;var pageData = canvas.toDataURL("image/jpeg", 1.0);var pdf = new jsPDF("p", "pt", "a4"); //A4纸,纵向pdf.addFont('simkai-normal.ttf', 'simkai', 'normal')pdf.setFont('simkai')pdf.setFontSize(20)var index = 1,canvas1 = document.createElement("canvas"),height;pdf.setDisplayMode("fullwidth", "continuous", "FullScreen");function createImpl(canvas) {if (leftHeight > 0) {index++;var checkCount = 0;if (leftHeight > a4HeightRef) {var i = position + a4HeightRef;for (i = position + a4HeightRef; i >= position; i--) {var isWrite = true;for (var j = 0; j < canvas.width; j++) {var c = canvas.getContext("2d").getImageData(j, i, 1, 1).data;if (c[0] != 0xff || c[1] != 0xff || c[2] != 0xff) {isWrite = false;break;}}if (isWrite) {checkCount++;if (checkCount >= 10) {break;}} else {checkCount = 0;}}height =Math.round(i - position) || Math.min(leftHeight, a4HeightRef);if (height <= 0) {height = a4HeightRef;}} else {height = leftHeight;}canvas1.width = canvas.width;canvas1.height = height;var ctx = canvas1.getContext("2d");ctx.drawImage(canvas,0,position,canvas.width,height,0,0,canvas.width,height);var pageHeight = Math.round((a4Width / canvas.width) * height);if (position != 0) {pdf.addPage();}pdf.addImage(canvas1.toDataURL("image/jpeg", 1.0),"JPEG",10,40,a4Width,(a4Width / canvas1.width) * height);leftHeight -= height;position += height;if (leftHeight > 0) {setTimeout(createImpl, 500, canvas);} else {pdf.save(titleName + ".pdf");//下载完成后改变浏览器界面可视区域高度el.style.height = clientH + 'px'}}}let targetPage = pdf.internal.getNumberOfPages();//当内容未超过pdf一页显示的范围,无需分页if (leftHeight < a4HeightRef) {pdf.addImage(pageData,"JPEG",10,40,a4Width,(a4Width / canvas.width) * leftHeight);pdf.save(titleName + ".pdf");//下载完成后改变浏览器界面可视区域高度el.style.height = clientH + 'px'} else {try {pdf.deletePage(0);setTimeout(createImpl, 500, canvas);} catch (err) {}}})
}

vue页面使用

//导出pdf------ 数据统计汇总为导出文件名称;my_table_1为要导出的dom元素idexportData(){exportPDF("数据统计汇总",'my_table_1');},
http://www.lryc.cn/news/240512.html

相关文章:

  • 牛客 最小公配数 golang版实现
  • 用 HLS 实现 UART
  • 华清远见嵌入式学习——网络编程——作业4
  • 【OpenCV实现图像:制作酷炫的动画效果】
  • CSS鼠标属性篇
  • 交直流一体化电源系统测试步骤详解
  • 多数据库使用django-apscheduler时,migrate后并不能生成django_apscheduler_djangojob表的问题
  • SPS简单对应分析
  • 智能井盖传感器建设信息化时代智慧城市
  • 安装向量数据库milvus及其Attu
  • 量子计算概述
  • 校园圈子论坛,交友,帖子内短视频,二手市场,APP小程序H5三端交付,源码交付,支持二开
  • Request 爬虫的 SSL 连接问题深度解析
  • gin相关操作--一起学习921190764
  • Linux查看开机启动的服务
  • 微信小程序如何使用scss,less
  • 2024东北师范大学计算机考研分析
  • MFC中窗口居中显示
  • Ajax基础(应用场景|jquery实现Ajax|注意事项|Ajax发送json数据|Ajax携带文件数据)
  • Kubernetes(k8s)之Pod详解
  • redis非关系型数据库(缓存型数据库)——中间件
  • Android 9.0 隐藏设置显示中自动调节亮度
  • 2020年计网408
  • 手把手教你编写LoadRunner脚本
  • 2311rust,到74版本更新
  • Web项目从Tomcat迁移到TongWeb
  • Polygon Miden VM架构总览
  • ultralytics yolov8 实例分割 训练自有数据集
  • linux之进程地址空间
  • Cloud微服务