vue3使用html2canvas

news2024/9/23 6:23:48

安装

yarn add html2canvas

 代码

<template>
    <div class="container" ref="container">
        <div class="left">
            <img :src="logo" alt="" class="logo">
            <h2>Contractor's pass/承包商通行证</h2>
            <div class="row">
                <div class="label">Name</div>
                <div class="content">
                    <div class="title">姓名</div>
                    <div class="value">张三</div>
                </div>
            </div>
            <div class="row">
                <div class="label">Type of work</div>
                <div class="content">
                    <div class="title">职位</div>
                    <div class="value">钳工</div>
                </div>
            </div>
            <div class="row">
                <div class="label">Number</div>
                <div class="content">
                    <div class="title">编号</div>
                    <div class="value">DDJFAS-001</div>
                </div>
            </div>
            <div class="row">
                <div class="label">Unit</div>
                <div class="content">
                    <div class="title">单位</div>
                    <div class="value">大地巨人(广东)岩土工程有限公司大地巨人(广东)岩土工程有限公司</div>
                </div>
            </div>
        </div>
        <div class="right">
            <img :src="avatar" alt="" class="avatar">
            <img :src="rcode" alt="" class="rcode">
        </div>
    </div>


    <table border="1" cellspacing="0" width="900px" ref="table">
        <tr align="center">
            <td colspan="9">出门证</td>
        </tr>
        <tr>
            <td colspan="2">单位名称</td>
            <td colspan="2" style="word-break: break-all;width: 200px;">大地巨人(广东)岩土工程有限公司大地巨人(广东)岩土工程有限公司</td>
            <td colspan="2">出门证编号</td>
            <td colspan="3">DDJFAS-001</td>
        </tr>
        <tr>
            <td colspan="2">出生日期</td>
            <td colspan="2">2023年9月11日</td>
            <td colspan="2">物资进场编号</td>
            <td colspan="3">DDJFAS-001</td>
        </tr>
        <tr>
            <td colspan="2">出门号</td>
            <td colspan="7">
                <input type="checkbox">1号门
                <input type="checkbox">2号门
            </td>
        </tr>
        <tr>
            <td colspan="2">经办人</td>
            <td colspan="2"></td>
            <td colspan="2">经办人电话</td>
            <td colspan="3"></td>
        </tr>
        <tr>
            <td colspan="2">运输公司名称</td>
            <td colspan="7">
            </td>
        </tr>
    </table>
    <div>
        <button @click="getImg(1)">打印通行证</button>
        <button @click="getImg(2)">打印出门证</button>
    </div>
    <img :src="imgResult" alt="">
</template>
<script lang="ts" setup>
import logo from '@/assets/1.png'
import avatar from '@/assets/2.png'
import rcode from '@/assets/3.png'
import html2canvas from "html2canvas";

import { ref } from 'vue'
const container = ref<HTMLElement>()
const table = ref<HTMLElement>()
const imgResult = ref('')
const getImg = async (val: number) => {
    if (val == 1) {
        const canvas = await html2canvas(container.value)
        const imgData = canvas.toDataURL()

        const img = new Image()
        img.onload = function () {
            const canvas = document.createElement('canvas')
            const ctx = canvas.getContext('2d')

            // 设置你想要的宽度和高度
            const width = 620
            const height = 410

            canvas.width = width
            canvas.height = height
            ctx.drawImage(img, 0, 0, width, height)

            // 获取新的 data URL
            const newImgData = canvas.toDataURL()
            imgResult.value = newImgData
        }
        img.src = imgData
    } else {
        const canvas = await html2canvas(table.value)
        const imgData = canvas.toDataURL()

        const img = new Image()
        img.onload = function () {
            const canvas = document.createElement('canvas')
            const ctx = canvas.getContext('2d')

            // 设置你想要的宽度和高度
            const width = 900
            const height = 200

            canvas.width = width
            canvas.height = height
            ctx.drawImage(img, 0, 0, width, height)

            // 获取新的 data URL
            const newImgData = canvas.toDataURL()
            imgResult.value = newImgData
        }
        img.src = imgData

    }

}

</script>
<style scoped>
td {
    padding: 5px;
    text-align: center;
}

.content {
    display: flex;
}

.value {
    flex: 1;
    text-align: center;
}

.row {
    font-weight: bolder;
    width: 370px;
    border-bottom: solid;
}

.label {
    font-size: large;
}

.logo {
    display: inline-block;
    width: 230px;
    height: 50px;
}

.container {
    padding: 20px;
    border: solid;
    width: 620px;
    display: flex;
    justify-content: space-between;
    box-sizing: border-box;
}

.right {
    position: relative;
}

.avatar {
    position: absolute;
    right: 0;
    top: 0;
    width: 150px;
    height: 200px;
}

.rcode {
    width: 185px;
    height: 120px;
    bottom: 0px;
    right: 0;
    position: absolute;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1942710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

StableDiffusion模型推荐系列(风格型)

今天&#xff0c;分享几个SDXL的特殊风格模型&#xff0c;这些模型在特定风格下非常出彩&#xff0c;弥补了一些“我已经看腻了AI画图”的情况。这几位作者分享的SDXL模型艺术风格上表现得尤为出色&#xff0c;而且他们都是秉持着开源精神免费分享自己的模型。训练过模型的小伙…

掌握VR全景技术,需要具备哪些条件?

VR全景技术自从进入市场以来&#xff0c;就在各个行业领域尝试落地运用&#xff0c;包括但不限于广告宣传、学校教育、医疗、工业、农业等领域。随着5G 技术的不断普及&#xff0c;VR全景技术也逐渐被应用到日常生活中的各个方面&#xff0c;从地产中介到车企销售&#xff0c;从…

单周期CPU(三)译码模块(minisys)(verilog)(vivado)

timescale 1ns / 1ps //module Idecode32 (input reset,input clock,output [31:0] read_data_1, // 输出的第一操作数output [31:0] read_data_2, // 输出的第二操作数input [31:0] Instruction, // 取指单元来的指令input [31:0] …

ubuntu配置ssh服务器详解

① 确定Ubuntu是否安装SSH服务 systemctl status ssh 一般最开始都没有ssh服务 ② 安装SSH Server sudo apt install openssh-server 执行过程如下 ③ 确定Ubuntu SSH服务状态 systemctl status ssh 现在能看到&#xff1a; 第一行加载状态&#xff0c;已加载ssh.service文件…

大语言模型-GPT-Generative Pre-Training

一、背景信息&#xff1a; GPT是2018 年 6 月由OpenAI 提出的预训练语言模型。 GPT可以应用于复杂的NLP任务中&#xff0c;例如文章生成&#xff0c;代码生成&#xff0c;机器翻译&#xff0c;问答对话等。 GPT也采用两阶段的训练过程&#xff0c;第一阶段是无监督的方式来预训…

使用 Redis 实现验证码、token 的存储,用自定义拦截器完成用户认证、并使用双重拦截器解决 token 刷新的问题

基于session实现登录流程 1.发送验证码 用户在提交手机号后&#xff0c;会校验手机号是否合法&#xff0c;如果不合法&#xff0c;则要求用户重新输入手机号 如果手机号合法&#xff0c;后台此时生成对应的验证码&#xff0c;同时将验证码进行保存&#xff0c;然后再通过短信…

Python爬虫实战案例(爬取图片)

爬取图片的信息 爬取图片与爬取文本内容相似&#xff0c;只是需要加上图片的url&#xff0c;并且在查找图片位置的时候需要带上图片的属性。 这里选取了一个4K高清的壁纸网站&#xff08;彼岸壁纸https://pic.netbian.com&#xff09;进行爬取。 具体步骤如下&#xff1a; …

Android 性能之刷新率设置和管理

目录 1. 刷新率和帧率 2. 多种刷新率 3. 基本原理 3.1 屏幕 & 显示控制器 3.2 Composer Service 4. Framework 策略 4.1基本架构 4.2 刷新率设置项的定义 4.2.1 最低刷新率 4.2.2 默认刷新率 & 默认的用户设置刷新率 4.2.2.1 设置入口 4.2.2.2 设置场景 4…

Matlab画不同指标的对比图

目录 一、指标名字可修改 二、模型名字可修改 三、输入数据可修改 软件用的是Matlab R2024a。 clear,clc,close all figure1figure(1); % set(figure1,Position,[300,100,800,600],Color,[1 1 1]) axes1 axes(Parent,figure1);%% Initialize data points 一、指标名字可修…

zigbee DL-20无线串口模块(电赛备战)

zigbee DL-20无线串口模块(电赛备战) 备战2024电子设计大赛&#xff08;7.29-8.1&#xff09; 概述 DL-20是一款2.4G无线串口模块&#xff0c;支持点对点和广播模式的通信。它具备低数据丢失率、宽电压范围和高传输速率的特点&#xff0c;适用于多种无线通信场景。 在电赛中&…

百日筑基第二十八天-23种设计模式-行为型总汇

百日筑基第二十八天-23种设计模式-行为型总汇 文章目录 百日筑基第二十八天-23种设计模式-行为型总汇前言模板方法模式简介模板方式的特点模板方法模式结构类图模板方式模式案例分析模板方法模式应用源码分析模板方法模式的注意事项和细节 迭代器模式迭代器模式结构类图迭代器模…

googleTest 源码主线框架性分析

本文备忘一个主题的分析过程和结论&#xff0c;即&#xff0c;googleTest框架中是如何调用相关的测试宏的&#xff1f; TEST TEST_F TEST_P 等等 1&#xff0c;googleTest 环境与简单示例 1.1 下载 googletest 并编译 下载&#xff1a; $ git clone https://github.com/goog…

5 C 语言数组与字符串的全面解析

目录 1 数组的概念与特性 1.1 什么是数组 1.2 数组的特点 1.3 数组的用途 2 一维数组的定义与初始化 2.1 一维数组的定义 2.2 声明与定义的区别 2.3 一维数组的多种初始化 3 数组名的命名规则与作用 3.1 数组名的命名规则 3.2 数组名的作用 4 一维数组在内存中的存…

实战篇(十二):如何使用 Processing 创建一个多功能的简易吃豆人游戏

如何使用 Processing 创建一个多功能的简易吃豆人游戏 文章目录 如何使用 Processing 创建一个多功能的==简易==吃豆人游戏引言准备工作第一步:设置基本框架第二步:创建 Pacman 类第三步:创建 Obstacle 类第四步:添加分数系统第五步:运行游戏完整代码结论参考资料引言 吃…

Python基础知识——(005)

文章目录 P21——20. 比较运算符 P22——21. 逻辑运算符 P23——22. 位运算和运算符的优先级 P24——23. 本章总结和章节习题 P21——20. 比较运算符 示例3-17—比较运算符的使用&#xff1a; P22——21. 逻辑运算符 示例3-18—逻辑运算符的使用&#xff1a; print(True and T…

van-dialog 组件调用报错

报错截图 报错原因 这个警告表明 vue 在渲染页面时遇到了一个未知的自定义组件 <van-dialog>&#xff0c;并且提示可能是由于未正确注册该组件导致的。在 vue 中&#xff0c;当我们使用自定义组件时&#xff0c;需要先在 vue 实例中注册这些组件&#xff0c;以便 vue 能…

基于关键字驱动设计Web UI自动化测试框架!

引言 在自动化测试领域&#xff0c;关键字驱动测试&#xff08;Keyword-Driven Testing, KDT&#xff09;是一种高效且灵活的方法&#xff0c;它通过抽象测试用例中的操作为关键字&#xff0c;实现了测试用例与测试代码的分离&#xff0c;从而提高了测试脚本的可维护性和可扩展…

5.Fabric的共识机制

在Fabric中,有以下3中典型共识机制。 Solo共识 solo共识机制只能用于单节点模式,即只能有一个Orderer节点,因此,其共识过程很简单,每接收到一个交易信息,就在共识模块的控制下产生区块并广播给节点存储到账本中。 Solo 模式下的共识只适用于一个Orderer节点,所以可以在…

AI 驱动下的一体化分布式数据库:滴滴、快手、中国恩菲、好未来、翼鸥教育共话创新应用实践|OceanBase Meetup 精彩回顾

7月6日&#xff0c;OceanBase Meetup 北京站——“AI 驱动下的一体化分布式数据库&#xff1a;跨行业多场景的创新应用与实战”举办。来自滴滴、快手、中国恩菲、好未来、翼鸥教育、蚂蚁集团及OceanBase等众多行业技术专家与资深用户&#xff0c;围绕众多用户关注的AI 与数据库…

Performance Metrics in Evaluating Stable Diffusion Models

1.Performance Metrics in Evaluating Stable Diffusion Models 笔记来源&#xff1a; 1.Performance Metrics in Evaluating Stable Diffusion Models 2.Denoising Diffusion Probabilistic Models 3.A simple explanation of the Inception Score 4.What is the inception s…