一、使用mammoth插件
- 安装插件
pnpm install mammoth --save-dev
- 使用
<template>
<div>
<input type="file" @change="handleFileUpload" accept=".docx" />
<div v-html="htmlContent"></div>
</div>
</template>
<script setup>
import mammoth from "mammoth";
import { ref } from "vue";
const htmlContent = ref("");
const handleFileUpload = async (event) => {
const file = event.target.files[0];
if (file) {
const arrayBuffer = await file.arrayBuffer(); // 通过接口可以直接过去arrayBuffer文件流
const result = await mammoth.convertToHtml({ arrayBuffer });
htmlContent.value = result.value; // 获取转换后的 HTML 内容
}
};
</script>
二、使用docx-preview插件
- 安装插件
pnpm install docx-preview --save-dev
使用
<template> <div> <input type="file" @change="handleFileUpload" accept=".docx" /> <div ref="previewContainer" class="docx"></div> </div> </template>
<script setup> import { renderAsync } from "docx-preview"; import { ref } from "vue"; const previewContainer = ref(); const handleFileUpload = async (event) => { const file = event.target.files[0]; const arrayBufferFile = await file.arrayBuffer(); if (file) { console.log(file, "文件"); console.log(arrayBufferFile, "文件流"); previewContainer.value.innerHTML = ""; // 清空容器 // 1. 渲染file上传文件 // await renderAsync(file, previewContainer.value); // 2. 渲染arrayBufferFile文件流,通过接口获取。 await renderAsync( arrayBufferFile, // Blob | ArrayBuffer | Uint8Array, previewContainer.value, // 用于呈现文档内容的html元素, null, // HTMLElement, // 如果将使用空正文容器,则显示文档样式、数字、字体的元素. { className: "docx", // (string = "docx") 默认类和文档样式类的类名前缀 inWrapper: false, //boolean = true), //允许围绕文档内容呈现包装器 hideWrapperOnPrint: false, //boolean = false), //禁用打印时的包装样式 ignoreWidth: false, //boolean = false), //禁用页面的渲染宽度 ignoreHeight: false, //boolean = false), //禁用页面的渲染高度 ignoreFonts: false, //boolean = false), //禁用字体渲染 breakPages: true, //boolean = true), //启用分页符上的分页符 ignoreLastRenderedPageBreak: true, //boolean = true), //禁用上次呈现的分页符元素的分页术 experimental: false, //boolean = false), //启用实验特征选项卡停止计算 trimXmlDeclaration: true, //boolean = true), //如果在解析之前将从xml文档中删除true xml声明 useBase64URL: false, //boolean = false), //如果真图像字体等将转换为基本64 url,否则将使用url创建对象url renderChanges: false, //允许对文档更改和删除进行实验性渲染 renderHeaders: true, //启用标头呈现 renderFooters: true, //启用脚部渲染 renderFootnotes: true, //启用脚注渲染 renderEndnotes: true, //启用尾注渲染 renderComments: false, //启用实验性评论渲染 renderAltChunks: true, //启用alt块html部分渲染 debug: false, //boolean = false), //启用其他日志记录 } ).then((res) => { console.log(res); }); } }; </script>
<style scoped> .docx { background: #fff; } </style>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。