Android Studio使用PDFBox 3.0.0读取PDF遇NoClassDefFoundError求助
Android环境下PDFBox 3.0.0报
java.lang.NoClassDefFoundError: Ljava/awt/Point;的解决办法 你遇到的问题根源很明确:标准PDFBox库依赖Java AWT类库,但Android系统并不包含AWT组件,直接引入官方标准库会出现找不到类的错误。
解决步骤如下:
1. 替换为Android适配版PDFBox依赖
移除当前build.gradle中的标准PDFBox依赖:
implementation 'org.apache.pdfbox:pdfbox:3.0.0' implementation 'org.apache.pdfbox:fontbox:3.0.0'
替换为专门为Android适配的版本:
implementation 'com.tom_roush:pdfbox-android:3.0.0'
该版本已移除对AWT的依赖,完全适配Android环境。
2. 调整代码中的导入路径
将原来的org.apache.pdfbox.*导入替换为com.tom_roush.pdfbox.*,例如:
import com.tom_roush.pdfbox.Loader; import com.tom_roush.pdfbox.pdmodel.PDDocument; import com.tom_roush.pdfbox.text.PDFTextStripper;
3. 确保权限配置正确
如果读取外部存储的PDF文件,需在AndroidManifest.xml中添加对应权限:
- Android 12及以下:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> - Android 13及以上:
也可以通过系统文件选择器获取文件Uri,避免直接申请存储权限。<uses-permission android:name="android.permission.READ_MEDIA_DOCUMENTS" />
4. 修正后的读取代码示例
public void ReadMyPdfFile(View v){ Thread thread = new Thread(new Runnable(){ @Override public void run() { File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "mPDF.pdf"); List<String> pageTexts = new ArrayList<>(); PDDocument pdDocument = null; try { pdDocument = Loader.loadPDF(file); // 逐页读取PDF文本 for (int pageIndex = 0; pageIndex < pdDocument.getNumberOfPages(); pageIndex++) { PDFTextStripper textStripper = new PDFTextStripper(); textStripper.setStartPage(pageIndex + 1); textStripper.setEndPage(pageIndex + 1); String pageText = textStripper.getText(pdDocument); pageTexts.add(pageText); } // 回到UI线程处理结果(如需更新UI) runOnUiThread(() -> { // 可将读取到的文本显示到TextView等组件 }); } catch (IOException e) { Log.i(TAG, "ReadMyPdfFile: Exception++ " + e.getMessage()); } finally { // 务必关闭PDDocument释放资源 if (pdDocument != null) { try { pdDocument.close(); } catch (IOException e) { e.printStackTrace(); } } } } }); thread.start(); }
内容的提问来源于stack exchange,提问作者Usman lqbal
相关产品推荐
相关产品推荐

