前端 html2canvas jspdf 实现指定容器打印

博客介绍了前端插件html2canvas和jspdf的使用步骤,包括通过npm下载安装,创建插件,将其挂载到main.js,最后进行使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载 npm i html2canvas jspdf --save

创建一个插件

import html2Canvas from "html2canvas";
import JsPDF from "jspdf"

export default {
  install(Vue, options) {
    Vue.prototype.htmlToPdf = (id, title) => {
      const elementId = document.getElementById(`${id}`)
      const opts = {
        scale: 12, // 缩放比例,提高生成图片清晰度
        useCORS: true, // 允许加载跨域的图片
        allowTaint: false, // 允许图片跨域,和 useCORS 二者不可共同使用
        tainttest: true, // 检测每张图片已经加载完成
        logging: true, // 日志开关,发布的时候记得改成 false
      };
      html2Canvas(elementId, opts).then((canvas) => {
        let contentWidth = canvas.width;
        let contentHeight = canvas.height;
        // 一页pdf显示html页面生成的canvas高度;
        let pageHeight = (contentWidth / 592.28) * 841.89;
        // 未生成pdf的html页面高度
        let leftHeight = contentHeight;
        // 页面偏移
        let position = 0;
        // a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
        let imgWidth = 595.28;
        let imgHeight = (592.28 / contentWidth) * contentHeight;
        let pageData = canvas.toDataURL("image/jpeg", 1.0);

        // a4纸纵向,一般默认使用;new JsPDF('landscape'); 横向页面
        let PDF = new JsPDF("", "pt", "a4");

        // 当内容未超过pdf一页显示的范围,无需分页
        if (leftHeight < pageHeight) {
          // addImage(pageData, 'JPEG', 左,上,宽度,高度)设置
          PDF.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight);
        } else {
          // 超过一页时,分页打印(每页高度841.89)
          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");
      })
        .catch((error) => {
          console.log("打印失败", error);
        });
    }
  }
}

挂载到main.js

import htmlToPdf from "./utils/printpdf";
Vue.use(htmlToPdf);

使用

methods: {
 handlePdf() {
      document.body.scrollTop = 0; // IE的
      document.documentElement.scrollTop = 0; // 其他
      // 参数一是所打印的dom容器id 参数二是pdf名称
      this.htmlToPdf("pdfDom", "统计报告");
    },
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值