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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:39:00