fix(runtime): support PDF preview on Chrome 143

This commit is contained in:
2026-10-18 15:51:26 +08:00
parent 605a48adb0
commit e36f3c1fdd
5 changed files with 147 additions and 0 deletions
+2
View File
@@ -40,6 +40,8 @@ Linux 文档预览通过构建期补丁将 Office-to-PDF 转换入口接到系
每次转换使用私有临时目录、独立 profile、最高宏安全级别和独立进程组;保留默认 60 秒超时,取消时终止进程组。检查输入大小、OOXML 条目数、解压总量和 CRC、输出大小及完整性。子进程采用最小环境变量;校验器地址空间上限 512 MiB,LibreOffice 为 2 GiB,单文件写入上限为 max(maxOutputBytes, 16 MiB),最终 PDF 仍严格检查 maxOutputBytes。进程资源限制不是进程树总量或临时目录总量限制,部署时仍须容器内存、CPU、PID 和临时磁盘限制。
PDF 浏览器兼容补丁:image/install-pdf-compat.mjs 在构建期为 DSH / documentpreview 0.2.1-rc.2 的 PDF.js 主线程及内嵌 worker 注入缺失的 Map.getOrInsert、Map.getOrInsertComputed 和 Math.sumPrecise,不覆盖原生方法。版本不匹配、worker 入口变化或重复安装时直接失败。精确求和使用 BigInt 累加,避免嵌入字体因 Chrome 143 缺少 API 而回退。回归测试命令:node --test image/pdf-compat.test.mjs。已用 Chrome for Testing 143.0.7499.192(移动视口、触摸模拟)验证镜像内真实 PDF 加载/渲染代码:补丁前复现 methodPromises 报错,补丁后 14 页样本加载、第 1→2→1 页渲染与文本提取成功,控制台无错误或警告;不等同 Android 真机或完整业务 UI 测试。现有部署须重新构建并更新镜像才会获得补丁。
安全边界:原生 LibreOffice 与 DSH 使用同一 UID,独立 profile 不是文件系统或网络沙箱;不应将此功能视为隔离恶意文档的服务。容器内敏感文件及网络访问仍需部署侧隔离,尤其是处理不可信外部文档时。
字体由系统解析;显式 fontDirectories/fontFallbacks 配置会被拒绝,应移除并改用系统字体配置。kit 的 maxFontFiles/maxFontFileBytes/maxLoadedFontBytes 不再约束系统字体。missingFonts 为空仅表示不提供缺失字体诊断,不代表没有字体替换。