Appearance
BizFileViewer 文件预览
文件在线预览:native 引擎(默认)零依赖——PDF 走浏览器内置查看器、图片直接渲染;pdfjs 引擎提供页码 / 缩放控制(可选);office 内置渲染(可选)——注入 docx-lib(docx-preview)/ xlsx-lib(SheetJS)后,.docx / .xlsx / .xls / .csv 在组件容器内直接渲染(文档不出内网);未注入时仍可由业务侧经 office-viewer 对接自建预览服务(kkFileView / onlyoffice)。合同 / 附件 / 扫描件在线查看。
依赖说明(按引擎区分)
- native 引擎(默认):零第三方依赖,开箱即用(PDF / 图片)。
- pdfjs 引擎:需自装 pdfjs-dist(可选 peer)并配置 worker,经
pdfjs-lib注入:
bash
npm i pdfjs-distts
import * as pdfjsLib from 'pdfjs-dist'
import workerUrl from 'pdfjs-dist/build/pdf.worker.min.mjs?url'
pdfjsLib.GlobalWorkerOptions.workerSrc = workerUrl- office 内置渲染(可选):自装 docx-preview(docx)与 / 或 xlsx(SheetJS,覆盖 xlsx/xls/csv)后注入,无转换服务依赖:
bash
npm i docx-preview xlsxts
import * as docxLib from 'docx-preview'
import * as XLSX from 'xlsx'
const xlsxLib = { read: XLSX.read, sheet_to_html: (s, o) => XLSX.utils.sheet_to_html(s, o) }- office 服务预览:不装上述库时,业务侧自建 kkFileView / onlyoffice 服务并传
office-viewer地址模板。
pdfjs-dist v5+ 已知问题:其代码依赖尚未普及的
Map.prototype.getOrInsertComputed(TC39 提案,见 pdf.js#20680),页面渲染前需补 3 行 polyfill,或降级使用 4.x:tsif (!Map.prototype.getOrInsertComputed) { Map.prototype.getOrInsertComputed = function (key, fn) { if (!this.has(key)) this.set(key, fn(key)) return this.get(key) } }
PDF 预览(native)
native 引擎走浏览器 PDF 查看器(Chrome / Edge / Firefox 原生支持),无需安装任何依赖。
图片 / 扫描件
office 对接自建服务
组件不内置任何 office 转换服务(避免把内部文档外发第三方):officeViewer 返回自建预览服务的完整 URL 后,以内嵌框架打开。示例服务为演示占位。
docx 内置预览
使用方自装 docx-preview 后经 docx-lib 注入(与 pdfjs 引擎同一注入模式,库不打包该依赖); 渲染发生在组件容器内,文档不出内网。旧版 .doc 不支持(走 officeViewer 服务或降级提示)。
xlsx 内置预览(多 sheet)
使用方自装 xlsx(SheetJS)后组装 { read, sheet_to_html } 注入; .xlsx / .xls / .csv 以 HTML 表格渲染,多 sheet 自动出页签(示例含「设备台账 / 维保记录」两个 sheet)。
pdfjs 引擎(页码 / 缩放)
工具栏出现「上一页 / 下一页 / 缩放」即 pdfjs 引擎生效;需项目内 npm i pdfjs-dist 并配置 worker。
类型自动分流
极简模式
Props
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| src | string | '' | 文件地址 |
| name | string | '' | 文件名(工具栏展示与下载命名) |
| type | 'auto' | 'pdf' | 'image' | 'office' | 'unknown' | 'auto' | 文件类型(auto 按扩展名推断) |
| engine | 'native' | 'pdfjs' | 'native' | 预览引擎 |
| pdfjs-lib | BizFileViewerPdfjsLib | — | pdfjs 引擎必传:注入的 pdfjs-dist 模块 |
| docx-lib | BizFileViewerDocxLib | — | .docx 容器内渲染:注入的 docx-preview 模块(可选自装) |
| xlsx-lib | BizFileViewerXlsxLib | — | .xlsx / .xls / .csv 表格渲染:注入的 SheetJS 组装对象(可选自装) |
| office-viewer | (src: string) => string | — | office 预览服务地址模板(未注入上述两库时生效) |
| height | number | 480 | 视口高度(px) |
| show-toolbar | boolean | true | 工具栏(文件名 / 翻页 / 缩放) |
| show-download | boolean | true | 下载按钮 |
Expose
| 名称 | 类型 | 说明 |
|---|---|---|
| renderPdf | () => Promise<void> | pdfjs 引擎手动重渲染 |
| loadOffice | () => Promise<void> | office 内置渲染手动重载(docx / sheet 通道) |