vue-office:一站式Office文件预览解决方案

vue 使用vue-office预览word、excel,pdf同理 在此,我只使用了docx和excel, pdf我直接使用的iframe进行的展示就不作赘述了。 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

61d3674fe80ca2eda533f07755579e73.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、ERP、CRM、AI 大模型等等功能:

  • Boot 多模块架构:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 微服务架构:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK 17/21 + SpringBoot 3.3、JDK 8/11 + Spring Boot 2.7 双版本 

来源:江南一点雨

40605d68a94f1d3c08fd9d61c31275c6.jpeg


今天给小伙伴们介绍一个前端的办公文件浏览库。

一 vue-office

vue-office 是一个支持多种文件(docx、.xlsx、pdf)预览的 vue 组件库,支持 vue2 和 vue3。

vue-office 有三个特色:

  • 一站式:提供 docx、.xlsx、pdf 多种文档的在线预览方案,有它就够了,不用再四处寻找、测试、集成各种库了

  • 使用简单:只需提供文档的 src (网络地址)即可完成文档预览,也支持 ArrayBuffer、Blob 等多种格式

  • 支持样式:不仅能预览内容,也支持文档样式,最大限度还原 office 文件内容

好啦,不废话,接下来我们就来看下这个开源组件该如何使用。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

二 安装

首先我们需要在自己的前端项目中安装 vue-office:

#docx文档预览组件
npm install @vue-office/docx vue-demi

#excel文档预览组件
npm install @vue-office/excel vue-demi

#pdf文档预览组件
npm install @vue-office/pdf vue-demi

❝

特别提醒:如果是 vue2.6 或以下版本还需要额外安装  @vue/composition-apinpm install @vue/composition-api

安装好之后就可以使用啦~

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

三 使用

3.1 预览 docx

<template>
    <vue-office-docx
        :src="docx"
        style="height: 100vh;"
        @rendered="renderedHandler"
        @error="errorHandler"
    />
</template>

<script>
//引入VueOfficeDocx组件
import VueOfficeDocx from '@vue-office/docx'
//引入相关样式
import '@vue-office/docx/lib/index.css'

export default {
    components: {
        VueOfficeDocx
    },
    data() {
        return {
            docx: 'http://static.shanhuxueyuan.com/test6.docx' //设置文档网络地址,可以是相对地址
        }
    },
    methods: {
        renderedHandler() {
            console.log("渲染完成")
        },
        errorHandler() {
            console.log("渲染失败")
        }
    }
}
</script>

可以看到,组件使用非常 easy,只需要提供 docx 文档的链接地址即可,上面案例中展示的是一个网络地址,当然这个位置也可以给一个相对地址。

在预览的时候我们可以设置组件的 style 配置样式,一般来说我们只需要设置下高度 height 即可,如果不设置则默认取组件的父元素高度,最小高度 300px。

组件渲染完成会抛出 rendered 事件,渲染失败会抛出 error 事件,方便我们在事件中做后续处理。

上面案例展示的是一个远程文件,有时候我们想要预览即将上传的文件,上传前预览主要是通过读取文件的 ArrayBuffer 格式,传给预览组件来实现。

松哥这里以 ElementUI 的上传组件作为示例,当然也可以使用普通的 input type="file",只要能获取文件的 ArrayBuffer 格式数据即可。

我们来看下如何预览即将上传的文件:

<template>
    <div id="docx-demo">
        <el-upload
            :limit="1"
            :file-list="fileList"
            accept=".docx"
            :beforeUpload="beforeUpload"
            action=""
        >
            <el-button size="small" type="warning">点击上传</el-button>
        </el-upload>
        <vue-office-docx :src="src"/>
    </div>
</template>

<script>
import VueOfficeDocx from '@vue-office/docx'
import '@vue-office/docx/lib/index.css'

export default {
    components: {
        VueOfficeDocx
    },
    data() {
        return {
            src: '',
            fileList: []
        }
    },
    methods: {
        //在beforeUpload中读取文件内容
        beforeUpload(file) {
            let reader = new FileReader();
            reader.readAsArrayBuffer(file);
            reader.onload = (loadEvent) => {
                let arrayBuffer = loadEvent.target.result;
                this.src = arrayBuffer
            };
            return false
        }
    }
}
</script>

上面的案例主要是利用在 beforeUpload 中获取上传的文件,然后利用 FileReader 以 ArrayBuffer 格式读取,读取之后传给预览组件。

如果是原生的 input 标签 type="file",也是类似的:

<template>
    <div>
        <input type="file" @change="changeHandle"/>
        <vue-office-docx :src="src"/>
    </div>
</template>

<script>
import VueOfficeDocx from '@vue-office/docx'
import '@vue-office/docx/lib/index.css'

export default {
    components: {
        VueOfficeDocx
    },
    data() {
        return {
            src: ''
        }
    },
    methods: {
        changeHandle(event) {
            let file = event.target.files[0]
            let fileReader = new FileReader()
            fileReader.readAsArrayBuffer(file)
            fileReader.onload = () => {
                this.src = fileReader.result
            }
        }
    }
}
</script>

3.2 预览 pdf

搞明白了 docx 的预览,那么 pdf 预览也差不多:

<template>
    <vue-office-pdf 
        :src="pdf"
        style="height: 100vh"
        @rendered="renderedHandler"
        @error="errorHandler"
    />
</template>

<script>
//引入VueOfficePdf组件
import VueOfficePdf from '@vue-office/pdf'

export default {
    components: {
        VueOfficePdf
    },
    data() {
        return {
            pdf: 'http://static.shanhuxueyuan.com/test.pdf' //设置文档地址
        }
    },
    methods: {
        renderedHandler() {
            console.log("渲染完成")
        },
        errorHandler() {
            console.log("渲染失败")
        }
    }
}
</script>

3.3 预览 excel

同理,excel 预览也类似:

<template>
    <vue-office-excel
        :src="excel"
        :options="options"
        style="height: 100vh;"
        @rendered="renderedHandler"
        @error="errorHandler"
    />
</template>

<script>
//引入VueOfficeExcel组件
import VueOfficeExcel from '@vue-office/excel'
//引入相关样式
import '@vue-office/excel/lib/index.css'

export default {
    components: {
        VueOfficeExcel
    },
    data() {
        return {
            options:{
                xls: false,       //预览xlsx文件设为false;预览xls文件设为true
                minColLength: 0,  // excel最少渲染多少列,如果想实现xlsx文件内容有几列,就渲染几列,可以将此值设置为0.
                minRowLength: 0,  // excel最少渲染多少行,如果想实现根据xlsx实际函数渲染,可以将此值设置为0.
                widthOffset: 10,  //如果渲染出来的结果感觉单元格宽度不够,可以在默认渲染的列表宽度上再加 Npx宽
                heightOffset: 10, //在默认渲染的列表高度上再加 Npx高
                beforeTransformData: (workbookData) => {return workbookData}, //底层通过exceljs获取excel文件内容,通过该钩子函数,可以对获取的excel文件内容进行修改,比如某个单元格的数据显示不正确,可以在此自行修改每个单元格的value值。
                transformData: (workbookData) => {return workbookData}, //将获取到的excel数据进行处理之后且渲染到页面之前,可通过transformData对即将渲染的数据及样式进行修改,此时每个单元格的text值就是即将渲染到页面上的内容
            },
            excel: 'http://static.shanhuxueyuan.com/demo/excel.xlsx'//设置文档地址
        }
    },
    methods: {
        renderedHandler() {
            console.log("渲染完成")
        },
        errorHandler() {
            console.log("渲染失败")
        }
    }
}
</script>

❝

这块有个不足之处就是目前只支持 xlsx 文件预览,不支持 xls 文件。

四 常见问题

预览传入的的文件地址不能跨域,跨域就预览不出来了~

这个问题我们可以通过 Nginx 配置去解决,通过 Nginx 使前后端处于同一域中:

ae29a34e1b875c3840330f9a286023a6.png

具体配置如下:

server {  
    listen 80;  
    server_name example.com;  
  
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {  
        root /data/static;  
        expires 30d; # 缓存静态文件30天  
    }  
  
    location / {  
        proxy_pass http://javaboy.org; # 假设后端应用服务器  
        proxy_set_header Host $host;  
        proxy_set_header X-Real-IP $remote_addr;  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    }  
}

这样,前后端处于同一域中,就不存在跨域问题了。

项目地址:https://github.com/501351981/vue-office

感兴趣的小伙伴可以去试试~


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

6323e8f9f567bb3f7b75559bd0c19cb7.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

d4d377d68ce95d8f53481e3ba92f4f60.png

0ec87c53693b2ecfdfe571ecb959de34.png2a551a48647868d731ab898310c1752d.pngf24ae6f6832d4cf2147d7747fffe91ad.png08d054fd691187e57dab786968316bdb.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
vue-office 支持多种文件(docx、excel、pdf)预览的vue组件库 如果后端给的不是CDN地址,而是一些POST接口,该接口返回二进制流,则可以调用接口获取文件的ArrayBuffer数据,传递给src属性。通过网络地址预览示例如下,通过文件ArrayBuffer预览和上面docx的使用方式一致。通过网络地址预览示例如下,通过文件ArrayBuffer预览和上面docx的使用方式一致。读取文件的ArrayBuffer。 阅读详情

相关推荐

使用vue-office插件在线预览docx、.xlsx、pdf文件

vue-office是一个支持多种文件(docx、.xlsx、pdf)预览的vue组件库,支持vue2和vue3。

smallqiang的专栏 4539

Vue-Office:优雅实现Office文件预览的Vue组件

在现代Web应用中,Office文件(Word、Excel、PPT等)的预览是一个常见的需求。传统的解决方案往往需要依赖后端转换或第三方服务,不仅增加了系统复杂性,还可能带来性能和安全问题。今天我要介绍的vue-office正是一个优雅解决这一痛点的前端解决方案。vue-office是一套基于Vue.js的Office:Word文档预览组件:Excel文档预览组件:PDF文档预览组件这些组件能够直接在浏览器中解析和渲染Office文件,无需后端参与,极大简化了文件预览功能的实现。

李赛赛的专栏 1万+

vue 预览excel文件的又一伟大实践 —— vue-office

vue-office预览excel以及自定义显示样式

jmszl1991的博客 1万+

Vue vue-office 预览docx、excel、pdf文件

在Vue中,我们可以使用一些第三方的插件或者组件来实现文件预览功能。比如,我们可以使用vue-office插件来预览PDF文件,文中所给的例子中使用了vue-office+element-ui。

qq_44747728的博客 1万+

前端解决方案 - office 系列文件预览

如果遇到文档管理类的业务功能,会出现需要在线预览的业务需求,合同文件、发票文件等业务同样需要文件的在线预览。本文围绕以下解决方案展开:微软 Office Web Viewerpdfjsxlsx第三方封装组件。

m0_74825526的博客 1828

超详细neo4j安装教程

一、neo4j简介 最近开始学习知识图谱,所以首先想先学习一下neo4j的使用。 Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。由于知识图谱中存在大量的关系型信息(实体—关系—实体), 使用结构化数据库进行存储将产生大量的冗余存储信息, 因此将图数据库作为知识图谱的存储容器成为流行的选择。当前较为常用的图数据库主要有 Neo4j 等。 二、neo4j的安装 功能快捷键 撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Co

qq_38335648的博客 9万+

高效集成Vue-Office:一站式Office文件预览解决方案指南

Vue-Office是一个专为Vue生态系统设计的Office文件预览组件库,提供Word(.docx)、Excel(.xlsx)和PDF文件的无缝预览体验。该解决方案支持Vue 2和Vue 3双版本,通过组件化设计实现按需集成,帮助开发者快速在Web应用中嵌入专业级文档预览功能,减少80%的开发工作量。 ## 技术架构概览 Vue-Office采用分层架构设计,核心由三大独立组件构成,每个组...

gitblog_01100的博客 1055

持续集成介绍及Jenkins自动化测试部署

学习持续集成及jenkins的自动化测试部署

ouihsiad的博客 4579

Vue-Office终极指南:一站式Office文件预览解决方案

在数字化办公时代,Web应用处理Office文件的需求日益增长。面对文档预览的技术挑战,开发者往往需要投入大量时间集成复杂的第三方库或自行开发渲染引擎。现在,Vue-Office为您提供了完美的解决方案,让Office文件预览变得前所未有的简单高效。 ## 📌 办公文档处理的痛点与挑战 传统Office文件预览方案存在诸多痛点:格式兼容性问题、性能瓶颈、跨平台适配困难等。这些技术障碍不仅增加

gitblog_00629的博客 562

手把手教你从入门到精通C# MES通信

本文是C#与MES通信通信的目录,使用C#与各种MES系统通信的方法我都会在专栏中讲到,比如WebService、Http、Ftp、共享文件夹、串口通信等,绝对是上位机软件工程师实现与MES系统通信的必备教程!

qq_34059233的博客 8752

王者荣耀AI绝悟如何选英雄?

王者荣耀AI绝悟如何选英雄? 【抢射手?抢中单位?「绝悟」在打王者荣耀时是如何选英雄的?】 腾讯 AI Lab 开发的 AI 智能体「绝悟」已让王者峡谷不再只是人类召唤师的竞技场,而且这个 AI 战队在上月底进化成了「完全体」。在一局完整的比赛中,英雄选择阶段是至关重要的(比如五射手或五法师阵容会有官方劝退)。 近日,腾讯 AI Lab 和上海交通大学发布的一篇论文介绍了绝悟的英雄选择策略:Ju...

不断学习,不断进步,提高自己 1万+

【免费下载】 Vue-Office:一站式Office文件预览解决方案安装配置指南

**Vue-Office** 是一个强大的Vue组件库,专为实现Word (.docx)、Excel (.xlsx, .xls) 和 PDF 文件的在线预览设计。此项目致力于简化多类型文件预览的过程,适用于Vue 2及Vue 3,并且兼容非Vue环境如React等。项目采用的主要编程语言是JavaScript,同时深度整合Vue.js生态。 ## 关键技术和框架 - **Vue.js**: 基于

gitblog_09553的博客 7878

视觉Transformer实战 | Data-efficient image Transformer(DeiT)详解与实现

在计算机视觉领域,Vision Transformer (ViT) 已经证明了纯 Transformer 架构在图像分类任务上的强大能力。然而,ViT 通常需要在大规模数据集上预训练才能达到最佳性能,DeiT (Data-efficient image Transformer) 通过引入一系列训练策略和优化,使得 Transformer 模型能够在相对较小的数据集上取得优异表现。本节将详细介绍 DeiT 的技术原理,并使用 PyTorch 从零开始实现 DeiT 模型。

盼小辉丶的博客 1344

Vue-Office:一站式Office文件预览解决方案,让文档处理从未如此简单

在当今数字化办公时代,高效处理Office文件已成为Web应用的核心需求。Vue-Office作为专为Vue生态系统设计的Office文件预览组件库,提供Word(.docx)、Excel(.xlsx)和PDF文件的无缝预览体验,帮助开发者快速在Web应用中嵌入专业级文档预览功能,减少80%的开发工作量。 ## 🚀 为什么选择Vue-Office? Vue-Office采用分层架构设计,核心

gitblog_00360的博客 488

华为OD机试 - 第k个排列 - 全排列递归(Python/JS/C/C++ 2025 C卷 100分)

给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!按大小顺序升序列出所有排列的情况,并一一标记当n=3时,所有排列如下“123”,“132,“213”,“231”,“312”,“321”输入两行,第一行为n,第二行为k,给定n的范围是[1,9],给定k的范围是[1,n!排列为“12”和“21”,第2个是“21”。给定n和k,返回第k个排列。输出排在第k位置的数字。只有一个排列,直接返回。

学Java,找哪吒 988

SAP BTP ABAP RAP 开发对象命名规范与落地实践

摘要:SAP BTP ABAP开发中的命名规范实践 在企业级ABAP开发中,命名规范是提升交付效率的工程化手段。SAP推荐采用[/<namespace>/][<prefix>]_<object_name>_[<suffix>]的结构化命名框架,解决多对象、多团队的协同问题。关键实践包括:使用组织专属命名空间避免冲突;通过prefix区分同类型对象的不同语义(如UI_/API_);object_name体现业务语义而非技术细节;suffix表达次级差异。在具体对

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1439

Vue Office文档预览组件库深度解析:一站式Vue生态Office文件处理解决方案

在现代Web应用中,Office文档预览功能已成为企业级应用的核心需求。从合同管理到报表展示,从在线教育到协同办公,文档预览的质量直接影响用户体验和业务效率。然而,Vue开发者在实现文档预览功能时面临诸多挑战:不同文档格式的兼容性问题、大文件加载性能瓶颈、跨平台渲染一致性等。Vue Office组件库应运而生,为Vue生态提供了一套完整、高效、易用的Office文档预览解决方案。 ## Vue生

gitblog_00310的博客 289

线性自抗扰控制(LADRC)系统算法框图

NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-优快云博客本文介绍了如何将ADRC自抗扰控制算法从Simulink仿真应用到PLC控制中,包括Simulink框图、TD微分器模型、MATLAB函数的使用、SCL控制代码,以及非线性状态误差反馈控制率的实现。提供了详细的MATLAB仿真步骤和PLC源代码链接。ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法-优快云博客。

RXXW_Dor的博客 1467

vue-office:一站式Vue文件预览解决方案,轻松集成docx、xlsx与pdf

vue-office 是一款专为 Vue.js 开发者设计的一站式文件预览解决方案,支持 docx、xlsx 和 pdf 三种主流办公文档格式。它解决了开发者以往需要集成多个不同库的痛点,通过统一的 API 和组件化方式,轻松实现高质量的文件预览功能,并兼容 Vue 2 和 Vue 3,大幅提升开发效率。

uber9的博客 304

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

vue-office:一站式Vue2/Vue3文件预览解决方案,轻松集成docx、xlsx与pdf

vue-office是一款专为Vue2/Vue3设计的一站式文件预览解决方案,支持docx、xlsx和pdf格式,简化了开发者的集成流程。通过统一的API和组件化设计,vue-office解决了多格式文件预览的兼容性问题,提升开发效率。文章详细介绍了安装、基础使用、高级场景及性能优化技巧,帮助开发者快速上手并应用于实际项目。

r2s3t4的博客 196

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

vue-office:Star 4.2k,款支持多种Office文件预览的Vue组件库,一站式Office文件预览方案,真心不错

vue-office 是一个支持多种文件格式(docx、excel、pdf、pptx)预览的Vue组件库,它不仅支持Vue2和Vue3,还兼容非Vue框架如React等。这个Web-based的库提供了一个全面的解决方案,用于在线预览pdf、excel、word和pptx文档。

2127

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Vue-Office:一站式Office文档预览解决方案完全指南

Vue-Office是一个专为现代Web应用设计的Office文档预览解决方案,能够无缝处理Word、Excel和PDF文件的在线展示需求。这个开源库通过组件化设计大幅简化了开发流程,让开发者能够快速为项目添加专业级文档预览功能,显著提升用户体验。 ## 环境配置与项目准备 ### 开发环境检测清单 在开始集成前,请确认您的开发环境满足以下基础要求: - Node.js:推荐使用LTS版本

gitblog_00659的博客 431

终极指南:Vue-Office PPTX在线预览功能深度解析与实战应用

Vue-Office是一个功能强大的Vue组件库,专门为开发者提供一站式的文档在线预览解决方案。该项目支持多种文件格式预览,包括Word(.docx)、PDF、Excel(.xlsx, .xls)以及PPT(.pptx)等常见办公文档。作为Vue生态中的重要工具,Vue-Office让文档预览变得前所未有的简单和高效。😊 ## 📊 Vue-Office PPTX预览功能核心优势 ### 简

gitblog_00413的博客 935

Star 5.3k 开源 office 文件预览 vue 组件解决方案

支持word(.docx)、excel(.xlsx,.xls)、pdf、pptx等各类型office文件预览的vue组件集合,提供一站式office文件预览方案,支持vue2和3,也支持React等非Vue框架。只需提供文档的src即可完成文档预览,支持远程地址、ArrayBuffer、Blob多种格式。的开源项目,前端包括管理后台、微信小程序,后端支持单体、微服务架构。:项目实战、面试招聘、源码解析、学习路线。RBAC权限、数据权限、SaaS多租户、、支付、工作流、大屏报表、:面朝简历学习,春暖花开。

weixin_44421461的博客 61

多文件类型预览库,如docx、excel、pdf

一个支持多种文件docx、excel、pdf预览的vue组件库。这个库不仅能支持vue2/3,也支持非Vue框架的预览使用。就是每预览一种类型的文件,就需要重新安装、配置、编写一个新的库来实现,很麻烦,也很繁琐。:是一个用于在Vue项目中实现图片查看器功能的组件。你可以使用它在Vue项目中读取Excel文件并显示内容。:是一个用于在Vue项目中显示PDF文件的组件。你可以使用它在Vue项目中嵌入PDF预览功能。你可以使用它在Vue项目中实现图片预览功能。:预览图片的需求,用它我觉得一般就足够了。

weixin_60974764的博客 1368
上一篇: 弃用 RestTemplate,来了解一下官方推荐的 WebClient 吧!
下一篇: 告别空指针,Optional的最佳使用姿势!
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值