You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pdf.js+react-pdf加载PDF异常:XRefEntryException问题求助

解决pdf.js + react-pdf 加载PDF时XRefEntryException导致内容显示异常的问题

问题背景

使用pdf.js v4.4.168结合react-pdf ^9.1.0在浏览器展示PDF时,部分内容无法正常显示,控制台输出警告:

Warning: loadFont - preEvaluateFont failed: "XRefEntryException: Bad (uncompressed) XRef entry: 4695R"

该PDF在本地其他阅读器中显示正常。

解决方案

1. 升级依赖版本

react-pdf和pdf.js的版本组合可能存在兼容性问题,或者旧版本未修复XRef解析的bug。直接升级react-pdf到最新稳定版(会同步更新依赖的pdf.js):

# npm
npm update @react-pdf/renderer

# yarn
yarn upgrade @react-pdf/renderer

2. 禁用字体预加载逻辑

报错源于字体预评估失败,可通过配置选项绕过这一流程:

// 定义Document组件的options参数
const options = {
  disableFontFace: true, // 禁用自定义字体加载,改用系统字体
  // 或者使用 useSystemFonts: true,效果类似
};

// 传递给Document组件
<Document
  options={options}
  file={curPdfUrl}
  onLoadSuccess={onDocumentLoadSuccess}
>
  {renderPages(numPages)}
</Document>

3. 预处理修复PDF文件

部分PDF的XRef表存在轻微损坏,其他阅读器容错性更高,但pdf.js解析更严格。可通过工具修复PDF结构:

  • 使用Ghostscript命令行修复:
gs -o fixed.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/original 你的问题PDF文件.pdf
  • 使用Adobe Acrobat打开PDF后,选择「文件」→「另存为」,重新保存一份新的PDF文件(Acrobat会自动修复文件结构问题)。

4. 启用错误忽略配置

让pdf.js忽略非致命的解析错误,继续加载内容:

const options = {
  ignoreErrors: true,
};

原因说明

不同PDF阅读器对文件格式的容错程度不同,部分阅读器可以自动修复轻微损坏的XRef表,但pdf.js的解析器遵循更严格的规范,会因这类问题中断部分资源(如字体)的加载,导致内容显示异常。

内容的提问来源于stack exchange,提问作者Dolphin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:02:07