基于window.html2canvas的打印功能。适用于打印浏览器上内容。将内容转换成图片来导出成PDF文件。VUE打印功能

基于window.html2canvas的打印功能。适用于打印浏览器上内容。将内容转换成图片来导出成PDF文件。VUE打印功能

做一个记录

直接封装成一个方法printPDF

vue项目直接调用打印方法:this.printPDF(document.getElementById("printPDF"), "打印文件的名称");

(document.getElementById("printPDF")===》通过getElementById来获取打印的的内容。如 id="printPDF",直接定位到需要打印的内容上面。

下面是打印的具体方法实现

Loading:这里直接引用elementUI的loadind组件

引入即可:import { Loading } from 'element-ui';

 

printPDF(targetDom, name = new Date().getTime(), colorName = "#fff") {

      let loadingInstance = Loading.service({

        fullscreen: true,

        text: "正在生成PDF"

      });//通过组件设置loading

      let newNode = targetDom.cloneNode(true); // 复制打印数据

      let newDom = document.createElement("div"); // 新建DIV

      newDom.setAttribute("id", "showPdfContent");

      window.document.body.appendChild(newDom);

 

      document.getElementById("showPdfContent").style.visibility = "hidden"; // 隐藏新建DIV

      document.getElementById("showPdfContent").appendChild(newNode); // 导出打印数据

 

      window.html2canvas(targetDom, {

        allowTaint: true,

        taintTest: false,

        scale: "2",

        dpi: "192",

        background: colorName,

        onrendered: canvas => {

          let contentWidth = canvas.width;

          let contentHeight = canvas.height;

          let pageHeight = (contentWidth / 592.28) * 841.89;

          let leftHeight = contentHeight;

          let position = 0;

          let imgWidth = 595.28;

          let imgHeight = (592.28 / contentWidth) * contentHeight;

 

          let pageData = new Image();

          //设置图片跨域访问

          pageData.setAttribute("crossOrigin", "Anonymous");

 

          // setTimeout(() => {

          pageData = canvas.toDataURL("image/jpeg", 1.0);

          let PDF = new window.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(`${name}.pdf`);

          document.getElementById("showPdfContent").innerHTML = ""; // 清除打印数据

          loadingInstance.close(); // 关闭遮罩

          // }, 1);

        }

      });

    },

 

上面就是具体实现浏览器内容转图片来通过window.html2canvas与window.jsPDF的打印方法来导出PDF文件

在使用的过程中,可能会出现一些bug。比如打印按钮的定义需要在最顶端。不然会出现打印内容不全的问题。(具体原因没有找到)

当然也不是没有解决方法,我们取巧处理一下

    //这个打印方法有点小缺陷,只有在最顶上的时候,打印的内容才是完整的,所以我设置成先回到顶部在打印

      this.$el.parentNode.scrollTop = 0;//回到顶部

先用上述代码回到页面的最顶端然后在调用我的打印方法就好啦!

下面附上一张打印PDF效果图:

基于window.html2canvas的打印功能。适用于打印浏览器上内容。将内容转换成图片来导出成PDF文件。VUE打印功能

与浏览器显示内容90%以上相似。