html2pdf的使用与html2Canvas+jspdf长图不分页

文章介绍了如何使用html2pdf.js库生成PDF,以及当需要处理长图不分页时,结合html2Canvas和jspdf.js进行转换的方法。通过设置特定参数和调整图片尺寸,确保长图能在单页PDF中完整显示。

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

html2pdf的使用

html2pdf在https://github.com/eKoopmans/html2pdf.js说明的很清楚了,下面给出一个例子

const handleDownload = () => {
    let element = document.getElementById('elementToPrint');
    let opt = {
      margin: 0,
      filename: `${title}-${name}-${reportDate.replace(/-/g, '.')}.pdf`,
      image: { type: 'jpeg', quality: 1 },
      html2canvas: {
        scale: 2,
        allowTaint: false,
        useCORS: true,
        ignoreElements: (element: { id: string }) => {
          if (element.id === 'ignoreBtnElement') return true;
          return false;
        },
      },
      pagebreak: { mode: 'avoid-all', after: '#levelAnalysis' }, 
      enableLinks: true, // 支持文本中放链接,可点击跳转
    };
    html2pdf().set(opt).from(element).save();
  };

html2Canvas+jspdf.js实现长图不分页

html2pdf不能实现在一页输出长图,与产品需求不符,故使用

  const handleDownload = () => {
    let element = document.getElementById('elementToPrint');
    if (element) {
      let width = element.offsetWidth / 4;
      let height = element.offsetHeight / 4;
      let limit = 14400;
      if (height > limit) {
        let contentScale = limit / height;
        height = limit;
        width *= contentScale;
      }
      html2canvas(element, {
        scale: 2,
        useCORS: true,
        allowTaint: false,
        ignoreElements: (element: { id: string }) => {
          if (element.id === 'ignoreBtnElement') return true;
          return false;
        }
      }).then(canvas => {
        let context: any = canvas.getContext('2d');
        let orientation;
        if (context) {
          context.mozImageSmoothingEnabled = false;
          context.webkitImageSmoothingEnabled = false;
          context.msImageSmoothingEnabled = false;
          context.imageSmoothingEnabled = false;
        }
        let pageData = canvas.toDataURL('image/jpg', 1.0);
        let img = new Image();
        img.src = pageData;
        img.onload = function () {
          img.width /= 2;
          img.height /= 2;
          img.style.transform = 'scale(0.5)';
          let pdf;
          orientation = width > height ? 'l' : 'p'
          // eslint-disable-next-line
          pdf = new jsPDF(orientation , 'mm', [
            width,
            height
          ]);
          pdf.addImage(
            pageData,
            'jpeg',
            0,
            0,
            width,
            height
          );
          pdf.save(`${originTitle}-${name}-${reportDate.replace(/-/g, '.')}.pdf`);
        };
      });
    }
  };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值