vue 页面内容生成图片\PFD方法

发布时间:2024年01月16日

1.下载插件

npm install html2canvas jspdf

2.引入

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

3.使用方法

在需要生成的内容绑定类名或id,在下面获取元素

<div class="input_box">
    <div id="content">
        <table class="input_table">
            <tr>
                <th colspan="6">表单标题</th>
            </tr>
            <tr>
                <td style="width:100px">客户姓名</td>
                <td colspan="2"><el-input v-model="setinputobj.customer_compute_name"></el-input>
                <td>销售方</td>
                <td colspan="2"><el-input v-model="setinputobj.staff_name"></el-input></td>
            </tr>
            <tr>
                <td>客户电话</td>
                <td colspan="2"><el-input v-model="setinputobj.mobile"></el-input></td>
                <td>电话</td>
                <td colspan="2"><el-input v-model="setinputobj.staff_moblie"></el-input></td>
            </tr>
            <tr>
                <td>客户单位</td>
                <td colspan="2"><el-input v-model="setinputobj.unit"></el-input></td>
                <td>单位</td>
                <td colspan="2"><el-input v-model="my_setinputobj.my_unit"></el-input></td>
            </tr>
            <tr>
                <td colspan="6"></td>
            </tr>
            <tr>
                <th>项目编号</th>
                <th>项目名称</th>
                <th>软件</th>
                <th>数量</th>
                <th>单价(元)</th>
                <th>报价(元)</th>
            </tr>
            <tr v-for="item, index in setinputobj.extend" :key="index">
                <td>{{ index + 1 }}</td>
                <td><el-input v-model="item.entry_name"></el-input></td>
                <td><el-input v-model="item.software"></el-input></td>
                <td><el-input v-model="item.num"></el-input></td>
                <td><el-input v-model="item.price"></el-input></td>
                <td><el-input v-model="item.quoted_price"></el-input></td>
            </tr>
            <tr>
                <td colspan="6"></td>
            </tr>
            <tr>
                <td colspan="2">价格(元)</td>
                <td colspan="4"><el-input v-model="setinputobj.tea_money"></el-input></td>
            </tr>
            <tr>
                <td colspan="2">周期(工作日天数)</td>
                <td colspan="4"><el-input v-model="setinputobj.cycle"></el-input></td>
            </tr>
            <tr rowspan="4">
                <td colspan="2">备注</td>
                <td colspan="4">
                    <p style="margin-left:1em;">1.以上报价有效期为7天;</p>
                    <p style="margin-left:1em;">2.付款方式:按照合同签订付款方式执行;</p>
                    <p style="margin-left:1em;">3.付款过程中产生的手续费双方各自承担;</p>
                </td>
            </tr>
        </table>
    </div>
    <div class="btn">
        <el-button type="success" @click="set_png">生成报价单</el-button>
    </div>
</div>

js?

set_png() {
    // 获取需要截图的元素
    const element = await document.querySelector('#content');
    // 使用 html2canvas 将元素转换为图片
    html2canvas(element).then(function (canvas) {
        // 将图片转换为 DataURL
        const dataUrl = canvas.toDataURL('image/png');
        // 创建一个 a 标签,用于下载图片
        const link = document.createElement('a');
        link.href = dataUrl;
        link.target = "_blank";
        link.download = '报价单.png';
        link.click();
    });
    // 生成pdf方法
    // pdf宽度800px 图片没有限制
    // const canvas = await html2canvas(element); // 将元素转换为canvas
    // const imgData = canvas.toDataURL('image/png'); // 将canvas转换为图片数据
    // const pdf = new JsPDF(); // 创建一个新的PDF文档
    // pdf.addImage(imgData, 'PNG', 5, 10); // 将图片添加到PDF文档中
    // pdf.save('报价单.pdf'); // 保存PDF文档
},

less样式?

.input_box {
    color: #606266;
    position: relative;
    padding-bottom: 80px;
    box-sizing: border-box;

    #content {
        padding: 20px;
        margin-top: 10px;
    }

    // 表格
    .input_table {
        text-align: center;
        border-collapse: collapse;
        width: 100%;

        /deep/ .el-input__wrapper {
            box-shadow: none;
        }

        tr {
            height: 40px;
        }

        th {
            border: 1px solid #000;
        }

        td {
            border: 1px solid #000;
        }

        .last {
            width: 80px;
            display: flex;
            justify-content: space-around;
            align-items: center;
            background-color: #fff;
        }
    }

    p {
        text-align: left;
    }

    .btn {
        float: right;
        margin-right: 20px;
        margin-top: 20px;
    }
}

?效果

?点击生成图片或pdf

图片没有宽高大小限制

pdf宽度大概800px,长度也有限制,不建议使用pdf

文章来源:https://blog.csdn.net/weixin_70563937/article/details/135632606
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。