1.下载插件

npm install html2canvas
npm install jspdf

2.创建htmlToPdf.js**

2-1(一页展示所有内容,可避免分页截断)

import html2canvas from "html2canvas";
import JsPDF from "jspdf";
/*** @param  ele          要生成 pdf 的DOM元素(容器)* @param  padfName     PDF文件生成后的文件名字* */
function downloadPDF(ele, pdfName) {let el = document.getElementById(ele); //通过getElementById获取要导出的内容let eleW = el.offsetWidth; // 获得该容器的宽let eleH = el.offsetHeight; // 获得该容器的高let eleOffsetTop = el.offsetTop; // 获得该容器到文档顶部的距离let eleOffsetLeft = el.offsetLeft; // 获得该容器到文档最左的距离var canvas = document.createElement("canvas");var abs = 0;let win_in =document.documentElement.clientWidth || document.body.clientWidth; // 获得当前可视窗口的宽度(不包含滚动条)let win_out = window.innerWidth; // 获得当前窗口的宽度(包含滚动条)if (win_out > win_in) {abs = (win_out - win_in) / 2; // 获得滚动条宽度的一半}canvas.width = eleW * 2; // 将画布宽&&高放大两倍canvas.height = eleH * 2;var context = canvas.getContext("2d");context.scale(2, 2);context.translate(-eleOffsetLeft - abs, -eleOffsetTop);html2canvas(el, {dpi: 96, //分辨率scale: 2, //设置缩放useCORS: true, //允许canvas画布内 可以跨域请求外部链接图片, 允许跨域请求。,//backgroundColor:'#ffffff',这样背景还是黑的bgcolor: "#ffffff", //应该这样写logging: false, //打印日志用的 可以不加默认为false}).then((canvas) => {var contentWidth = canvas.width;var contentHeight = canvas.height;let pageData = canvas.toDataURL("image/jpeg", 1.0);let pdfX = ((contentWidth + 10) / 2) * 0.75;let pdfY = ((contentHeight + 20) / 2) * 0.75;let imgX = pdfX;let imgY = (contentHeight / 2) * 0.75;var pdf = new JsPDF("", "pt", [pdfX, pdfY]);pdf.addImage(pageData, "JPEG", 0, 0, imgX, imgY);//可动态生成pdf.save(pdfName);});
}
export default {downloadPDF,
};

2.2(分页,不可避免截断情况)

import html2canvas from 'html2canvas';
import JsPDF from 'jspdf';
function downloadPDF(ele, pdfName){let el=document.getElementById(ele)  //通过getElementById获取要导出的内容let eleW = el.offsetWidth;// 获得该容器的宽let eleH = el.offsetHeight;// 获得该容器的高let eleOffsetTop = el.offsetTop;  // 获得该容器到文档顶部的距离let eleOffsetLeft = el.offsetLeft; // 获得该容器到文档最左的距离var canvas = document.createElement("canvas");var abs = 0;let win_in = document.documentElement.clientWidth || document.body.clientWidth; // 获得当前可视窗口的宽度(不包含滚动条)let win_out = window.innerWidth; // 获得当前窗口的宽度(包含滚动条)if(win_out>win_in){abs = (win_out - win_in)/2;    // 获得滚动条宽度的一半}canvas.width = eleW * 2;    // 将画布宽&&高放大两倍canvas.height = eleH * 2;var context = canvas.getContext("2d");context.scale(2, 2);context.translate(-eleOffsetLeft -abs, -eleOffsetTop);html2canvas( el, {dpi: 96,     //分辨率scale: 2,    //设置缩放useCORS:true,  //允许canvas画布内 可以跨域请求外部链接图片, 允许跨域请求。,//backgroundColor:'#ffffff',这样背景还是黑的bgcolor :'#ffffff',//应该这样写logging:false   //打印日志用的 可以不加默认为false} ).then( (canvas)=>{// el.setAttribute("crossOrigin",'anonymous');var contentWidth = canvas.width;var contentHeight = canvas.height;//一页pdf显示html页面生成的canvas高度;var pageHeight = contentWidth / 592.28 * 841.89;//未生成pdf的html页面高度var leftHeight = contentHeight;//页面偏移var position = 0;//a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高var imgWidth = 595.28;var imgHeight = 595.28/contentWidth * contentHeight;let pageData = canvas.toDataURL('image/jpeg', 1.0);var pdf = new JsPDF('', 'pt', 'a4');if (leftHeight < pageHeight) {//在pdf.addImage(pageData, 'JPEG', 左,上,宽度,高度)设置在pdf中显示;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();}}}//可动态生成pdf.save(pdfName);})
}
export default {downloadPDF
}

3.使用

import htmlToPdf from "../util/htmlToPdf";exportPdf() {//view_summary 节点名称,aaa  pdf文件名htmlToPdf.downloadPDF("view_summary", aaa);},

前端vue导出pdf相关推荐

  1. 前端vue实现pdf文件的在线预览

    3.前端vue实现pdf文件的在线预览 我是通过 <iframe> 标签就可以满足我工作的 pdf预览需求 如果<iframe> 无法满足需求 , 可以使用pdf.js这个插件 ...

  2. vue 导出PDF格式

    1.npm安装两个模块 cnpm install --save html2canvas // 将页面html转换成图片 cnpm install jspdf --save // 将图片生成pdf 2. ...

  3. jsPdf+html2Canvas+react实现前端页面导出pdf,并解决jspdf分页图片过长截断问题

    第一步 在utils下面创建一个工具文件exportPDF.js 以下每一句代码都有对应的注释,并且针对不同情况,作出了相应的解释,如果有需要的话,请耐心看完. import html2Canvas ...

  4. 前端vue导出Excel(多sheet)

    场景: 当导出文件的时候遇到结构复杂的表格(如:表头合并):或者数据分页的时候,后端就很难操作了,难以保持表格原有结构.所以就需要前端导出. 步骤如下: 1.组装数据 2.标记表头合并项,计算合并项 ...

  5. 看大神如何使用vue导出pdf

    前端pdf https://blog.csdn.net/qq_37880968/article/details/94626001

  6. 纯前端 vue 导出excel 这里用 vue-json-excel插件

    1.npm安装依赖 npm install vue-json-excel 2.项目主文件入口main.js全局引入 import JsonExcel from 'vue-json-excel'Vue. ...

  7. 前端vue导出 xlsx 实现带标题 内容居中 自动换行 合并单元格 加边框 合计 字体大小设置等

    1.在src下的libs文件夹下新建一个excel文件夹,里面放入下载好的两个文件(Blob.js和Export2Excel2.js) 2.在所需要导出的vue文件里引入: import { toEx ...

  8. vue导出pdf文件

    根据页面的布局去导出,比如字体,字号,颜色,段落间距等,需要用css去设计好,然后去导出,但是导出的是按a4纸的尺寸导出的,所以细节需要不断的去优化. 页面效果 把页面dom元素,模拟成一张画布,然后 ...

  9. 基于公司需求的探索vue导出word、xls、pdf

    技术的应用而生都是基于需求!崇尚技术积累经验! 如何运用开源js库来实现需求,是快速开发的目的!结合自己开发功能的经历来说!使用插件能更好的的解决解决交互的平滑顺畅!由于项目时间限制,只能采用开源的j ...

最新文章

  1. iar定义arm版本_IAR Systems发布 IAR Embedded Workbench for ARM新版本
  2. 苹果损失超 1000 万美元,前员工被控收回扣、盗窃、欺诈!
  3. VS2010-MFC(常用控件:静态文本框)
  4. Machine Learning之Python篇(二)
  5. 计算机及其配件和参数知识科普
  6. java栅格法全局路径规划,基于A*的全局路径规划算法(1)
  7. Nginx(一)-- 初体验
  8. 应用随机过程张波商豪_学术简报五相逆变器非正弦双随机空间矢量脉宽调制策略...
  9. poj 1062 昂贵的聘礼 最短路
  10. 3.4 haas506 2.0开发教程-example-ads1115
  11. web网页设计期末课程大作业~超高仿英雄联盟LOL游戏官网设计与实现(HTML+CSS+JavaScript)
  12. 阅读笔记:利用Python进行数据分析第2版——第10章 数据聚合与分组运算
  13. 西门子博图自动定时加密程序+HMI程序,可以设定定时运行时间
  14. 深度学习各指标计算(Jaccard,Dice,Sensitive,Specificity,PPv,NPV,Accuracy)
  15. 华为S5700_交换机_基础管理配置
  16. 20201114-三轴云台storm32 BGC HAKRC调试+
  17. Worktile 中百万级实时消息推送服务的实现
  18. MemSQL、SQLFire、Oracle XE性能对比测试
  19. Java图片处理 - 创建工具类
  20. 【AntdVue】下拉选择框乱回弹问题

热门文章

  1. Transformer解读
  2. 空间滤波-统计排序滤波器
  3. android 修改呼出号码,在android中监听呼出电话(电话拦截、修改呼出电话)
  4. 2021年河南省高考成绩位次查询,2021年河南省高考报名人数、录取分数线、录取率及河南省最好大学排名统计[图]...
  5. mysql更新前100条_mysql前100条数据库
  6. 作品更新之FAR CARE APP-ESG设计考量
  7. bjtuOJ1018 Campus Singing Competition
  8. rc振荡器振荡频率计算_微控制器中的振荡器频率
  9. c4d怎么导入fbx_c4d场景中怎么导入其他模型
  10. 基于ShardingSphere分库分表