纯前端文件预览如何接入:File Viewer 221 种格式浏览器端预览指南
2026/8/27 16:25:57 网站建设 项目流程

纯前端文件预览如何接入:File Viewer 221 种格式浏览器端预览指南

【免费下载链接】file-viewerBrowser-native Office / PDF / CAD / archive viewer for internal web apps, with Vue, React, Svelte, jQuery, Web Components, and no server-side conversion.项目地址: https://gitcode.com/gh_mirrors/file/file-viewer

File Viewer 是纯前端文件预览组件库,面向 OA、内网与私有化后台:Word、Excel、PDF、CAD、压缩包等 221 种格式在浏览器内解析与渲染,全程不依赖服务端转码。

先划清边界:它擅长什么、不擅长什么

先说它不做什么。File Viewer 是只读预览工具,不是 Office 或 CAD 编辑器,不能改内容后保存。保真度也不做统一承诺:渲染结果受文件结构、内嵌字体、厂商扩展和浏览器能力影响。轻量组件不会悄悄带上任何渲染器——只装@file-viewer/vue3就传一个 .pptx,看到的是提示安装对应 preset 的状态页,而不是预览画面。

它能覆盖的部分:

  • Office 与 PDF- .doc/.docx/.xls/.xlsx/.ppt/.pptx、PDF、OFD、RTF、OpenDocument,属于 32 条预览管线的一部分
  • CAD 与 3D- DWG、DXF、DWF/DWFX 走本地 WASM 解析,另有 glTF、STL、STEP 等模型格式
  • 压缩包与邮件- 20 多种压缩格式支持嵌套文件预览,.eml/.msg/.mbox 可拆出正文和附件
  • 框架覆盖- Vue 3、Vue 2.6/2.7、React 16.8–19、Svelte、jQuery、原生 Web Component,共 57 个 npm 目标

各格式支持级别不同,以 完整格式矩阵 为准,别按扩展名想当然。

从 0 到第一次预览:最小可运行路径

第一次接入建议用 full 包:它内置preset-all和同版本 Worker、WASM、字体资产,不需要再装 preset。以 Vue 3 为例:

npm install @file-viewer/vue3-full
<script setup lang="ts"> import { FileViewer } from '@file-viewer/vue3-full' </script> <template> <FileViewer url="/files/handbook.pdf" /> </template>

React 项目换成@file-viewer/react-full,原生 JS 用@file-viewer/web-fullmountViewer。Vite 项目加装@file-viewer/vite-plugin并开启copyAssets: true,开发和构建都会把 Worker、WASM、字体资产发布到public/file-viewer;Webpack、Vue CLI 走 full 包自带的file-viewer-copy-assetsCLI。运行时默认从/file-viewer/取资产,缺资产时轻量格式仍能打开,但全格式能力不完整。

场景走查

OA 文档附件:Word、Excel、PPT

用户动作:在合同列表点击一个 .docx 附件。 配置:办公类系统装@file-viewer/preset-office,传给options.preset

import officePreset from '@file-viewer/preset-office' const options = { rendererMode: 'replace', preset: officePreset }

看到的效果:Word 按灰底白页分页显示,支持缩放和文档内搜索;Excel 保留公式、图表与单元格内图片;PPTX 经 Worker 引擎渲染复杂图形。有保密要求时加watermark: { text: 'Internal', opacity: 0.14 },启用的水印会出现在打印输出里。

工程图纸与压缩包

用户动作:打开工程资料库里的 DWG 图纸或 zip 附件。 配置:装@file-viewer/preset-engineering,覆盖 DWG/DXF/DWF、3D、EDA、压缩包等管线;重管线按格式懒加载。 看到的效果:DWG 由本地 WASM 渲染,文件不出浏览器;zip 目录树里点击嵌套文件直接预览,不必先下载再用别的软件打开。

内网离线部署

用户动作:运维需要在物理隔离环境跑起完整预览能力。 配置:把 full 包的 Worker、WASM、字体、vendor 资产发布到自己的源,或直接使用官方flyfishdev/file-viewer镜像并固定版本 tag。 看到的效果:内网打开开发者工具,外部请求为零,解析与渲染全部在浏览器完成。分发细节见 内网分发指南。

进阶用法

按需只装需要的格式

只预览 PDF 的系统,装@file-viewer/renderer-pdf并传renderers: [pdfRenderer],配rendererMode: 'replace'从空注册表开始,装什么就是什么。Vite 项目加fileViewerRenderers({ copyAssets: true }),插件会自动发现已安装的@file-viewer/preset-* 并注入生成的虚拟模块;chunkStrategy: 'renderer'按渲染器拆 chunk,方便缓存与体积排查。Webpack、Rspack、Rollup 构建走同一套 CLI 复制资产,不需要改打包配置。

主题定制:Shadow DOM 与 CSS 变量

styleIsolation默认'auto'即 Shadow DOM,宿主全局 CSS 无法破坏工具栏和文档内容;需要继承宿主字体与主题变量时改用'scoped'。定制主题不碰内部类名:在组件节点或:root上设置--file-viewer-bg--file-viewer-text--file-viewer-font--file-viewer-toolbar-bg等变量即可,结构调整用::part(toolbar)::part(button)::part(content)这类稳定命名。theme支持'light'、'dark'、'system'三档。

性能由懒加载兜底:PDF、CAD、Typst、压缩包等重格式按格式加载,首屏 JS 不含这些管线;文本与代码超过 512 KiB 自动切虚拟行;压缩包结果可缓存到 IndexedDB。水印、工具栏、搜索、precheckFileViewerSource预检等其余选项见 usage 文档。

它是怎么做到的

分层很直接:每层职责单一,渲染器只在被需要时才参与。

  • 组件层- Vue、React、Svelte、jQuery、原生 Web Component 各实现自己的原生生命周期,不嵌套别的框架实现
  • 核心层-@file-viewer/core,与框架无关的 TypeScript,统一源加载、生命周期、工具栏、搜索、缩放、打印等共享协议
  • 预设与渲染器层- 221 个注册扩展名映射到 32 条预览管线,每个渲染器包各管一条格式管线,preset 按场景组合
  • 运行资产层- Worker、WASM、字体、vendor 资产,全部从自己的源提供,预览路径留在浏览器内

坑与限制

  • 资产不完整是最常见故障- 只拷 JS 入口并不完整,Worker、WASM、字体和 vendor 资产必须同版本且同源;用copyAssets: truefile-viewer-copy-assetsCLI,确认/file-viewer/基础路径可访问。
  • 保真度随文件浮动- 内嵌字体、厂商扩展、浏览器能力都会影响结果;PDF 文本提取是分级支持,扫描件需要 OCR,不完整的多页提取会给出明确提示而不是半成品。
  • 大文件和加密压缩包要留余量- 内存占用上升;挂载前用precheckFileViewerSource校验文件签名,避免加载后白屏;上线前在 Chromium、Firefox、WebKit 目标浏览器各跑一遍冒烟集。

FAQ

它是编辑器吗,能否修改后保存?

只读预览工具。支持打印、导出 HTML(toolbar.exportHtml)和水印遮罩打印,但没有编辑保存路径。

full 包和 preset 怎么选?

full包内置preset-all与同版本资产集,一步到位但体积更大;preset 用于精确控制交付哪些格式。已装 full 包时不要再装另一个 preset。

哪些浏览器能用?

官方覆盖 Chromium、Firefox、WebKit 主流浏览器,依赖 Web Worker 与 WASM;内网老版本浏览器需自行验证兼容性。

扫描件 PDF 能搜索和比对吗?

没有文本层就不行。文本层 PDF 可以搜索,文档比对目前对 DOCX 与文本文件稳定,PDF 比对属分级支持,扫描件需外接 OCR。

接入自有系统时,先用 full 包跑通链路,再按实际格式占比切到 preset。可运行的示例工程在 examples/,内网与隔离环境的细节对照 内网分发指南 逐项核对。

【免费下载链接】file-viewerBrowser-native Office / PDF / CAD / archive viewer for internal web apps, with Vue, React, Svelte, jQuery, Web Components, and no server-side conversion.项目地址: https://gitcode.com/gh_mirrors/file/file-viewer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询