无法运行Java脚本来启动tesseract:cmd shell中的“ java.lang.UnsatisfiedLinkError”

时间:2018-10-16 19:59:58

标签: java eclipse gradle tesseract

我想在命令上使用tesseract来循环浏览约30,650种外币报告并提取文本。 主要目标是提取文本并将其附加到文件中。我已经用VBA编写了一个程序,可以在excel中做其他工作,但是我希望Java可以完成一些繁重的工作。

我让脚本成功在eclipse中工作 。我的项目是gradle项目。我来自Jcentre()存储库。

我使用eclipse将脚本制作为包含所有依赖项的可运行jar。  我在命令行上如下运行脚本:

java  -jar "C:\Users\repzero\Desktop\ocr_scanner.jar"

当我在命令行上运行jar时,输出如下

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: java.lang.UnsatisfiedLinkError: The specified module could not be fou
nd.

        at com.sun.jna.Native.open(Native Method)
        at com.sun.jna.Native.open(Native.java:1759)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
        at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
        at com.sun.jna.Library$Handler.<init>(Library.java:147)
        at com.sun.jna.Native.loadLibrary(Native.java:412)
        at com.sun.jna.Native.loadLibrary(Native.java:391)
        at net.sourceforge.tess4j.util.LoadLibs.getTessAPIInstance(LoadLibs.java
:81)
        at net.sourceforge.tess4j.TessAPI.<clinit>(TessAPI.java:42)
        at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:367)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:280)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:212)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:196)
        at TextExtractor.main(TextExtractor.java:27)

下面是Java代码

import java.io.*;
import net.sourceforge.tess4j.*;
public class TextExtractor {
    public static void main(String[] args) throws Exception{
        String absolute_input_file_path="";
        String absolute_output_file_path="";
        String result="";       
        System.out.println("Executing");

        absolute_input_file_path="C:\\Users\\repzero\\Documents\\currency1.pdf";
        absolute_output_file_path="C:\\Users\\repzero\\Desktop\\wow.txt";
        System.out.print(absolute_input_file_path);
        File input_file_obj=new File(absolute_input_file_path);
        File output_file_obj=new File(absolute_output_file_path);
        if(input_file_obj.exists() && !input_file_obj.isDirectory())
        {
            File imageFile = new File("C:\\Users\\repzero\\Documents\\job letter.pdf");
            ITesseract instance = new Tesseract(); //

            try {

            result = instance.doOCR(imageFile);
            System.out.println(result);

            } catch (TesseractException e) {
            //System.err.println(e.getMessage());
            }
            if(output_file_obj.isFile())
            {
            FileWriter writer=new FileWriter(output_file_obj,true); 
            writer.write(result);
            writer.close();         
            }
            else 
            {
                FileWriter writer=new FileWriter(output_file_obj,false);    
                writer.write(result);
                writer.close();                     
            }
        } // end if input file exist
        else {
            System.out.println("Error:Input file name does not exists or it's a directory");
        }

    }

}

问题

我的Java肌无力。为什么我在cmd shell中遇到此异常,但是代码在eclipse中成功执行?

我已经使用相应的方法验证了com.sun.jna.Native在我的eclipse库中的存在。

enter image description here

我已经确保所有外部库都包含在我的Eclipse构建路径中

enter image description here

0 个答案:

没有答案