Skip to content

Demo 说明

See It Before You Ship It

一个好用的 Demo,不只是“给别人看看”,也是团队内部确认能力边界、联调文件样本和复现问题的最快入口。 当前仓库已经为所有已注册格式准备了可切换入口,适合在本地开发、依赖升级和上线前做完整回归。

本地可用的两个入口

入口地址适合做什么
主示例页/切换预置文件、上传本地文件、快速确认各类格式表现
文档比对页/compare.html左右并排预览两份文档,支持示例、URL、本地上传、交换、重置和同步滚动
iframe 示例页/example/embedded.html验证独立部署与二进制推送协议
适配层 Demopackages/demo同时验证 React 组件和纯 JS helper 的私有化 iframe 集成

主示例页

主示例页内置了完整示例列表,包括 Word、Excel、PPT、PDF、OFD、Typst、压缩包、邮件、OLB/DRA、DXF、Excalidraw、draw.io、EPUB、UMD、Markdown、代码/文本、图片、音频与视频。示例选择器按文件类型分组展示,每个样例都提供图标、格式名和文件名,点击后会立即打开并自动收起选择器。它适合做三件事:

  • 快速演示当前项目支持哪些文件类型
  • 用本地上传验证 file 方案
  • 在修改渲染逻辑后做肉眼回归检查
主示例页截图

主示例页提供分组样例文件盒子、URL 预览和上传预览,是最直接的联调入口。

文档比对页

文档比对页是独立入口,不会出现在主预览流程里,也不会改变 FileViewer 组件本身的默认工具栏。它适合让用户快速核对两份附件的版式差异,例如旧版合同与新版 Word、PDF 与源文档、PPTX 不同版本或 Markdown 与导出物。

直接访问:

text
/compare.html

生产环境体验地址:

text
https://viewer.flyfish.dev/compare.html

也可以用查询参数预置左右文件:

text
/compare.html?left=/example/test.doc&right=/example/word.docx

当前支持的查询参数只有两个,文档中不建议额外扩展临时参数,避免和后续组件 API 冲突:

参数说明示例
left左侧面板初始文件 URL,支持同源相对路径或浏览器可访问的绝对 URL/example/test.doc
right右侧面板初始文件 URL,支持同源相对路径或浏览器可访问的绝对 URL/example/word.docx

页面提供三种输入方式,左右两侧互不影响:

  • 内置示例: DOC、DOCX、PDF、PPTX、Typst、Markdown,可快速演示常见文档差异
  • URL 输入: 粘贴业务文件地址后点击预览,适合联调带签名的临时文件链接
  • 本地上传: 直接选择本机文件,适合客户现场复现和售前演示

比对页顶部提供“同步滚动”“交换”“重置”。同步滚动按两侧滚动比例联动,不要求两份文档页数完全一致;两侧内容依然各自独立渲染,所以 PDF、Word、PPTX、Markdown、Typst 等格式会继续复用主预览器的按需异步加载、打印能力判断和渲染边界。

为了保持左右对照清晰,比对页默认关闭每个预览器内部操作栏。如果需要下载、打印、导出 HTML、水印或业务权限钩子,请使用主预览入口或在业务侧基于 FileViewer 组件自定义比对容器。

私有化部署时,pnpm build-only 产物、Docker 镜像和公开成品仓库的 demo/ 目录都会包含同一个入口:

text
demo/compare.html

上线前建议至少验证下面两条:

bash
pnpm verify:demo-output
text
/compare.html?left=/example/test.doc&right=/example/word.docx

这项功能做的是视觉并排预览,不是语义 diff。它不会自动标红文本改动,也不会解析 Office 修订痕迹;如果需要合同逐字差异、表格单元格差异或 PDF OCR 差异,请在业务侧接入专门的 diff 服务,再把结果作为文件或 HTML 交给预览器展示。

Word 页面效果

Word 示例被单独拿出来说明,因为它已经不只是“能打开”,而是具备更明确的页面感。.doc.docx 都会尽量保留灰色页面底、白色纸张、页面居中和宽度自适应的阅读体验。

DOC 文件渲染截图

Word 文件会显示在灰色工作台中的白色纸张上,页面居中,阅读体验更接近真实文档。

iframe 示例页

public/example/embedded.html 演示了宿主页面如何下载文件,再把 Blob 推送给预览器。

Iframe 示例页截图

iframe 示例适合验证跨系统集成路径,尤其适合做带鉴权文件的联调。

React / 纯 JS 适配层 Demo

仓库中的 packages/demo 会把 packages/web/viewer 同步到自己的 public/file-viewerpublic/vendor/file-viewer,页面上同时挂载 React 组件和纯 JS helper,并使用 /vendor/file-viewer/index.html 验证自定义子路径下的 DOCX 预览。调试时运行:

bash
pnpm dev:adapters

构建上线前运行:

bash
pnpm build:adapter-demo
pnpm --filter @flyfish-group/file-viewer-demo preview

如果开发服务和 build preview 中两个面板都能显示同一份 DOCX 示例,就说明 React 组件、纯 JS mountViewerFrame、自定义 viewerUrl、完整静态目录复制和 iframe 资源加载都可用。

确实不能使用 npm helper 的项目,可以访问 /manual-js.html 查看纯手写 iframe 示例。这个页面不引入 React,也不调用 mountViewerFrame,只演示标准 iframe 协议和完整 viewer 静态目录要求。

示例文件清单

仓库中当前提供的示例文件位于 public/example/:

代码、配置和日志类样本已经按真实集成场景扩充,不再只是几行占位内容;它们会覆盖注释、函数、类型、嵌套配置、SQL CTE、Shell 参数、diff 块和长内容滚动,适合验证代码高亮的实际可读性。word.docxmarkdown.md 使用更丰富的多页/长内容样例,pdf.pdf 使用项目方提供的 13 页《PDF沉浸式翻译技术说明》,report.typ 使用项目内编写的多页 Typst 源文件报告,用于验证浏览器端直接编译、按页预览、打印和 HTML 导出链路。CAD、3D、绘图、音频和 EPUB 样本使用公开文件或项目内最小夹具,UMD 电子书样本由项目内生成,来源记录在 public/example/SOURCES.md

文件用途对应能力
test.doc验证老 Word 文档链路doc + Word 风格页面容器
word.docx验证现代 Word 文档、多页纸张、宽度自适应和完整打印docx
excel.xlsx验证表格样式链路xlsx
excel.xlsm验证宏工作簿扩展名映射xlsm
excel.xlsb验证二进制工作簿扩展名映射xlsb
excel.xls验证老 Excel 扩展名映射xls
table.csv验证轻量数据表格链路csv
excel.ods验证 OpenDocument 表格扩展名映射ods
excel.fods验证 Flat ODS 扩展名映射fods
excel.numbers验证 Numbers 扩展名映射numbers
ppt.pptx验证演示文稿渲染、组合图形、主题背景和图片资源pptx
pdf.pdf项目方提供的 13 页真实技术说明 PDF,验证多页阅读、缩放工具栏、页面/目录导航窗格、完整打印和 HTML 导出pdf
ofd.ofd验证 OFD 在线预览ofd
report.typ验证 Typst 源文件直接读取、浏览器 WASM 编译、按页 SVG 预览、打印和 HTML 导出typ
drawing.dxf使用公开 DXF 样例验证 CAD 图纸预览、平移、缩放和图层控制dxf
sample.dwg使用公开 DWG 样例验证 DWG 内嵌预览图提取和原因提示dwg
model.gltf使用项目内嵌入数据的最小 glTF 验证 Web 3D 预览gltf
model.obj使用项目内生成的 OBJ 四面体验证 OBJ 几何预览obj
model.stl使用项目内生成的 STL 四面体验证 STL 几何预览stl
model.ply使用项目内生成的 PLY 四面体验证 PLY 几何预览ply
model.step使用项目内生成的最小 STEP 验证工程 CAD 格式转换原因提示step
flow.excalidraw使用公开 Excalidraw 图纸验证官方恢复与 SVG 导出预览excalidraw
process.drawio使用官方 draw.io 示例验证 diagrams.net Viewer 预览drawio
book.epub使用 Project Gutenberg 公开 EPUB 验证电子书目录和滚动阅读epub
book.umd使用项目内生成的 UMD 电子书验证元数据、目录和 zlib 正文解析umd
archive.zip验证 ZIP 目录读取、按需解压、缓存和压缩包内文档预览zip
archive.tar.gz验证 TAR.GZ 压缩包兼容入口和内部文件预览gz
sample.eml验证 EML 头信息、HTML/文本正文、附件下载和附件预览eml
sample.msg使用 msgreader 上游公开样例验证 Outlook MSG 解析msg
sample.olb使用项目内生成的 CFB 元件库夹具验证 OLB 结构预览olb
sample.dra使用项目内生成的 CFB 封装图纸夹具验证 DRA 结构预览dra
markdown.md验证 Markdown 长内容、表格、代码块和明暗主题阅读面md
notes.markdown验证 Markdown 长扩展名和主题隔离markdown
text.txt验证纯文本展示txt
data.json验证 JSON 高亮json
code.js验证 JavaScript 高亮js
code.mjs验证 ES Module JavaScript 高亮mjs
code.cjs验证 CommonJS JavaScript 高亮cjs
code.ts验证 TypeScript 高亮ts
code.tsx验证 TSX 高亮tsx
code.jsx验证 JSX 高亮jsx
code.css验证 CSS 高亮css
page.html验证 HTML 源码展示,不作为网页执行html
page.htm验证 HTM 源码展示,不作为网页执行htm
data.xml验证 XML 高亮xml
component.vue验证 Vue 单文件组件高亮vue
config.yaml验证 YAML 高亮yaml
config.yml验证 YML 高亮yml
settings.ini验证 INI 高亮ini
script.sh验证 Shell 脚本高亮sh
script.bash验证 Bash 脚本高亮bash
query.sql验证 SQL 高亮sql
main.go验证 Go 高亮go
main.rs验证 Rust 高亮rs
index.php验证 PHP 高亮php
main.c验证 C 高亮c
main.cpp验证 C++ 高亮cpp
module.cc验证 C++ 兼容扩展名高亮cc
main.h验证 C/C++ 头文件高亮h
main.hpp验证 C++ 头文件高亮hpp
program.cs验证 C# 高亮cs
change.diff验证 diff 高亮diff
code.java验证 Java 高亮java
code.py验证 Python 高亮py
app.log验证日志文本展示log
pic.png验证 PNG 图片预览png
pic.jpg验证 JPG 图片预览jpg
pic.jpeg验证 JPEG 图片预览jpeg
pic.gif验证 GIF 图片预览gif
pic.bmp验证 BMP 图片预览bmp
pic.tiff验证 TIFF 图片预览tiff
pic.tif验证 TIF 图片预览tif
vector.svg验证 SVG 图片预览svg
pic.webp验证 WEBP 图片预览webp
audio.mp3使用 MDN CC0 音频验证 MP3 原生播放mp3
audio.ogg使用 Wikimedia Commons 音频验证 OGG 原生播放ogg
video.mp4验证视频播放mp4
部分兼容格式示例复用了同一份可解析内容来覆盖扩展名入口,例如表格兼容格式和图片兼容格式。Excel 当前使用虚拟表格展示,打印按钮会按能力自动隐藏,避免只打印当前视口。上线前仍建议使用业务真实文件补一轮回归。

完整覆盖与绘图说明

上面的清单已经覆盖当前注册的全部扩展名。DWG 当前作为 CAD 兼容入口保留,打开 .dwg 时会尽量提取内嵌预览图;如果客户需要完整 DWG 几何解析,建议在业务侧转换为 DXF 后再交给前端预览,避免把 GPL 或闭源 DWG 解析运行时打进组件包。

3D 模型示例覆盖 glTF、OBJ、STL、PLY 四条最常用的浏览器模型入口;FBX、DAE、3DS、3MF、AMF、USD/USDZ、KMZ、PCD、VRML/WRL、XYZ、VTK/VTP 等扩展名也已经注册到同一个 Three.js 预览器。STEP/IGES/IFC/3DM 会展示转换原因,建议用客户真实模型补充回归。

Excalidraw 使用官方 @excalidraw/excalidrawrestore 补齐真实公开文件中常见的精简字段,再通过 exportToSvg 生成只读 SVG;draw.io / diagrams.net 文件使用官方 GraphViewer 渲染 mxGraphModel / mxfile。组件不自行实现绘图格式解析,只做按需加载、容器挂载和错误提示。

压缩包样例用于验证 libarchive.js Worker、目录读取、按需解压、IndexedDB 缓存和内部文件继续预览。邮件样例用于验证 EML / MSG 的头信息、正文切换、附件下载和附件预览。OLB / DRA 样例是项目内生成的 CFB 容器,用于验证 EDA 文件结构树、对象候选、属性、诊断和可读字符串索引。

公开样例来源

示例来源许可
drawing.dxfmozman/ezdxfexamples_dxf/wipeout_door.dxfMIT
sample.dwgdshn06/cad-webviewer-unitybaseline-sample.dwgMIT
model.gltf / model.obj / model.stl / model.ply / model.step项目内生成的最小 3D fixtureApache-2.0
flow.excalidrawneo4j-labs/agent-memorypoleo-model.excalidrawApache-2.0
process.drawiojgraph/drawio-diagramsblog/data-flow.drawioApache-2.0
book.umd项目内生成的最小 UMD 文本电子书 fixtureApache-2.0
archive.zip / archive.tar.gz项目内打包的丰富 PDF、DOCX、Markdown、TypeScript 和 JSON 示例集合Apache-2.0
sample.eml项目内生成的标准 MIME 邮件 fixtureApache-2.0
sample.msgHiraokaHyperTools/msgreadertest/A memo.msgMIT
sample.olb / sample.dra项目内生成的 CFB EDA fixtureApache-2.0
audio.mp3MDN interactive examples 的 t-rex-roar.mp3CC0
audio.oggWikimedia Commons 的 Example.oggCC BY-SA 3.0
book.epubProject Gutenberg 的 Alice's Adventures in Wonderland EPUBPublic domain in the USA

这些样例的作用是验证预览器兼容性,不承诺覆盖你业务中所有 CAD 图元、绘图插件、UMD 方言或打包器输出。上线前仍建议把自己的高频文件加入回归清单。

建议保留一套自己的回归样本

如果你要把这个项目接进正式业务,建议你把下面这几类文件各留一份,形成自己的最小回归集:

  • 一份版式复杂的 docx
  • 一份历史 .doc
  • 一份带合并单元格和颜色的 xlsx
  • 一份兼容格式表格,比如 xlscsv
  • 一份业务里最常见的 pdf
  • 一份真实 OFD 发票或归档件
  • 一份 DXF 图纸
  • 一份 Excalidraw 或 draw.io 图纸
  • 一份 EPUB 或 UMD 电子书
  • 一份业务常见压缩包,里面至少包含 PDF、Office 和代码/文本文件
  • 一份 EML 或 MSG 邮件,最好带附件
  • 一份 OLB 或 DRA,如果业务会接触 EDA 文件
  • 一份 Markdown 说明文档
  • 一份日志或配置文件,比如 log / json
  • 一份源码文件,比如 ts / py / java
  • 一份 svgwebp 图片
  • 一份业务常用音频,比如 mp3ogg

这样每次升级预览器、调整依赖或准备发版时,都能快速知道“这次有没有把关键能力碰坏”。

建议你先用仓库内置样本确认主链路,再用自己的真实文件补一轮回归。前者帮你判断“项目本身能不能跑”,后者帮你判断“它能不能真正接住你的业务”。

Released under the Apache-2.0 License.