vue3 实现将html内容导出为图片、pdf和word

话不多说直接开始

本文使用到的开源插件库地址 wang1xiang

1.1 下载依赖

复制代码
npm install html2canvas jspdf html-docx-js-typescript file-saver --save

2.1 下载工具

javascript 复制代码
npm install html2image-pdf-word --save

3.1 页面使用

javascript 复制代码
<template>
    <div>
        <div @click="htmlToPdfFn(1)">导出为图片</div>
        <div @click="htmlToPdfFn(2)">导出为pdf</div>
        <div @click="htmlToPdfFn(3)">导出为Word</div>
        <div id="report" style="padding: 40px;">
            <el-table :data="tableData" style="width: 100%">
                <el-table-column type="selection" width="55" />
                <el-table-column label="Date" width="120">
                    <template #default="scope">{{ scope.row.date }}</template>
                </el-table-column>
                <el-table-column property="name" label="Name" width="120" />
                <el-table-column property="address" label="use show-overflow-tooltip" width="240"
                    show-overflow-tooltip />
                <el-table-column property="address" label="address" />
            </el-table>
            <div>
                测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字
            </div>
            <div>
                测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字
            </div>
            <div>
                测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字,测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字
            </div>
        </div>
    </div>
</template>

<script setup lang="ts">
import { exportAsPdf, exportAsWord, exportAsImage } from 'html2image-pdf-word';
interface User {
    date: string
    name: string
    address: string
}
const tableData: User[] = [
    {
        date: '2016-05-04',
        name: 'Aleyna Kutzner',
        address: 'Lohrbergstr. 86c, Süd Lilli, Saarland',
    },
    {
        date: '2016-05-03',
        name: 'Helen Jacobi',
        address: '760 A Street, South Frankfield, Illinois',
    },
    {
        date: '2016-05-02',
        name: 'Brandon Deckert',
        address: 'Arnold-Ohletz-Str. 41a, Alt Malinascheid, Thüringen',
    },
    {
        date: '2016-05-01',
        name: 'Margie Smith',
        address: '23618 Windsor Drive, West Ricardoview, Idaho',
    },
]

let htmlToPdfFn = async (type: number) => {
    const dom: any = document.querySelector('#report');
    const filename = 'test';
    switch (type) {
        case 1:
            await exportAsImage(dom, filename, '水印,水印水印');
            break;
        case 2:
            await exportAsPdf(dom, filename);
            break;
        case 3:
            await exportAsWord(dom, filename);
            break;
    }
}
</script>
<style scoped lang="scss"></style>
相关推荐
Csvn35 分钟前
Monorepo 迁移血泪史:从 Multi-Repo 到 Turborepo,这 3 个坑我帮你踩完了
前端
星栈1 小时前
Dioxus 多页面怎么做:`dioxus-router`、嵌套路由、`Outlet` 和页面组织,一篇给你讲顺
前端·rust·前端框架
用户987409238871 小时前
用 Remotion + edge-tts 打造中文教学视频全自动流水线
前端
风骏时光牛马1 小时前
Less前端工程化实战:变量混合器与项目样式分层落地
前端
假如让我当三天老蒯1 小时前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
SameX1 小时前
iOS 独立开发实践:用 MapKit + 像素渲染实现 Citywalk 轨迹地图 App「雁过留痕」
前端
_柳青杨1 小时前
一文吃透 Node.js 事件循环:从原理到 Node 20+ 重大变更
javascript·后端
skyey1 小时前
页面加载时,深色模式闪白的问题解决
前端
IT_陈寒1 小时前
Java 并行流把我坑惨了,这6小时加班值了
前端·人工智能·后端
anOnion11 小时前
构建无障碍组件之Menu Button pattern
前端·html·交互设计