最近终于把 File Viewer 里的 iWork 解析能力拆成了独立包:iwork-viewer。
起因挺普通。客户发来 .pages,Windows 同事只能请他再导一份 PDF。我不想再把内部文件交给在线转换站,就顺着格式一路拆了下去。
现在它可以在浏览器里直接解析 .pages/.numbers/.key,不依赖服务端转码或运行时 CDN。旧版 iWork '09 走 XML/APXL,2013 年后的文件走 Snappy/IWA。
pnpm add [email protected]
import { renderIworkDocument } from 'iwork-viewer'
const viewer = await renderIworkDocument(file, target, 'pages')
viewer.fit('width')

目前是静态预览。Numbers 显示文件保存时的公式结果,不重算;Keynote 的动画、转场和视频不会播放;加密 iwpv2 只识别,不解密。我宁愿先把这些限制说清楚,免得“支持”两个字越传越离谱。
真实 fixture 覆盖 iWork '09、2015 年前后的 IWA 和 Apple 15.3.1 当前文件。视觉回归阈值是 Pages/Keynote 3%、Numbers 5%。

仓库和安装说明:https://github.com/flyfish-dev/iwork-viewer
它比较适合接进 OA、知识库、网盘、客服附件和内网系统。我没打算把它包装成“万能转换站”。手里有不涉密的真实 iWork 文件,欢迎直接提兼容问题,样本永远比一张支持列表有用。
绑定
不错~