Office 预览,不必再绕服务器:一次纯前端方案的认真对比

企业系统里,最常见、也最容易被低估的功能之一,是 Office 文件预览。
合同、标书、报告、课件、财务表、审批附件、知识库文档……用户只是想点开看一眼,但工程团队往往要面对一串麻烦事:文件要不要上传到第三方?内网能不能用?大文件会不会卡死?Word 样式会不会乱?PPT 动画图形能不能看?Excel 合并单元格、冻结行列、主题色、公式结果能不能展示?
过去,大家常见的做法大概有三类:接云端 Office 预览,部署文档服务器,或者服务端转 PDF。它们都能解决一部分问题,但也都绕不开部署成本、数据安全、内网隔离、并发转码、格式损耗和定制能力这些现实问题。Microsoft 365 for web 的 WOPI 方案需要后端服务按协议暴露文件访问能力;Office Online Server 则属于自建服务形态,需要服务器、HTTPS 和证书等基础设施。(微软学习[1]) ONLYOFFICE、Collabora 这类方案很成熟,但本质也是文档服务器或在线协作套件,而不是“浏览器拿到文件后本地解析渲染”。(GitHub[2])
所以,我们做了第四条路:
把 Office 预览真正搬进浏览器。
不是后端转图片,不是转 PDF,不是把文件传到公有云,也不是简单 iframe 套壳,而是基于 TypeScript + Microsoft Office 文件格式规范,在前端完成 DOC、DOCX、PPT、PPTX、XLS、XLSX 的结构解析、样式计算与页面渲染。
为什么 Office 预览这么难?
很多人以为 Office 文件只是“压缩包 + XML”,其实这只说对了一半。
DOCX、PPTX、XLSX 属于 Office Open XML 体系,ECMA-376 定义了相关词汇、包结构和文档表示方式;而传统 DOC、PPT、XLS 还涉及 Microsoft Office 二进制文件格式规范。Microsoft 官方文档也长期维护 Word、Excel、PowerPoint 等格式的技术规范。(Ecma International[3])
真正难的不是“读出文字”,而是把文档变成用户眼里熟悉的样子:
Word 里的段落、编号、表格、浮动图片、页眉页脚、分页逻辑; PPT 里的母版、布局、占位符、形状、渐变、文本框、图片裁剪; Excel 里的行高列宽、合并单元格、边框、主题色、冻结窗格、筛选区域; 以及旧格式 DOC、PPT、XLS 里的 CFB、FIB、CLX、OfficeArt 等复杂二进制结构。
市面上不少开源库可以完成单格式解析,例如 docx-preview 的目标是把 DOCX 渲染为 HTML,并尽量保留语义和样式,但它也明确受到 HTML 表达能力限制;Mammoth 则更偏“语义化 DOCX 转 HTML”,强调干净内容输出,而不是精确还原视觉样式。(GitHub[4]) PPTXjs 可以用纯 JavaScript 把 PPTX 转成 HTML,PptxViewJS 也强调客户端解析 PPTX 并用 Canvas 展示;SheetJS 在表格数据抽取方面非常成熟,但其社区版核心定位是 spreadsheet data processing,不是完整 Office 预览渲染器。(GitHub[5])
这也是为什么“能打开”和“能商用预览”,中间隔着一条很长的工程长河。

我们的方案:纯 TypeScript,纯前端,面向商业系统的 Office 预览引擎
我们的纯前端 Office 预览方案,核心不是“拼几个库”,而是围绕 Office 文档结构建立统一解析与渲染体系。
它支持:
Word:DOC / DOCX 覆盖段落、文本 run、表格、列表、图片、样式、分页相关结构,并持续增强页眉页脚、浮动对象、复杂布局等能力。
PowerPoint:PPT / PPTX 解析幻灯片结构、母版、布局、文本、图片、形状、主题色、层级关系,并尽可能按原始页面比例还原展示。
Excel:XLS / XLSX 解析工作表、单元格、合并区域、行列尺寸、边框、填充、字体、主题样式、公式结果、冻结区域等核心预览结构。
当前方案已实现约 90% 高频结构解析,并采用 原生样式渲染、Worker 异步解析、流式加载 的组合,让预览不仅能打开,还能更稳定、更轻、更适合被集成进真实业务系统。
这不是一个“演示型 viewer”,而是一个“工程型 viewer”
一个真正能在企业里落地的预览引擎,至少要回答六个问题。
第一,文件能不能不出浏览器? 我们的答案是:可以。文件在浏览器端解析,不依赖第三方云预览,不需要把敏感合同、财务表、内部 PPT 上传到外部服务。
第二,内网、离线、私有化环境能不能跑? 可以。只要前端资源能部署,预览能力就能交付到内网系统、政企专网、私有云、离线终端。
第三,性能会不会拖垮主线程? 解析放进 Worker,主线程专注渲染与交互;大文件可做流式加载和渐进展示,避免“打开一个附件,整个页面一起卡死”。
第四,样式是不是只剩文字? 不是。我们的目标不是内容抽取,而是基于文档结构做原生样式渲染,让 Word 像 Word,PPT 像 PPT,Excel 像 Excel。
第五,能不能商用? 可以。相比很多开源组件“能用但缺维护、缺授权保障、缺兼容兜底”的状态,我们从一开始就按商业项目的稳定性、版本节奏和授权模式设计。
第六,能不能定制? 可以。工具栏、主题、加载态、文件源、渲染容器、错误兜底、审计水印、权限控制、预览模式,都可以按业务系统定制。
Demo 效果展示
demo.flyfish.group[6] 已经可以直接体验内置综合样例:入口页能一屏选择 DOC、DOCX、PPT、PPTX、XLS、XLSX,渲染后可以同步看到页面预览、文件大小、耗时、模型摘要和 WASM 诊断信息。

同一个前端页面,直接预览 Word、PPT、Excel。 不走服务端转码,不依赖外部云服务,不需要用户安装 Office。 文件进入浏览器,解析、样式计算、渲染展示,都在前端完成。
市面主流方案全景对比
真实工程选型不能只看“能不能打开文件”,更要看文件在哪里处理、系统承担什么成本、能不能内网部署、后续谁来维护。


从结果看,Microsoft 365 for web / WOPI 和 Office Online Server 更适合微软生态与在线协作,但它们需要按协议接入或维护服务端环境。ONLYOFFICE、Collabora 这类文档服务器能力成熟,适合在线编辑与多人协作,但部署、运维和资源成本更重。LibreOffice Headless + PDF.js 可以解决简单预览,但要接受转码延迟、并发压力和复杂格式漂移。docx-preview、Mammoth、PPTXjs、SheetJS 这类开源库适合单格式或数据处理场景,统一成完整 Office 预览能力时还需要二次整合。Apryse、Nutrient、Syncfusion、Aspose 等商业 SDK 能力强,但通常成本更高,且要按具体组件和授权边界评估。(微软学习[7])(GitHub[8])(Collabora Online and Collabora Office[9])(SheetJS[10])
选型结论:不是所有“能预览”,都适合你的业务
如果你要的是 在线编辑、多人协作、复杂权限流转,ONLYOFFICE、Collabora、Microsoft 365 生态是成熟路线。
如果你只是想把 Office 文件 转成 PDF 给用户看,LibreOffice Headless + PDF.js 是常见方案,成本不高,但要接受转码延迟、服务资源消耗,以及复杂格式可能漂移的问题。
如果你只是处理单一格式,比如 DOCX 内容展示、PPTX 简单播放、Excel 数据读取,docx-preview、Mammoth、PPTXjs、SheetJS 都有各自价值。
但如果你的需求是:
浏览器直接打开 Office;文件不出本地;内网能用;部署轻;还原度高;性能稳定;能商业授权;能定制 UI;能覆盖 Word、PPT、Excel 新旧格式。
那纯前端 Office 预览,就是更接近答案的方向。
我们的优势,不在于把所有复杂问题说得很简单,而在于我们承认 Office 预览的复杂性,并用工程方式一层一层解决它。
我们为什么更适合企业系统?
1. 安全:文件不上传,敏感数据不出浏览器
很多企业文件不是“能不能给别人看”的问题,而是“压根不能离开内网”。合同、财务表、投标文件、客户资料、研发文档,一旦进入第三方云预览链路,就会触发合规、审计和安全评估。
纯前端解析的好处是简单直接: 文件在哪里,预览就在哪里。
没有外部上传,没有公网依赖,没有云端缓存,没有第三方转换链路。
2. 性能:Worker 异步解析,页面不陪文件一起卡
传统服务端转码会带来排队、并发、CPU、内存、缓存清理等问题。我们的方案把解析放进浏览器 Worker,主线程继续负责 UI 响应,大文件可以分阶段解析、分阶段渲染,用户先看到内容,再逐步补全细节。
对业务系统来说,这不是“跑分好看”,而是用户体验上的差别: 打开附件时,页面还能动;大文件加载时,用户知道发生了什么。
3. 还原度:不是提取文字,而是渲染结构
Mammoth 这类库非常适合把 DOCX 转成干净 HTML,但它的目标并不是复刻 Word 视觉效果;docx-preview 更接近预览,但仍主要聚焦 DOCX。(GitHub[11]) 我们的方向则是统一处理 Word、PPT、Excel 的结构与样式,让预览结果尽量接近原始 Office 文件。
这意味着我们不仅关心“文字有没有”,还关心:
字体、字号、颜色、加粗、斜体; 表格边框、背景、合并单元格; PPT 版式、母版、形状、图片; Excel 行列宽高、冻结、主题色; 旧格式 DOC/PPT/XLS 的兼容解析。
4. 成本:不用为了“看一眼文件”养一套重服务
Office 预览本来应该是业务系统里的基础能力,而不是一个吞服务器、吞运维、吞预算的重项目。
我们的目标是让企业用更低成本拿到更高确定性:
前端 SDK 方式集成; 支持 iframe 快速嵌入; 支持内网与私有化; 支持业务 UI 定制; 支持商业授权与持续更新; 支持按项目、按公司、按源码授权。
5. 定制:预览只是起点,业务体验才是终点
真实系统里的文件预览,不只是一个 viewer。
你可能需要水印、防下载、权限按钮、审批侧栏、评论批注、审计日志、暗色主题、加载骨架屏、错误兜底、文件脱敏、移动端适配、多标签切换。
我们的方案从一开始就面向业务系统,不把预览器做成封闭黑盒,而是保留可扩展、可定制、可嵌入的工程空间。
首发价格:把预算花在能力上,而不是花在绕路上
商业 Web SDK 通常按场景、组件、用量或销售报价定价。Apryse 官方说明定价取决于功能、文档量以及服务端或客户端形态;Nutrient 也说明价格会根据组件、产品和用户量定制。(Apryse[12]) ONLYOFFICE Docs Enterprise 官方页面展示的起步价格为 1500 美元级别,Syncfusion 则提供有条件的社区许可,但商业产品通常需要付费授权。(仅Office[13])
所以,我们给一个更直接、更有诚意的人民币首发价格。

三档方案都会交付源码,区别不在“有没有源码”,而在授权范围、服务响应、维护周期和私有化支持深度。
开发版:¥599适合个人开发者、单项目验证、学习研究。交付完整源码,包含基础集成文档与 30 天基础答疑,适合先跑通预览链路。
商业版:¥1499适合 SaaS、OA、知识库、低代码平台和中小企业系统。交付完整源码,包含商用授权、部署指引、1 年版本更新与工作日集成支持。
企业源码版:¥4999适合政企、集团、私有化交付商和 ISV。交付完整源码,包含企业级源码授权、私有化部署联调、1 年优先维护与适配建议。
首发政策:
前 50 家商业客户,赠送一次真实业务文档兼容性评估; 商业版赠送 1 次专项兼容性优化; 企业源码版赠送 1 次内网部署联调。 对教育、政务、医疗、制造业知识库项目,提供专项折扣。
这不是“卖一个组件”,而是把 Office 预览从高成本、高风险、高耦合的工程问题,变成一个可以快速集成、稳定交付、持续升级的基础能力。
最后:Office 预览的下一站,是前端基础设施
过去,前端负责页面,服务端负责文件。 现在,浏览器已经足够强,Web Worker、WASM、流式加载、虚拟渲染、结构化解析,让很多过去必须放在服务端的能力,开始回到用户本地。
Office 预览就是其中最典型的场景。
它不只是一个“附件打开器”,而是企业数字化系统里很关键的一层基础设施: 它连接知识、流程、权限、审计和协作; 它决定用户能不能顺畅地阅读信息; 它也决定企业文件能不能安全地留在该留的地方。
我们的选择很明确:
用纯前端,把 Office 预览做得更安全、更轻、更快、更可控。 让每一个业务系统,都能拥有自己的 Office 预览能力。
Office 文件,不必再绕服务器。预览这件事,可以回到浏览器本身。
引用链接
[1]微软学习: https://learn.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/online/?utm_source=chatgpt.com
[2]GitHub: https://github.com/onlyoffice/docker-documentserver?utm_source=chatgpt.com
[3]Ecma International: https://ecma-international.org/publications-and-standards/standards/ecma-376/?utm_source=chatgpt.com
[4]GitHub: https://github.com/VolodymyrBaydalka/docxjs
[5]GitHub: https://github.com/meshesha/PPTXjs
[6]demo.flyfish.group: https://demo.flyfish.group/
[7]微软学习: https://learn.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/online/?utm_source=chatgpt.com
[8]GitHub: https://github.com/onlyoffice/docker-documentserver?utm_source=chatgpt.com
[9]Collabora Online and Collabora Office: https://www.collaboraonline.com/?utm_source=chatgpt.com
[10]SheetJS: https://docs.sheetjs.com/docs/
[11]GitHub: https://github.com/mwilliamson/mammoth.js/
[12]Apryse: https://apryse.com/pricing
[13]仅Office: https://www.onlyoffice.com/docs-enterprise-prices
夜雨聆风