一、内网

1.docx

使用docx-preview

  安装插件

 1npm i docx-preview -S

 引入依赖

 1import { renderAsync } from "docx-preview";let docx = import.meta.glob("docx-preview"); 
 1 v-if="['docx'].includes(detailItem.fileType)"//js部分 detailItem.value为当前文件的数据对象const previewfile = () => {  fetch(detailItem.value.filePath)      let docData = response.blob();      let docxDiv= document.getElementsByClassName("docxDiv");      renderAsync(docData, docxDiv[0], null, {        inWrapper: true, // 启用围绕文档内容渲染包装器        ignoreWidth: false, // 禁止页面渲染宽度        ignoreHeight: false, // 禁止页面渲染高度        ignoreFonts: false, // 禁止字体渲染        breakPages: true, // 在分页符上启用分页        ignoreLastRenderedPageBreak: true, //禁用lastRenderedPageBreak元素的分页        experimental: false, //启用实验性功能(制表符停止计算)        trimXmlDeclaration: true, //如果为真,xml声明将在解析之前从xml文档中删除

2.pdf

使用vue3-pdf-app

  安装插件

 1npm install vue3-pdf-app

  引入依赖

 1import VuePdfApp from "vue3-pdf-app";import "vue3-pdf-app/dist/icons/main.css";

  使用方法非常简单

 1// detailItem.filePath为文件路径<vue-pdf-app style="height: 100vh; width: 100vw" :pdf="detailItem.filePath"></vue-pdf-app>

3.pptx

使用pptx.js

首先需要下载pptx的文件

github: 

pptx https://github.com/meshesha/PPTXjs

官网地址:PPTXjs https://pptx.js.org/

下载完成后放到public下的lib文件夹中, 然后在index.html中引入

 1<link rel="stylesheet" href="/lib/css/pptxjs.css"><link rel="stylesheet" href="/lib/css/nv.d3.min.css"> <script type="text/javascript" src="/lib/js/jquery-1.11.3.min.js"></script><script type="text/javascript" src="/lib/js/jszip.min.js"></script> <script type="text/javascript" src="/lib/js/filereader.js"></script> <script type="text/javascript" src="/lib/js/d3.min.js"></script> <script type="text/javascript" src="/lib/js/nv.d3.min.js"></script> <script type="text/javascript" src="/lib/js/dingbat.js"></script> <script type="text/javascript" src="/lib/js/pptxjs.js"></script><script type="text/javascript" src="/lib/js/divs2slides.js"></script> 

使用:

 1<div id="pptx" v-if="detailItem.fileType === 'pptx'"></div>// js部分 jquery已在index.html中引入 无需另外安装const handlePPtx = () => {      pptxFileUrl: detailItem.value.filePath, //pptx文件地址

二、外网(文件地址须在公网环境下)

调用XDOC的服务

 1<iframe :src="'https://view.xdocin.com/view?src=https://test-jpfile1.oss-cn-shenzhen.aliyuncs.com//Bom/bom/2022/1/19/2022011911370824626513.pdf'"></iframe>

三、移动端适配

vue3-pdf-app会自动适配 , 主要是docx和pptx的适配问题

docx : 在文档加载完成后 进行页面的缩放

 1renderAsync(docData, childRef[0], null, {        inWrapper: true, // 启用围绕文档内容渲染包装器        ignoreWidth: false, // 禁止页面渲染宽度        ignoreHeight: false, // 禁止页面渲染高度        ignoreFonts: false, // 禁止字体渲染        breakPages: true, // 在分页符上启用分页        ignoreLastRenderedPageBreak: true, //禁用lastRenderedPageBreak元素的分页        experimental: false, //启用实验性功能(制表符停止计算)        trimXmlDeclaration: true, //如果为真,xml声明将在解析之前从xml文档中删除        console.log("res---->", res);        let timer = setInterval(() => {          const $slides = $(".docx-wrapper");if ($slides.children().length) {            const slidesWidth = Math.max(              ...Array.from($slides.children()).map((s) => s.offsetWidth)            const $wrapper = $("#docRef");            const wrapperWidth = window.innerWidth;            const wrapperHeight = window.innerHeight;              transform: `scale(${wrapperWidth / slidesWidth})`,"transform-origin": "top left",              height: wrapperHeight * (1 / (wrapperWidth / slidesWidth)) + "px",

pptx: 跟doc同样的问题

 1await $("#pptx").pptxToHtml({pptxFileUrl: "/api" + detailItem.value.filePath, let timer = setInterval(() => {const $slides = $(".slides");if ($slides.children().length) {const slidesWidth = Math.max(        ...Array.from($slides.children()).map((s) => s.offsetWidth)const $wrapper = $("#pptx");const wrapperWidth = window.innerWidth;const wrapperHeight = window.innerHeight;transform: `scale(${wrapperWidth / slidesWidth})`,"transform-origin": "top left",height: wrapperHeight * (1 / (wrapperWidth / slidesWidth)) + "px",
个人笔记记录 2021 ~ 2025