vue项目中使用html2canvas实现内容以A4(A3)纸张大小导出图片(支持纸张横纵旋转)

1、先安装依赖        npm i html2canvas
2、先声明变量,用来控制大小和方向的
 

const exportPicture = ref(false)
const a3 = ref(
    {
        S:{
            width:3508,
            height:4961,
        },
        H:{
            width:4961,
            height:3508
        }
    }
)
const a4 = ref(
    {
        S:{
            width:2480,
            height:3508,
        },
        H:{
            width:3508,
            height:2480
        }
    }
)
const pageType = ref(1) // 1a3 2a4
const direction = ref('S') // S竖 H横

3、导出方法
 

function exportSeatMap(tag = 0) {
    btnLoading.value = true
    const fileName = props.courseName + "座位图" + (mapDirection.value === 'front' ? '[讲台在前]' : '[讲台在后]') + '.png';
    html2canvas(seatMapRef.value, { // 绑在你需要打印地方的 ref="seatMapRef"
        allowTaint: true,
        useCORS: true
     }).then(canvas => {
        let final = canvas
        if(tag){
            // 创建新的canvas元素
            let newCanvas = document.createElement("canvas");
            let newContext = newCanvas.getContext("2d");

            // 设置纸张尺寸
            newCanvas.width =  pageType.value == 1 ? a3.value[direction.value].width : a4.value[direction.value].width
            newCanvas.height = pageType.value == 1 ? a3.value[direction.value].height : a4.value[direction.value].height

            // 设置纸张背景颜色
            newCanvas.style.background = '#fff'

            // 计算缩放比例
            let scaleX = newCanvas.width / canvas.width;
            let scaleY = newCanvas.height / canvas.height;
            let scale = Math.min(scaleX, scaleY);

            // 居中处理
            let centerX = 0
            let centerY = 0
            if(scaleX >= scaleY){
                centerX = parseInt(newCanvas.width / 2) - parseInt(canvas.width * scale / 2)
            }else{
                centerY = parseInt(newCanvas.height / 2) - parseInt(canvas.height * scale / 2)
            }

            // 在新纸张上绘制原始canvas图片对象
            newContext.drawImage(
                canvas,
                0,
                0,
                canvas.width,
                canvas.height,
                centerX,
                centerY,
                canvas.width * scale,
                canvas.height * scale
            );
            final = newCanvas
        }

        // 下载
        var link = document.createElement("a");
        document.body.appendChild(link);
        link.download = fileName
        link.href = final.toDataURL()
        link.target = '_blank';
        link.click();
        btnLoading.value = false
        ElMessage.success('已成功导出座位图')
        exportPicture.value = false
    });
}

只是提供了思路方法,具体的根据自己需求修改复制代码使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3使用html2canvas可以通过以下步骤进行: 1. 首先,安装html2canvas库。你可以使用npm或yarn在你的项目安装它: ```bash npm install html2canvas ``` 2. 在你的Vue组件,导入html2canvas库: ```javascript import html2canvas from 'html2canvas'; ``` 3. 在需要截取的元素上添加一个ref属性,以便在后面引用该元素。例如,在模板添加ref属性: ```html <template> <div ref="captureElement"> <!-- 这里是你要截取的内容 --> </div> <button @click="capture">截图</button> </template> ``` 4. 在Vue组件的methods,编写一个函数来触发截图操作。在该函数使用html2canvas库的`toBlob`方法来生成截图的blob对象。你可以将该blob对象转换为图片并进行下载或者进一步处理。 ```javascript methods: { capture() { const element = this.$refs.captureElement; html2canvas(element).then(canvas => { canvas.toBlob(blob => { const imageURL = URL.createObjectURL(blob); // 这里可以进行下载或者进一步处理 }); }); } } ``` 在上述代码,`this.$refs.captureElement`引用了之前添加ref属性的元素。`html2canvas(element)`将传入的元素转换为canvas对象,然后通过`toBlob`方法生成blob对象,最后可以使用`URL.createObjectURL`方法将blob对象转换为图片URL。你可以根据需要进一步处理该URL,例如下载或者展示给用户。 以上是在Vue 3使用html2canvas的基本步骤,希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值