vue导出少量pdf文件实现示例详解

 更新时间:2023年06月30日 14:31:28   作者:陶菇凉  
这篇文章主要为大家介绍了vue导出少量pdf文件实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

创建js文件 exportPdf.js

且需要安装html2canvas和jspdf两个插件;

然后将在你需要导出的页面中执行方法,

this.getPdf("html", "报表");
//参数一:导出范围的id
//参数二:导出pdf文件的名称

导出的主要代码

我在网上查找了大量的代码才写出了这个,其他的代码都是很浅显,虽然也可以导出,但是一旦数据量过大,页面较长导出的pdf文件便会白屏;

此文件解决了此问题,但是因为导出的pdf做了分页,而pdf又是由图片转换而来,所以分页中会有截断的问题,暂未解决,希望大家可以指点。

/* 导出pdf文档 */
import html2Canvas from "html2canvas";
import JsPDF from "jspdf";
export default {
 install(Vue, options) {
   Vue.prototype.getPdf = function (id, title) {
     const loading = Vue.prototype.$loading({
       fullscreen: true,
       lock: true,
       text: 'Loading',
       spinner: 'el-icon-loading',
       background: 'rgba(0, 0, 0, 0.7)'
     });
     let shareContent = document.getElementById(id), //需要截图的包裹的(原生的)DOM 对象
       width = shareContent.clientWidth, //获取dom 宽度
       height = shareContent.clientHeight, //获取dom 高度
       canvas = document.createElement("canvas"), //创建一个canvas节点
       scale = 1; //定义任意放大倍数 支持小数
     canvas.width = width * scale; //定义canvas 宽度 * 缩放
     canvas.height = height * scale; //定义canvas高度 *缩放
     canvas.style.width = shareContent.clientWidth * scale + "px";
     canvas.style.height = shareContent.clientHeight * scale + "px";
     canvas.getContext("2d").scale(scale, scale); //获取context,设置scale
     let opts = {
       scale: scale, // 添加的scale 参数
       canvas: canvas, //自定义 canvas
       logging: false, //日志开关,便于查看html2canvas的内部执行流程
       width: width, //dom 原始宽度
       height: height,
       useCORS: true, // 【重要】开启跨域配置
     }
     html2Canvas(shareContent, opts).then(() => {
       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 = (592.28 / contentWidth) * contentHeight;
       var pageData = canvas.toDataURL("image/jpeg", 1.0);
       var PDF = new JsPDF("", "pt", "a4");
       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();
           }
         }
       }
       PDF.save(title + ".pdf"); // 这里是导出的文件名
       loading.close();
       this.$router.go(-1)
     });
   };
 }
};

注意:

打印的时候,父级或者父级之上的元素的css设置不能有transform,否则在火狐浏览器中,打印出来的pdf会有偏移。

以上就是vue导出少量pdf实现示例详解的详细内容,更多关于vue导出pdf的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Vue-Router 2实现路由功能实例详解

    使用Vue-Router 2实现路由功能实例详解

    vue-router 2只适用于Vue2.x版本,下面我们是基于vue2.0讲的如何使用vue-router 2实现路由功能,需要的朋友可以参考下
    2017-11-11
  • vue+j简单的实现轮播效果,滚动公告,衔接

    vue+j简单的实现轮播效果,滚动公告,衔接

    这篇文章主要介绍了vue+j简单的实现轮播效果,滚动公告,衔接,文章围绕主题的相关资料展开详细的内容具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • vue常用知识点整理

    vue常用知识点整理

    Vue是一套用于构建用户界面的渐进式JavaScript框架。这篇文章整理了vue中的常用知识点,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • vue中用 async/await 来处理异步操作

    vue中用 async/await 来处理异步操作

    这篇文章主要介绍了vue中用 async/await 来处理异步操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue使用video.js进行视频播放功能

    vue使用video.js进行视频播放功能

    video.js是一个拥有h5背景的网络视频播放器,同时支持h5以及Flash视频播放,这篇文章主要介绍了vue中使用video.js进行视频播放,需要的朋友可以参考下
    2019-07-07
  • vue2使用el-date-picker实现动态日期范围demo

    vue2使用el-date-picker实现动态日期范围demo

    这篇文章主要为大家介绍了vue2使用el-date-picker实现动态日期范围示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • vue动态绑定ref(使用变量)以及获取方式

    vue动态绑定ref(使用变量)以及获取方式

    这篇文章主要介绍了vue动态绑定ref(使用变量)以及获取方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue集成kindeditor富文本的实现示例代码

    vue集成kindeditor富文本的实现示例代码

    这篇文章主要介绍了vue集成kindeditor富文本的实现示例代码,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • 详解vue 组件的实现原理

    详解vue 组件的实现原理

    这篇文章主要介绍了详解vue 组件的实现原理,帮助大家更好的理解和学习vue框架,感兴趣的朋友可以了解下
    2020-11-11
  • Vue keep-alive实践总结(推荐)

    Vue keep-alive实践总结(推荐)

    本篇文章主要介绍了Vue keep-alive实践总结(推荐),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论