Android Studio集成Apache PDFBox出现java.awt相关类错误如何解决?
问题根源
原生Apache PDFBox是为Java SE平台开发的,强依赖java.awt等Android运行时不内置的类库,你之前的两种操作都会触发崩溃:
- 引入
java-rt-jar-stubs:这类依赖仅用于编译期占位,内部都是无逻辑的空实现,打包进APK后运行时类校验不通过,抛出VerifyError - 移除
java-rt-jar-stubs:运行时找不到PDFBox依赖的java.awt相关类,抛出NoClassDefFoundError
解决方案
1. 替换为Android适配的PDFBox端口
不要使用原生的org.apache.pdfbox:pdfbox依赖,改用社区维护的Android专用适配版,该版本已经将所有java.awt依赖替换为Android兼容实现,不需要额外引入stub包:
首先删除你项目中如下两类依赖:
implementation 'org.apache.pdfbox:pdfbox:xxx' implementation 任何java-rt相关的stub依赖
然后添加Android版PDFBox依赖:
// 对应上游PDFBox 2.0.x稳定版,和你原来用的2.0.8接口完全兼容 implementation 'com.tom_roush:pdfbox-android:2.0.27.0' // 如果用到字体相关功能,额外添加fontbox适配版 implementation 'com.tom_roush:fontbox-android:2.0.27.0'
替换后原有PDDocument.load等逻辑不需要修改,可直接运行,不会再出现类找不到或校验错误问题。
2. 3.x版本兼容方案
如果你需要升级到3.0.0-RC1版本,同样使用对应Android适配版:
implementation 'com.tom_roush:pdfbox-android:3.0.0.0-RC1'
针对getPageHeight报错的问题,3.x版本中该方法已从TextPosition类移除,直接从当前页对象获取页面高度即可,替换代码如下:
// 先获取当前PDF页面对象 PDPage currentPage = document.getPage(pageIndex); float pageHeight = currentPage.getMediaBox().getHeight(); // 替换原有逻辑 posYInit1 = pageHeight - textPositions.get(0).getYDirAdj();
注意事项
- 你当前配置的
minSdkVersion 21完全满足pdfbox-android的最低版本要求,无需修改 - 如果你需要处理加密PDF,可额外添加
implementation 'com.tom_roush:bouncycastle-android:1.68.0'依赖
内容的提问来源于stack exchange,提问作者Adil Mushtaq
相关产品推荐
相关产品推荐

