使用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
相关产品推荐
相关产品推荐

