我想在命令上使用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库中的存在。
我已经确保所有外部库都包含在我的Eclipse构建路径中