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

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及以上:
    <uses-permission android:name="android.permission.READ_MEDIA_DOCUMENTS" />
    
    也可以通过系统文件选择器获取文件Uri,避免直接申请存储权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:25:10