htmlcanvas+jspdf(打印pdf)

直接上代码 (直接复制即可 )

1.准备一个文件用来封装功能

下面展示里面的代码

// 页面导出为pdf格式

import html2Canvas from 'html2canvas';

import jsPDF from 'jspdf';

const htmlToPdf = {

    getPdf (title, id) {

        console.log(id);

        // loading = true;

        // console.log(loading);

        console.log(document.querySelector(id));

        html2Canvas(document.querySelector(id), {

            allowTaint: false,

            taintTest: false,

            logging: false,

            useCORS: true,

            dpi: window.devicePixelRatio * 4, //将分辨率提高到特定的DPI 提高四倍

            scale: 4 //按比例增加分辨率

        }).then(canvas => {

            const pdf = new jsPDF('p', 'mm', 'a4'); //A4纸,纵向

            let ctx = canvas.getContext('2d'),

                a4w = 190,

                a4h = 227, //A4大小,210mm x 297mm,四边各保留10mm的边距,显示区域190x277

                imgHeight = Math.floor((a4h * canvas.width) / a4w), //按A4显示比例换算一页图像的像素高度

                renderedHeight = 0;

            while (renderedHeight < canvas.height) {

                const page = document.createElement('canvas');

                console.log(page);

                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(); //如果后面还有内容,添加一个空页

                }

                // delete page;

            }

            //保存文件

            pdf.save(title + '.pdf');

            // loading = false;

            // console.log(loading);

        });

    }

};

export default htmlToPdf;

3. 直接调用即可 

  1.导入

  2.调用方法加入对应的参数

效果展示

注意:htmlcanvas很多样式识别不到 还有如果用了element-table失效的话建议 直接用原生的table trtd写效果还是可以实现的  图片直接在模版里面使用 backgroun-imgage 可能会失效   如果出现白屏 也用了el-dailog 弹框的话 建议将id放在弹框里面而不是外面
  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值