tess4j的javaweb项目里面一直报”java.lang.RuntimeException: Need to install JAI Image I/O package.“的解决办法

本文介绍了一个使用 Tesseract 实现的 PDF 文档光学字符识别 (OCR) 方法,并通过加入 ImageIO.scanForPlugins() 代码解决了相关问题。该方法能够读取 PDF 文件并将其转换为文本,同时记录 OCR 处理的总耗时。
public static String doOCR(File pdfInvoice) {
        String result = "";
        long totalTime = 0;
        long endTime = 0;
        long startTime = System.currentTimeMillis();
        File imageFile = new File("D:\\docfolder\\9011121584.pdf");
        Tesseract instance = Tesseract.getInstance(); //

        try {

            ImageIO.scanForPlugins();
            result = instance.doOCR(imageFile);

            endTime = System.currentTimeMillis();
            totalTime = endTime - startTime;
            System.out.println("Total Time Taken For OCR: " + (totalTime / 1000));
            return result;
        } catch (Exception e) {
            System.err.println(e.getMessage());
            result = "";
            return result;
        }
    }

加入ImageIO.scanForPlugins();这段代码,最终解决问题

### JavaTess4J初始化失败解决方案 当遇到`Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException`错误时,这通常表明程序试图使用不在类路径中的某些库。对于Java 9及以上版本而言,`javax.xml.bind`包不再是标准库的一部分[^1]。 针对Tess4J初始化过程中出现此类异常的情况,可以采取如下措施: #### 添加必要的依赖项 为了使应用程序能够正常运行并成功加载所需的JNI资源,在构建工具配置文件(如Maven的pom.xml或Gradle的build.gradle)里加入缺失的依赖声明是非常重要的。具体来说,应该引入`jaxb-api`以及其他可能关联到OCR操作所需的相关组件。 ```xml <!-- Maven pom.xml --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.1</version> </dependency> ``` ```groovy // Gradle build.gradle implementation 'javax.xml.bind:jaxb-api:2.3.1' implementation 'org.glassfish.jaxb:jaxb-runtime:2.3.1' ``` 此外,考虑到Tesseract OCR引擎本身及其Java封装器(Tess4J),还需要确保这些库也已正确安装并且其二进制文件位于系统的PATH环境变量下或者通过代码显式指定路径给TessBaseAPI对象实例化之前设置好数据目录位置。 #### 设置Tess4J的数据路径 如果仍然存在初始化失败的问题,则可能是由于未能找到训练数据或其他必需的支持文件所引起的。此时可以通过编程方式来设定tessdata的位置: ```java import net.sourceforge.tess4j.TessAPI; import net.sourceforge.tess4j.ITesseract; public class OcrExample { static { System.setProperty("jna.library.path", "path/to/tess4j/library"); ITesseract tesseract = new TessAPI(); File tessDataFolder = LoadLibs.extractTessResources("tessdata"); // 自动解压至临时目录 tesseract.setDatapath(tessDataFolder.getAbsolutePath()); } } ``` 以上方法可以帮助解决因缺少特定Java模块而导致的应用启动期间发生的NoClassDefFoundError异常,并且适当调整了Tess4J的工作参数以适应不同操作系统上的部署需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值