Skip to content

未设置 pdf.js wasmUrl,JPEG2000 图像拆页时被静默丢弃 #95

Closed

Description

@haywolf

现象

PDF 中使用 JPEG2000(JPXDecode)编码的图像在拆页渲染时被静默丢弃,渲染出的页面图像为空白,全程只有一条 warn 日志,界面没有任何提示。空白页交给模型后,要么报 empty content 并重试失败,要么模型输出占位内容被标记为成功(后者为读代码推断)。

复现步骤

  1. 生成一份整页 JPXDecode 图像的 PDF(小S 的脚本:/tmp/pr92-review/scripts/make-jpx.py)。
  2. 用 renderPdfPages 渲染并统计暗像素。
  3. 当前代码暗像素为 0;设置 wasmUrl 后为 38841(预期约 38400)。

证据:本轮只读评估顺着 pdf.js 5.4.530 源码确认了失败链路(无 wasmUrl 时 OpenJPEG 初始化失败,worker 捕获后以 null 图像数据继续渲染);渲染结果来自小S 审查 PR #92 时的探针。评估基准 commit ed7e9e8。

代码位置

  • src/core/infrastructure/adapters/split/PDFPageRenderer.ts:41-42:只设置了 cMapUrl 和 standardFontDataUrl,未设置 wasmUrl;src、scripts、package.json 中搜不到 wasm
  • src/core/infrastructure/adapters/split/PDFPageRenderer.ts:52-55
  • pdf.js:pdf.mjs:15115-15116、pdf.worker.mjs:11959-11961, 11990-11991, 38574, 38578

风险等级

高。

产品判断

扫描件和部分出版物 PDF 常用 JPEG2000,这些页面整页内容丢失,而且用户看不到任何错误,转换结果静默错误或白白消耗模型费用。修复成本低(一行配置加打包检查),必修。

建议修法

  • 设置 DOCUMENT_INIT_PARAMS_DEFAULTS.wasmUrl = ${path.join(pdfjsRoot, 'wasm')}/``。
  • 把 wasm/openjpeg.wasm 加入启动自检的 expectedFiles。
  • 在 scripts/fixtures/pdf-render-check.* 补 JPX 样例,让 verify:package 覆盖打包(asar)场景。

验收标准

  • 含 JPXDecode 图像的 PDF 拆页后图像正常绘制(上述探针暗像素约 38400)。
  • 打包版(至少 verify:package)能加载 openjpeg.wasm 并通过 JPX 样例检查。
  • 若 wasm 缺失,启动自检能发现。

来源:小S 对 PR #92 审查遗留,经只读评估确认。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions