Skip to content

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-dist
ts
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 xlsx
ts
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:

ts
if (!Map.prototype.getOrInsertComputed) {
  Map.prototype.getOrInsertComputed = function (key, fn) {
    if (!this.has(key)) this.set(key, fn(key))
    return this.get(key)
  }
}

PDF 预览(native) ​

📄 采购合同-2026-098.pdf

native 引擎走浏览器 PDF 查看器(Chrome / Edge / Firefox 原生支持),无需安装任何依赖。

浏览器内置 PDF 查看器,零依赖。

图片 / 扫描件 ​

📄 发票扫描件-第1页.png
图片预览
📄 发票扫描件-第2页.png
图片预览
type=image 适配件预览。

office 对接自建服务 ​

📄 招标文件-2026-045.docx

组件不内置任何 office 转换服务(避免把内部文档外发第三方):officeViewer 返回自建预览服务的完整 URL 后,以内嵌框架打开。示例服务为演示占位。

office-viewer 返回自建预览服务完整 URL,内嵌框架打开(文档不出内网)。

docx 内置预览 ​

📄 设备采购合同.docx

使用方自装 docx-preview 后经 docx-lib 注入(与 pdfjs 引擎同一注入模式,库不打包该依赖); 渲染发生在组件容器内,文档不出内网。旧版 .doc 不支持(走 officeViewer 服务或降级提示)。

注入 docx-preview 库,.docx 在组件容器内直接渲染——无需预览服务、文档不出内网。

xlsx 内置预览(多 sheet) ​

📄 设备台账.xlsx

使用方自装 xlsx(SheetJS)后组装 { read, sheet_to_html } 注入; .xlsx / .xls / .csv 以 HTML 表格渲染,多 sheet 自动出页签(示例含「设备台账 / 维保记录」两个 sheet)。

自装 SheetJS 组装 { read, sheet_to_html } 注入;.xlsx / .xls / .csv 以表格渲染,多 sheet 页签切换。

pdfjs 引擎(页码 / 缩放) ​

📄 验收报告.pdf1 / ?
PDF 加载中...

工具栏出现「上一页 / 下一页 / 缩放」即 pdfjs 引擎生效;需项目内 npm i pdfjs-dist 并配置 worker。

自装 pdfjs-dist 注入实例,工具栏出现翻页与缩放。

类型自动分流 ​

📄 立项批复.pdf
📄 现场照片.jpg
该文件类型不支持在线预览
可下载后本地打开,或配置 officeViewer 对接自建预览服务
📄 2026预算表.xlsx
📄 BIM模型.rvt
该文件类型不支持在线预览
可下载后本地打开,或配置 officeViewer 对接自建预览服务
type="auto" 按扩展名分流 PDF / 图片 / office / 不支持降级。

极简模式 ​

隐藏工具栏纯预览(弹窗内嵌)。

Props ​

属性名类型默认值说明
srcstring''文件地址
namestring''文件名(工具栏展示与下载命名)
type'auto' | 'pdf' | 'image' | 'office' | 'unknown''auto'文件类型(auto 按扩展名推断)
engine'native' | 'pdfjs''native'预览引擎
pdfjs-libBizFileViewerPdfjsLib—pdfjs 引擎必传:注入的 pdfjs-dist 模块
docx-libBizFileViewerDocxLib—.docx 容器内渲染:注入的 docx-preview 模块(可选自装)
xlsx-libBizFileViewerXlsxLib—.xlsx / .xls / .csv 表格渲染:注入的 SheetJS 组装对象(可选自装)
office-viewer(src: string) => string—office 预览服务地址模板(未注入上述两库时生效)
heightnumber480视口高度(px)
show-toolbarbooleantrue工具栏(文件名 / 翻页 / 缩放)
show-downloadbooleantrue下载按钮

Expose ​

名称类型说明
renderPdf() => Promise<void>pdfjs 引擎手动重渲染
loadOffice() => Promise<void>office 内置渲染手动重载(docx / sheet 通道)