vue-office 学习记录

341 字
2 分钟
vue-office 学习记录

vue-office 学习记录#

最近顺手写了个 vue-office 的小练习,需求很简单:上传 PDF,然后在页面里直接预览。

这类场景其实不复杂,核心就两步:

先把 PDF 文件读成 ArrayBuffer,再把结果传给 VueOfficePdf

安装配置#

Terminal window
npm install @vue-office/pdf vue-demi

核心代码#

我这里直接用 Vue3 script setup

<script setup>
import { ref } from "vue";
import VueOfficePdf from "@vue-office/pdf";
const fileBuffer = ref(null);
const fileName = ref("");
const status = ref("先选择一个 PDF 文件");
async function handleFileChange(event) {
const [file] = event.target.files ?? [];
if (!file) {
return;
}
fileName.value = file.name;
status.value = "正在读取文件...";
try {
fileBuffer.value = await file.arrayBuffer();
status.value = "文件读取完成,正在渲染 PDF";
} catch (error) {
fileBuffer.value = null;
status.value = `读取失败:${error instanceof Error ? error.message : "未知错误"}`;
}
}
function handleRendered() {
status.value = "PDF 渲染完成";
}
function handleError() {
status.value = "PDF 渲染失败";
}
</script>
<template>
<div>
<input
type="file"
accept="application/pdf,.pdf"
@change="handleFileChange"
/>
<p>当前文件:{{ fileName || "未选择" }}</p>
<p>当前状态:{{ status }}</p>
<VueOfficePdf
v-if="fileBuffer"
:src="fileBuffer"
@rendered="handleRendered"
@error="handleError"
/>
</div>
</template>

input 负责选择 PDF 文件。

file.arrayBuffer() 负责把文件读成二进制内容。

VueOfficePdf 负责把这份二进制内容渲染成可预览的 PDF。

所以关键不是文件名,也不是文件路径,关键是这一句:

fileBuffer.value = await file.arrayBuffer();

还有这一句:

:src="fileBuffer"

只要这两步通了,PDF 在线阅读基本就跑起来了。

效果显示:

GName 定位 1
GName 定位 1

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

vue-office 学习记录
https://c7lz11.cn/posts/vue-office-learning-notes/
作者
Changed
发布于
2026-06-24
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Changed
Hello, I'm Changed.
热爱技术,喜欢分享,喜欢音乐。
公告
图床使用的是cloudflare可能加载有些慢,可以使用魔法。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
7
分类
1
标签
12
总字数
4,585
运行时长
0
最后活动
0 天前

文章目录