jspdf和html2canvas将html内容转 PDF

15 篇文章 0 订阅
13 篇文章 0 订阅

npm install --save html2canvas
npm i --save jspdf

 方法封装

import html2canvas from 'html2canvas';
import JsPDF from 'jspdf'

// html转pdf
/**
 * @param  ele          要生成 pdf 的DOM元素(容器)
 * @param  padfName     PDF文件生成后的文件名字
 * */

export function downloadPDF(ele, pdfName) {
  window.scrollTo(0, 0);
  let w = ele.clientWidth; //获取屏幕宽度
  let h = ele.clientHeight; //获取屏幕高度
  let scale = 1;
  //一页pdf显示html页面生成的canvas高度;
  let canvas = document.createElement('canvas');
  canvas.width = w * scale;
  canvas.height = h * scale;
  canvas.style.width = w * scale + 'px';
  canvas.style.height = h * scale + 'px';
  canvas.getContext('2d').scale(scale, scale);
  let opt = {
    scale: scale, //添加scale 参数
    canvas: canvas, //自定义canvas
    logging: false,
    width: w, //canvas 宽度
    hieght: h, //canvas 高度
    useCORS: true, //开启跨域
  };

  html2canvas(ele, opt).then((canvas) => {
    var pdf = new JsPDF('p', 'mm', 'a4'); //A4纸,纵向
    var ctx = canvas.getContext('2d'),
      a4w = 190,
      a4h = 274, //A4大小,210mm x 297mm,四边各保留10mm的边距,显示区域190x277
      imgHeight = Math.floor((a4h * canvas.width) / a4w), //按A4显示比例换算一页图像的像素高度
      renderedHeight = 0;

    while (renderedHeight < canvas.height) {
      var page = document.createElement('canvas');
      page.width = canvas.width;
      page.height = Math.min(imgHeight, canvas.height - renderedHeight); //可能内容不足一页 //用getImageData剪裁指定区域,并画到前面创建的canvas对象中

      page
        .getContext('2d')
        .putImageData(
          ctx.getImageData(
            0,
            renderedHeight,
            canvas.width,
            Math.min(imgHeight, canvas.height - renderedHeight),
          ),
          0,
          0,
        );
      pdf.addImage(
        page.toDataURL('image/jpeg', 1.0),
        'JPEG',
        10,
        10,
        a4w,
        Math.min(a4h, (a4w * page.height) / page.width),
      ); //添加图像到页面,保留10mm边距
      renderedHeight += imgHeight;
      if (renderedHeight < canvas.height) {
        pdf.addPage(); //如果后面还有内容,添加一个空页
      }
    }
    //可动态生成
    pdf.save(pdfName);
  });
}

使用

import { downloadPDF, guid } from '@/utils';


//导出
  const handleExport = () => {
    downloadPDF(document.querySelector('#demo>div'), 'test');
  };


return (
     <Button type="primary" icon={<DownloadOutlined />} onClick={handleExport}>
                导出报告
    </Button>
)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值