demo.md 23 KB

Demo 说明

See It Before You Ship It

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

本地可用的两个入口

入口 地址 适合做什么
主示例页 / 切换预置文件、上传本地文件、快速确认各类格式表现
文档比对页 /compare.html 左右并排预览两份文档,支持示例、URL、本地上传、交换、重置、同步滚动、聚焦文档浮层搜索和行级定位
组件 Demo apps/component-demo 同时验证 Vanilla JS / Pure Web、React、Vue3、jQuery、Svelte 和 script 标签接入

主示例页

主示例页顶部提供 6 个场景快捷入口,可以直接打开 Word 合同、Excel 报表、PPT 材料、DWG 图纸、压缩包和邮件样例,帮助第一次访问的用户不用理解完整格式矩阵就先看到效果。每个当前样例都会在侧栏展示对应的 React @file-viewer/react-full 接入代码,点击复制后即可放进业务页试跑。

主示例页也内置了完整示例列表,包括 Word、Excel、PPT、PDF、OFD、Typst、XMind、压缩包、邮件、OLB/DRA/GDS/OASIS、CAD、地理数据、3D 模型、Excalidraw、draw.io、EPUB、UMD、Markdown、代码/文本、图片、音视频、字体/设计资产和结构化数据。示例选择器按文件类型分组展示,每个样例都提供图标、格式名和文件名,点击后会立即打开并自动收起选择器。它适合做三件事:

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

Demo 默认跟随浏览器语言。中文浏览器进入中文样例体系,其他语言进入英文样例体系;也可以用 ?lang=zh-CN?lang=en-US 强制指定。英文体系包含公开英文 DOCX、PDF、PPTX、XLSX 样例,以及本地英文 Markdown、文本、日志、CSV、JSON、TypeScript、JavaScript、GeoJSON、glTF 和压缩包嵌套样例,运行时不依赖公网 CDN。

动图展示主示例页、分组样例文件盒子、Office/PDF 阅读面、PPTX 与文档比对,是最直观的联调入口。

文档比对页

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

直接访问:

/compare.html

生产环境体验地址:

https://demo.file-viewer.app/compare.html

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

/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 工具栏”“交换”“重置”和行号定位。同步滚动按两侧真实滚动容器的滚动比例联动,不要求两份文档页数完全一致;搜索采用和主预览一致的轻量浮层交互,先聚焦左侧或右侧文档,再用浏览器常见查找快捷键呼出搜索框,命中只作用于当前聚焦文档,避免两侧同时滚动导致视线丢失。行级定位会复用预览器抽取出的通用锚点,文本类文档通常定位到段落/行块,PDF 会优先使用可用文本层和页面锚点。

PDF 在比对页中默认隐藏自身阅读工具栏,只保留正文和可滚动页面,避免左侧 Word / Markdown 与右侧 PDF 因多一条页码缩放栏而错位。需要查看 PDF 页码、缩放、旋转或目录时,可以关闭“隐藏 PDF 工具栏”开关。

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

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

demo/compare.html

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

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

这项功能做的是视觉并排预览,不是语义 diff。它不会自动标红文本改动,也不会解析 Office 修订痕迹;如果需要合同逐字差异、表格单元格差异或 PDF OCR 差异,请在业务侧接入专门的 diff 服务,再把结果作为文件或 HTML 交给预览器展示。预览器已经提供 collectDocumentAnchors()scrollToLine()scrollToAnchor()searchDocument()getDocumentTextChunks(),业务侧可以基于这些通用结构继续实现 AI 溯源、向量化召回、命中高亮、来源定位和审计记录。

Word 页面效果

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

动图中包含 Word / PDF 阅读面和文档比对效果;Word 文件会显示在灰色工作台中的白色纸张上,页面居中,阅读体验更接近真实文档。

Vanilla JS / React 组件 Demo

仓库中的 apps/component-demo 会同时挂载 React 组件、Pure Web controller、<flyfish-file-viewer> Custom Element、Vue3 组件、jQuery 组件、Svelte action 和普通 script 标签全局包,用同一份 DOCX 示例验证组件原生挂载、生命周期事件、文件输入和资源加载。调试时运行:

pnpm dev:components

构建上线前运行:

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

如果开发服务和 build preview 中各个面板都能显示同一份 DOCX 示例,就说明 React 组件、纯 JS Custom Element / mountViewer、jQuery、Svelte 和 script 标签全局包都可用。

示例文件清单

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

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

文件 用途 对应能力
test.doc 验证老 Word 文档链路 doc + Word 风格页面容器
word.docx Basel Convention 公开中文正式文档,验证现代 Word 长文档、标题层级、表格、图示、白色纸张和完整打印 docx
excel.xlsx 验证表格样式链路 xlsx
excel.xlsm 验证宏工作簿扩展名映射 xlsm
excel.xlsb 验证二进制工作簿扩展名映射 xlsb
excel.xls 验证老 Excel 扩展名映射 xls
table.csv 验证轻量数据表格链路 csv
excel.ods The Document Foundation 公开 ODS 表格,验证 OpenDocument 表格扩展名映射、真实工作表和样式读取 ods
excel.fods 标准 Flat ODS XML 夹具,验证平面 OpenDocument 表格扩展名映射 fods
excel.numbers 验证 Numbers 扩展名映射 numbers
sample.rtf 验证 RTF 富文本兼容预览 rtf
document.odt The Document Foundation 公开 ODT 模板,验证 OpenDocument 文本正文抽取和纸张阅读面 odt
ppt.pptx R4Psy 公开中文课程课件,验证多页幻灯片、图片资源、主题背景、组合元素和富文本排版 pptx
slides.odp The Document Foundation 公开 ODP 文件,验证 OpenDocument 演示文稿页面结构和文本预览 odp
pdf.pdf 项目方提供的 13 页真实技术说明 PDF,验证多页阅读、缩放工具栏、页面/目录导航窗格、完整打印和 HTML 导出 pdf
ofd.ofd 验证 OFD 在线预览 ofd
report.typ 验证 Typst 源文件直接读取、浏览器 WASM 编译、按页 SVG 预览、打印和 HTML 导出 typ
drawing.dxf 使用公开 DXF 样例验证 CAD 图纸预览、平移、缩放、图层和 WebGL/Canvas fallback dxf
sample.dwg 使用 Autodesk 官方 DWG 样例验证 Worker + LibreDWG WASM 几何解析、块、表格和 CAD 视图适配 dwg
samples/apache/blocks_and_tables.dwf 使用 Apache Tika 公开 Jira 附件验证原生 DWF 容器、块和表格渲染 dwf
samples/autodesk/house.dwfx 使用 Autodesk 官方 Viewer 教程样例验证 DWFx/XPS native renderer、多页结构和 CAD 视图适配 dwfx
samples/autodesk/robot-arm.dwfx 使用 Autodesk 官方 Viewer 教程样例验证 W2D/W3D native renderer 和复杂装配图形 dwfx
mindmap.xmind 使用项目内生成的双 sheet XMind 夹具验证脑图节点、标签、备注、链接、目录、Panzoom 画布拖拽平移、移动端双指缩放、适配画布、缩放、搜索和导出 xmind
map.geojson 验证 GeoJSON 点线面离线地图预览 geojson
route.kml 验证 KML 转 GeoJSON 后预览 kml
track.gpx 验证 GPX 轨迹转 GeoJSON 后预览 gpx
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 与内置 SVG fallback 链路 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.mbox 验证 MBOX 归档识别和首封邮件预览 mbox
sample.olb 使用项目内生成的 CFB 元件库夹具验证 OLB 结构预览 olb
sample.dra 使用项目内生成的 CFB 封装图纸夹具验证 DRA 结构预览 dra
layout.gds 使用项目内生成的 GDSII 版图夹具验证库名、单元、层、边界、路径、文本、引用和 SVG 版图预览 gds
layout.oas / layout.oasis 使用项目内生成的 OASIS 文本结构夹具验证 OAS/OASIS 路由和版图结构退化预览 oas / oasis
markdown.md 验证 Markdown 长内容、表格、代码块和明暗主题阅读面 md
notes.markdown 验证 Markdown 长扩展名和主题隔离 markdown
text.txt 验证纯文本展示 txt
data.json 验证 JSON 高亮 json
data.jsonc 验证 JSONC 注释配置高亮 jsonc
data.json5 验证 JSON5 宽松对象语法高亮 json5
notebook.ipynb 验证 Jupyter Notebook JSON 结构预览 ipynb
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
config.toml 验证 TOML 配置高亮 toml
settings.ini 验证 INI 高亮 ini
service.proto 验证 Protocol Buffers IDL 高亮 proto
infrastructure.hcl 验证 HCL 基础设施配置展示 hcl
formula.tex 验证 TeX / LaTeX 源码展示 tex
graph.gv 验证 Graphviz DOT 源码展示 gv
request.http 验证 HTTP 请求片段展示 http
script.sh 验证 Shell 脚本高亮 sh
script.bash 验证 Bash 脚本高亮 bash
query.sql 验证 SQL 高亮 sql
main.go 验证 Go 高亮 go
main.rs 验证 Rust 高亮 rs
code.rb 验证 Ruby 高亮 rb
code.swift 验证 Swift 高亮 swift
Main.kt 验证 Kotlin 高亮 kt
component.react 验证 React 片段入口 react
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
melody.mid 验证 MIDI 轨道、时长和音符摘要 mid
video.mp4 验证视频播放 mp4
icon.ico 验证 ICO 图标预览 ico
sample.sqlite 验证 SQLite 表结构和少量数据行预览 sqlite
module.wasm 验证 WASM 模块导入导出摘要 wasm
部分兼容格式示例复用了同一份可解析内容来覆盖扩展名入口,例如表格兼容格式和图片兼容格式。Excel 当前使用虚拟表格展示,打印按钮会按能力自动隐藏,避免只打印当前视口。上线前仍建议使用业务真实文件补一轮回归。

完整覆盖与绘图说明

上面的清单已经覆盖当前注册的主要样例扩展名。CAD 链路已经切到 @flyfish-dev/cad-viewer 0.6.4,支持 DWG / DXF / DWF / DWFx / XPS;DWG 会按需加载 viewer assets 中 wasm/cad/ 下的 Worker 和 LibreDWG WASM,DWF/DWFx/XPS 会按需加载 native renderer 与 dwfv-render.wasm

3D 模型示例覆盖 glTF、OBJ、STL、PLY 四条最常用的浏览器模型入口;FBX、DAE、3DS、3MF、AMF、USD/USDZ、KMZ、PCD、VRML/WRL、XYZ、VTK/VTP 等扩展名也已经注册到 @file-viewer/renderer-3d。STEP/IGES/IFC/3DM/BREP 会通过 @file-viewer/geometry-engine 展示签名识别和转换原因,后续按 OpenCascade / web-ifc / rhino3dm 等独立 WASM 包路线接入,建议用客户真实模型补充回归。XMind 样例用于验证多 sheet 脑图、目录、标签、备注、链接、Panzoom 画布拖拽平移、移动端双指缩放、适配画布、搜索、缩放和导出链路。

Excalidraw 使用官方 @excalidraw/excalidrawrestore 补齐真实公开文件中常见的精简字段,再通过 exportToSvg 生成只读 SVG;draw.io / diagrams.net 文件默认使用随 viewer assets 分发的官方 GraphViewer 离线预览,styles、shapes、stencils、img、mxgraph 和 math 资源都来自本地 vendor/drawio/。如果官方 viewer 加载异常,会自动回退内置 SVG 预览;内网路径特殊时可通过 options.drawing.viewerScriptUrl 指定自托管脚本。

压缩包样例用于验证 libarchive.js Worker、目录读取、按需解压、IndexedDB 缓存和内部文件继续预览。邮件样例用于验证 EML / MSG / MBOX 的头信息、正文切换、附件下载和附件预览。地理数据样例用于验证 GeoJSON/KML/GPX 到离线 SVG 地图的链路。OLB / DRA 样例用于验证 EDA 文件结构树、对象候选、属性、诊断和可读字符串索引;GDS 样例用于验证标准 GDSII 记录解析和 SVG 版图预览;OAS / OASIS 样例用于验证可读 OASIS 文本夹具 SVG 版图与真实二进制 OASIS 的安全结构诊断边界。SQLite、WASM 和 ICO 样例用于验证资产/数据预览链路不会影响普通文档首屏。

公开样例来源

示例 来源 许可
drawing.dxf mozman/ezdxfexamples_dxf/wipeout_door.dxf MIT
word.docx Basel Convention 的公开中文正式文档 UNEP-CHW.15-6-Add.5-Rev.1.Chinese.docx 公开下载,需保留来源归属
ppt.pptx hcp4715/R4Psyslides/chapter_1.pptx 中文课程课件 CC-BY-4.0
sample.dwg Autodesk 官方 AutoCAD sample files 的 blocks_and_tables_-_imperial.dwg Autodesk public AutoCAD sample file
document.odt The Document Foundation Wiki 的 Book-template-0-2.odt CC-BY-SA-3.0 / LGPL-3.0+ / MPL-1.1
excel.ods The Document Foundation Wiki 的 Fixture_Copa_del_Mundo_2014.ods CC-BY-SA-3.0
slides.odp The Document Foundation Wiki 的 QA_Impress_Example_01_ODP_File.odp CC-BY-SA-3.0
excel.fods 项目内编写的标准 Flat ODS XML fixture Apache-2.0
samples/apache/blocks_and_tables.dwf Apache Tika TIKA-1823blocks_and_tables.dwf Jira 附件 Apache Software Foundation Jira attachment
samples/autodesk/house.dwfx Autodesk viewer-javascript-tutorialSample files/House.dwfx 官方样例 MIT
samples/autodesk/robot-arm.dwfx Autodesk viewer-javascript-tutorialSample files/RobotArm1.dwfx 官方样例 MIT
model.gltf / model.obj / model.stl / model.ply / model.step 项目内生成的最小 3D fixture Apache-2.0
mindmap.xmind 项目内使用 @ljheee/xmind-parser 生成的双 sheet XMind fixture Apache-2.0
flow.excalidraw neo4j-labs/agent-memorypoleo-model.excalidraw Apache-2.0
process.drawio jgraph/drawio-diagramsblog/data-flow.drawio Apache-2.0
book.umd 项目内生成的最小 UMD 文本电子书 fixture Apache-2.0
archive.zip / archive.tar.gz 项目内打包的丰富 PDF、公开 DOCX、Markdown、TypeScript 和 JSON 示例集合 随内部文件来源
en/archive.zip / en/archive.tar.gz 项目内打包的英文 DOCX、PDF、PPTX、XLSX、Markdown、文本、日志、CSV、JSON、代码、GeoJSON 和 glTF 示例集合 随内部文件来源
sample.eml 项目内生成的标准 MIME 邮件 fixture Apache-2.0
sample.msg HiraokaHyperTools/msgreadertest/A memo.msg MIT
sample.olb / sample.dra / layout.gds / layout.oas / layout.oasis 项目内生成的 EDA / 版图结构 fixture Apache-2.0
audio.mp3 MDN interactive examples 的 t-rex-roar.mp3 CC0
audio.ogg Wikimedia Commons 的 Example.ogg CC BY-SA 3.0
book.epub Project Gutenberg 的 Alice's Adventures in Wonderland EPUB Public domain in the USA

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

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

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

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

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

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