PDFBox调用getPage()抛出1-based index not found:2异常的解决方法
解决PDFBox解析PDF仅能加载第一页的问题
问题原因
你的PDF文件页面树结构存在损坏,包含无效的页面条目(对应警告COSDictionary expected, but got null),导致PDFBox 2.0.27无法正确解析后续页面。其他阅读器能正常加载是因为它们的容错机制更强,而PDFBox对格式问题的校验更严格。
解决方案
1. 升级PDFBox版本
2.0.27是较旧的版本,后续的2.x稳定版(如2.0.32及以上)修复了大量页面树解析的bug,增强了容错处理。直接升级依赖版本,大概率能解决该问题。
2. 修复PDF文件结构
使用工具重建PDF的页面树,去除无效条目:
- Adobe Acrobat:打开PDF后选择「文件」→「另存为」,保存为新的PDF文件。Acrobat会自动修复部分结构问题。
- Ghostscript命令行:执行以下命令生成修复后的PDF:
之后用修复后的gs -o repaired.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/original input.pdfrepaired.pdf进行解析。
3. 自定义遍历逻辑跳过无效页面
如果升级或修复后仍有问题,可以在代码中捕获异常,跳过无法加载的页面:
PDDocument pdDocument = PDDocument.load("filePath", MemoryUsageSetting.setupTempFileOnly()); PDPageTree pageTree = pdDocument.getPages(); int totalPages = pageTree.getCount(); for (int i = 0; i < totalPages; i++) { try { PDPage page = pageTree.get(i); // 页面处理逻辑 } catch (IllegalStateException e) { System.err.printf("跳过无效页面:第%d页%n", i + 1); // 可添加日志记录逻辑 } } pdDocument.close();
4. 检查并手动修复页面树(进阶)
用PDFDebugger查看PDF的Pages节点,检查其Kids数组是否存在null或非字典类型的条目。若能定位到问题条目,可通过PDF编辑工具(如PDFtk)手动修正页面树结构,但需具备PDF底层结构的相关知识。
内容的提问来源于stack exchange,提问作者Abhay Patel
相关产品推荐
相关产品推荐

