前端实现图片下载

前端实现图片下载

在这里我们需要一个插件 html2canvas 下载它

npm install --save html2canvas

在需要的页面引入

import html2canvas from "html2canvas"

我这里使用的是需要下载多个的,但是我没有找到怎么直接下载多个,然后,我就直接使用了递归一个下载完了之后下载下一个,直到下载完成,我在图片上传到阿里云,图片超过1的时候也是这样操作的。
但是这个东西需要使用到ref , 这里其实有点坑, ref 我有试过,给出变量赋值,但是这个在下面的时候是没有用的,它就只能死了,如果有同学知道怎么动态赋值,然后还能引用的话,请务必说一下, 让我学习一下,谢谢。

上文说了,我这里的都是不能动态赋值的,如果按照这个来打印的话,可能就是把所有的都打印了,这个时候我们选择的时候就很有必要知道这个的下标了。
下面看代码吧。
list 就是选中的需要打印的文件

computed: {
    sign() {
        let sign = []
        for (let i = 0; i < this.list.length; i++) {
            if (this.list[i].checked) {
                sign.push(i)
            }
        }
        console.log('sign', sign)
        return sign
    }
},
clickGeneratePicture(i) {
    console.log('this.$refs.imageDom', this.$refs.imageDom)
    let img = this.$refs.imageDom
    setTimeout(() => {
        html2canvas(this.$refs.imageDom[i], {
            useCORS: true, //允许图片跨域
        }).then(canvas => {
            // 转成图片,生成图片地址
            this.imgUrl = canvas.toDataURL("image/png");
            if (this.imgUrl) {
                console.log('this.imgUrl', this.imgUrl)
                var eleLink = document.createElement("a");
                eleLink.href = this.imgUrl; // 转换后的图片地址
                eleLink.download = "pictureName";
                // 触发点击
                document.body.appendChild(eleLink);
                eleLink.click();
                // 然后移除
                document.body.removeChild(eleLink);
                this.currindex ++
                if (this.currindex <= this.sign.length-1) {
                    this.clickGeneratePicture(this.sign[this.currindex])
                } else {
                    this.resetBox = false
                    for (const item of this.list) {
                        item.checked = false
                    }
                }
            }
        })
    }, 500)
},
printSelect() {
    if (!this.resetBox) {
        this.$message.error('请点击选择之后,勾选卡片内部的框之后在点击打印选中')
        return
    }
    console.log('this.sign', this.sign)
    if (this.sign.length > 0) {
        this.clickGeneratePicture(this.sign[this.currindex])
    } else {
        this.$message.error('请勾选卡片内部的框之后在点击打印选中')
        return
    }
},

对了,如果你需要打印的东西是不显示出来的,千万不要用display: none; 和 opacity: 0; 用上这个之后他获取到的就是空白的东西了,实在要用的话,就按照我下面写的写吧。

top: -1000px;
left: 0;
z-index: -1;
position: fixed;

这样也是看不见,但是可以打印出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值