纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想)

news2024/11/19 3:24:13

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想)

  • 一.安装依赖
  • 二、主要代码

预览效果链接: https://github.com/501351981/vue-office
插件文档链接: https://501351981.github.io/vue-office/examples/docs/config/

一.安装依赖

//docx文档预览组件
npm install @vue-office/docx vue-demi
 
//excel文档预览组件
npm install @vue-office/excel vue-demi
 
//pdf文档预览组件
npm install @vue-office/pdf vue-demi
//html生成图片
npm install html2canvas

二、主要代码

<template>
    <div class="index">
        <div class="select-file">
            <input id="input" type="file" />
        </div>
        <div class="file-preview" ref="excelContainer">
            <!-- <VueOfficeDocx v-if="src" style="height: 600px;" :src="src" /> -->
            <VueOfficeExcel class="file-content" v-if="src" style="height: 1280px" :src="src" />
            <!-- <VueOfficePdf v-if="src" style="height: 600px" :src="src" /> -->
        </div>
        <button @click="generateImage">Generate Image</button>
    </div>
</template>
<script>
// import VueOfficeDocx from '@vue-office/docx'
// import '@vue-office/docx/lib/index.css'

import VueOfficeExcel from '@vue-office/excel'
import '@vue-office/excel/lib/index.css'

// import VueOfficePdf from '@vue-office/pdf'

import html2canvas from 'html2canvas'
export default {
    data() {
        return {
            src: '',
        }
    },
    components: {
        // VueOfficeDocx,
        VueOfficeExcel,
        //  VueOfficePdf
    },
    mounted() {
        this.addInputEventListener()
    },
    methods: {
        /**
         * application/msword;charset=utf-8
         * application/pdf;charset=utf-8
         * application/vnd.ms-excel
         */
        addInputEventListener() {
            const input = document.querySelector('#input')
            input.addEventListener('input', e => {
                const fileBlob = e.target.files[0]

                // 第一种方式(通过window.URL.createObjectURL将Blob文件流转为一个路径)
                this.src = window.URL.createObjectURL(new Blob([fileBlob]))

                // 第二种方式(转为base64编码)
                const fileReader = new FileReader()
                fileReader.readAsDataURL(fileBlob)
                fileReader.onload = e => {
                    this.src = e.target.result
                }

                // 第三种方式(获取到buffer)
                fileBlob.arrayBuffer().then(buffer => {
                    this.src = buffer
                })
            })
        },
        generateImage() {
            const element = this.$refs.excelContainer
            html2canvas(element, { useCORS: true })
                .then(canvas => {
                    const image = canvas.toDataURL('image/png')
                    const link = document.createElement('a')
                    link.href = image
                    link.download = 'excel_image.png'
                    link.click()
                })
                .catch(error => {
                    console.error('Error generating image:', error)
                })
        },
    },
}
</script>
<style scoped>
.index {
    width: 100%;
    height: 100%;
    padding: 15px;
    box-sizing: border-box;
}
.select-file {
    width: 100%;
    height: 35px;
    border-bottom: 1px dashed #ccc;
    margin-bottom: 15px;
}
.file-preview {
    width: 100%;
    height: 100%;
    border: 1px dashed #007acc;
}
</style>

在这里插入图片描述

没了~

链接: https://www.jb51.net/article/278400.htm

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

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

相关文章

webrtc报文记录

tcp.port 10443 || tcp.port 6080 || udp.port 8000 https://download.csdn.net/download/dualvencsdn/88706745

LeetCode 2397. 被列覆盖的最多行数:二进制枚举

【LetMeFly】2397.被列覆盖的最多行数&#xff1a;二进制枚举 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-rows-covered-by-columns/ 给你一个下标从 0 开始的 m x n 二进制矩阵 mat 和一个整数 cols &#xff0c;表示你需要选出的列数。 如果一行中&am…

数据结构和算法-插入排序(算法效率 折半优化 顺序表与链表插入排序 代码实现)

文章目录 插入排序算法实现算法效率分析优化-折半插入排序代码实现对链表进行插入排序小结 插入排序 首先49当作第一个已经排好序得元素&#xff0c;将第二个元素与前面得元素对比&#xff0c;发现小于49&#xff0c;于是49移动位置 此时将65与之前元素对比&#xff0c;发现其…

【C++期末编程题题库】代码+详解18道

适合期末复习c看&#xff0c;或者刚入门c的小白看&#xff0c;有的题会补充知识点&#xff0c;期末复习题的代码一般比较简单&#xff0c;所以语法上没那么严谨。本文所有题目要求全在代码块的最上面。 目录 1、设计复数类 2、设计Computer类 3、实现相加的函数模板 4、圆类…

全网最简单vscode使用Makefile调试多文件的C/C++代码

前言 vscode调试C/C教程很多&#xff0c;操作麻烦&#xff0c;这里试图找到一个最简单的使用vscode调试C/C代码的方法。这里是使用Makefile的多文件方式。 测试文件 tree . ├── func.c ├── func.h ├── main.c └── Makefilefun.c #include <stdio.h> #in…

对低效的会议说“不!”

根据微软对全球 31, 000 名员工开展的一项调查&#xff0c;低效的会议是影响工作效率的第一大干扰因素&#xff0c;其次是召开过多的会议。 大大小小的同步会、讨论会、审查会、复盘会不仅将工作时间拆解得支离破碎&#xff0c;还会让成员因「会议恢复综合症」而无法立即从无效…

Certum与Geotrust的OV多域名证书

Certum和Geotrust都是知名的CA认证机构&#xff0c;旗下的SSL证书产品丰富&#xff0c;有单域名SSL证书、多域名SSL证书以及通配符SSL证书。这些SSL数字证书作为一种重要的网络安全产品&#xff0c;能够实现数据加密和身份验证&#xff0c;保障网站的安全性和隐私性。OV多域名S…

【快速全面掌握 WAMPServer】14.各种组件的升级方法

网管小贾 / sysadm.cc WAMPServer 更新很快&#xff0c;这是件好事&#xff01; 但是 WAMPServer 更新快是因为他很勤劳吗&#xff1f; 其实这个问题的原因并不是出自 WAMPServer 自身&#xff0c;而是来自它的各个组件。 是的&#xff0c;你能想像得到&#xff0c;比如 PHP…

数据结构和算法-数据结构的基本概念和三要素和数据类型和抽象数据类型

文章目录 总览数据结构的基本概念总览数据早期和现代的计算机处理的数据数据元素-描述一个个体数据对象-一类数据元素什么是数据结构小结 数据结构的三要素总览逻辑结构-集合结构逻辑结构-线性结构逻辑结构-树形结构逻辑结构-图形结构逻辑结构-小结数据的运算物理结构&#xff…

Struts2 远程代码执行漏洞S2-001分析

自 Struts2 在 2007 年爆出第一个远程代码执行漏洞 S2-001 以来&#xff0c;在其后续的发展过程中不断爆出更多而且危害更大的远程代码执行漏洞&#xff0c;而造成 Struts2 这么多 RCE 漏洞的主要原因就是 OGNL 表达式。这里以 Struts2 的第一个漏洞 S2-001 为例来对 Struts2 远…

新年启新程 | 开门红!菊风中标重庆三峡银行双录及产品销售可回溯系统项目

INTRODUCTION 近年来&#xff0c;随着人们需求的转变和金融科技的高速发展&#xff0c;银行开始朝着数智化方向转型。为顺应客户行为变迁&#xff0c;银行同业积极构建远程银行云服务生态。同时&#xff0c;面对业务的升级以及新的监管要求&#xff0c;现有音视频功能难以满足…

第三届先进控制、自动化与机器人国际会议(ICACAR 2024) | Ei、Scopus双检索

会议简介 Brief Introduction 2024年第三届先进控制、自动化与机器人国际会议(ICACAR 2024) 会议时间&#xff1a;2024年5月24-26日 召开地点&#xff1a;中国重庆 大会官网&#xff1a;ICACAR 2024-2024 3rd International Conference on Advanced Control, Automation and Ro…

yolov8 tracking编码为web 和 rtsp流输出

1 基础工作 打开cmd 输入 conda env list 输入 conda activate py38 查看 nvidia-smi 查看 nvcc&#xff0c;如下图所示 cuda为11.7 &#xff0c;为确认可以查看program files 下面的cuda 安装&#xff0c;看到11.7 就行了&#xff0c;读者可以自行确认自己的版本。 查看nvid…

第 378 场 LeetCode 周赛题解

A 检查按位或是否存在尾随零 枚举&#xff1a;枚举两个元素的组合即可 class Solution { public:bool hasTrailingZeros(vector<int> &nums) {int n nums.size();for (int i 0; i < n; i)for (int j 0; j < i; j)if ((nums[i] | nums[j]) % 2 0)return tru…

无痛迁移:图解 Kubernetes 集群升级步骤

本文探究了Kubeadm集群升级工作流程&#xff0c;并以可视化方式展现。着重介绍了控制平面节点和工作节点的升级步骤&#xff0c;涵盖了kubeadm升级、节点清空、kubelet和kubectl升级&#xff0c;以及解除节点封锁的关键步骤。 这个简明扼要的指南可帮助用户理解和执行Kubernete…

视频号掀起内容新风向,这几类账号为何爆红?

12月初&#xff0c;视频号就迎来了好消息&#xff0c;官方发布消息称&#xff0c;视频号作者加入互选的门槛由10000粉调整为5000粉&#xff0c;其他条件不变。此举旨在激励更多创作者积极投入视频内容创作&#xff0c;从而获得更多商业合作的机会和收益。 为帮助大家更好地洞察…

lf 的年终总结(2023)

这一年&#xff0c; 我没有进行总结&#xff0c; 只有年终的回顾。 是的&#xff0c; 我又长了一岁&#xff0c; 同时也度过了三年的开发经历&#xff0c; 即将进入五年 Android 开发的阶段。 我只希望在新的一年里能够好好学习&#xff0c;期待有所提升。 回顾过去的生活&…

51单片机四位数码管计算器 Proteus仿真程序

目录 概要 仿真图 部分代码 资料下载地址&#xff1a;51单片机四位数码管计算器 Proteus仿真程序 概要 1.系统通过4x4的矩阵键盘输入数字及运算符。 2.可以进行4位十进制数以内的加法运算&#xff0c;如果计算结果超过4位十进制数&#xff0c;则屏幕显示E 3.可以进行加法以外…

工作中人员离岗识别摄像机

工作中人员离岗识别摄像机是一种基于人工智能技术的智能监控设备&#xff0c;能够实时识别员工离岗状态并进行记录。这种摄像机通常配备了高清摄像头、深度学习算法和数据处理系统&#xff0c;可以精准地监测员工的行为&#xff0c;提高企业的管理效率和安全性。 工作中人员离岗…

DevOps搭建(十二)-Jenkins推送镜像到Harbor详解

什么是Harbor&#xff1f;Harbor 是一个开源的企业级容器镜像仓库&#xff0c;它提供了安全、可靠、高效的镜像管理和分发功能。 Harbor 支持 Docker 镜像和 Helm Chart&#xff0c;可以与其他云原生工具和平台集成&#xff0c;如 Kubernetes、Docker Swarm 等。 使用 Harbor&a…