IntelliJ下Java用PDFBox读PDF报CMapParser构造方法不存在的NoSuchMethodError
报错核心原因
你遇到的NoSuchMethodError: 'void org.apache.fontbox.cmap.CMapParser.<init>(boolean)'异常,根源是引入的PDFBox与配套FontBox版本不兼容。
从你当前项目导入的jar包列表可以看到,你是手动单独下载、零散导入的独立jar包:Apache PDFBox运行时需要调用对应配套版本中才存在的、带boolean参数的CMapParser构造方法,但你本地加载的FontBox版本远低于PDFBox的匹配要求,类中根本不存在这个构造方法,才会触发方法找不到的运行时错误。
具体解决操作
- 第一,把项目中所有手动导入的、和pdfbox、fontbox相关的独立jar包全部删除,清除旧的版本冲突残留
- 第二,统一引入一套版本完全对齐的Apache PDFBox官方稳定组件,不要零散单独拉取单个jar包。由于你要读取的是内嵌日文字体的PDF,需要同时引入和PDFBox同版本的fontbox、文本编码解析配套依赖,才能正常解析日文字形对应的CMap映射
- 第三,在IntelliJ中刷新项目的依赖配置,等待所有jar包完整加载后再重新运行程序
关键注意事项:PDFBox和FontBox是强版本绑定的组件,两个包的版本号必须完全一致,绝对不能跨大版本混用以旧代新或者以新代旧,否则会反复触发类、方法找不到的错误。
代码验证
你当前写的PDF加载、文本提取的业务逻辑本身没有问题,只要依赖版本匹配,不需要修改原有代码就能正常运行。如果后续提取日文内容出现乱码,可以在初始化PDFTextStripper时显式指定文本解码编码参数,降低编码适配问题。
内容的提问来源于stack exchange,提问作者Steak
相关产品推荐
相关产品推荐

