在Android平台下,办公系统,ERP,CRM等开发过程中,需要对Doc, docx, xls, xlsx, ppt, ppts, pdf, html等各种格式的文件内容进行搜索和查找,实现这些格式文件正文分析提取是一件工作量巨大的工程。现在给大家推荐一款免费的开发组件Graccvs,完成文件正文提取分析,组件支持格式多,调用简单方便,正文提取速度快。
组件是以AAR格式提供的,这里是下载地址模板OCR识别工具--Graccvs文件正文提取开发组件--软件下载 (gaya-soft.cn)。 同时网站提供Android Studio工程示例说明??????Graccvs文件正文提取开发组件--Android--Java--在线帮助 (gaya-soft.cn)。
以下简单结束调用过程:
1:创建工程。 2:app\libs文件夹导入graccvs.aar。 3:Android工程的app的build.gradle文件dependencies单元中增加如下代码 ???implementation files('libs/graccvs.aar') 4:调用初始化函数Load设置动态链接库需要的临时文件夹。 5:调用Auth注册,免费版本设置为空。 6:调用文件函数ToTextFile、HttpToString等提取N个不同文件的正文,或者使用异步函数批量处理文件。 7:完成文件提取任务后调用 Unload函数,释放资源组件使用的资源。
主要代码单元 MainActivity.java:
package tx.graccvslibtest;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageManager;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.core.app.ActivityCompat;
import java.io.File;
import java.io.IOException;
//注意:这里导入包含文件
import graccvs.GraccvsLib;
public class MainActivity extends AppCompatActivity {
enum DllErrCode {
TFE_OK,
TFE_UNKNOW,
TFE_FILE_NOTEXIST,
TFE_SAVE_ERROR,
TFE_OUTSIZE,
TFE_UNSUPPORTED ,
TFE_ERROR_INTERFACE ,
TFE_HTTP_ERR,
TFE_HTTP_FILE_NULL ,
TFE_LICENCE_ERR;
}
// 根据错误类型返回错误信息
public String codeText(DllErrCode code) {
switch (code)
{
case TFE_OK:
return "ok";
case TFE_UNKNOW:
return "未知错误";
case TFE_FILE_NOTEXIST:
return "提取源文件不存在";
case TFE_SAVE_ERROR:
return "保存目标文件失败";
case TFE_OUTSIZE:
return "提取的源文件超出设置的大小范围";
case TFE_UNSUPPORTED:
return "不支持的提取文件格式";
case TFE_ERROR_INTERFACE:
return "得到接口失败";
case TFE_HTTP_ERR :
return "HTTP下载文件失败";
case TFE_HTTP_FILE_NULL :
return "HTTP文件为空";
case TFE_LICENCE_ERR:
return "软件许可错误";
default:
return "未知错误2";
}
}
private static final int REQUEST_INTERNET = 1;
private static String[] PERMISSIONS_INTERNET = {
"android.permission.INTERNET" };
// 申请权限
public static void verifyStoragePermissions(Activity activity) {
try {
//检测网络权限
int permission = ActivityCompat.checkSelfPermission(activity,
"android.permission.INTERNET");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 没有权限,去申请
ActivityCompat.requestPermissions(activity, PERMISSIONS_INTERNET,REQUEST_INTERNET);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//
GraccvsLib grlib = new GraccvsLib();
//测试写文件
private void testCreateFile() {
try {
File filesDir = getFilesDir();
File txtFile = new File(filesDir,"test.txt");
txtFile.createNewFile();
txtFile.delete();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//检测读写权限
verifyStoragePermissions(this);
//测试是否可以写文件
testCreateFile();
//当前应用的files文件夹
File filesDir = getFilesDir();
//初始化
String tempPath = filesDir.getAbsolutePath() + "/";
grlib.load(tempPath);
String sn = "";
// 企业版这里设置授权文本, 免费版都为空
grlib.auth("graccvs--GayaSoftware", sn);
TextView textView = findViewById(R.id.textView1);
// ------------------------提取正文,返回字符串------------------------
Button btTest1 = findViewById(R.id.btToString);
btTest1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//输入文件名称
String fn = filesDir.getAbsolutePath() + "/Adobe Intro.ofd"; //"/graccvs文件正文提取接口.pdf";
//提取文件正文
String outText = grlib.toString(fn);
textView.setText(outText);
}
});
// ------------------------提取正文并保存为文本文件------------------------
Button btTest2 = findViewById(R.id.btSaveToTextFile);
btTest2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//输入文件名称
String infile = filesDir.getAbsolutePath() + "/简可信模板OCR识别工具帮助.docx";
String outfile = filesDir.getAbsolutePath() + "/out.txt";
//提取文件正文,保存到目标文件
int r = grlib.toTextFile(infile, outfile);
DllErrCode code = DllErrCode.values()[r];
if (code != DllErrCode.TFE_OK)
{
// 得到错误方式1: 根据R值调用函数ErrText得到具体错误信息, 此方式速度快
String err = codeText(code);
textView.setText("error from code:" + err);
// 方式2:调用DLL函数,得到具体错误信息, 此方式错误信息更加准确
err = grlib.lastErr();
textView.setText(textView.getText() + ", error from dll lastErr:" + err);
}
else
{
textView.setText("toTextFile function over");
}
}
});
// ------------------------HTTP提取正文,返回字符串------------------------
Button btTest3 = findViewById(R.id.btHttpToString);
btTest3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//输入url
String url = "https://www.gaya-soft.cn/dfs/v2/简可信模板OCR识别工具帮助.docx";
//提取文件正文
String outText = grlib.httpToString(url, ".docx", 180 * 1000, "");
textView.setText(outText);
}
});
// ------------------------HTTP提取正文并保存为文本文件------------------------
Button btTest4 = findViewById(R.id.btHttpToTextFile);
btTest4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//textView.setText(grlib.wmi());
//输入url
String url = "https://www.gaya-soft.cn/dfs/v2/graccvs文件正文提取接口.pdf";
String outfile = filesDir.getAbsolutePath() + "/out2.txt";
String params = "{\"headers\":[{\"client_id\": \"g01x9\"}, {\"client_secret\": \"e23c89cc9fe\"}], \"cookies\":[{\"name\": \"ga\", \"value\": \"1020\", \"expires\":36000000, \"path\": \"/\"}]}";
//提取文件正文
int r = grlib.httpToTextFile(url, ".pdf", outfile, 0, params);
DllErrCode code = DllErrCode.values()[r];
if (code != DllErrCode.TFE_OK)
{
// 得到错误方式1: 根据R值调用函数ErrText得到具体错误信息, 此方式速度快
String err = codeText(code);
textView.setText("error from code:" + err);
}
else
{
textView.setText("httpToTextFile function over");
}
}
});
}
@Override
protected void onDestroy(){
grlib.unload();
super.onDestroy();
}
}
build.gradle
//
plugins {
id 'com.android.application'
}
android {
compileSdk 31
defaultConfig {
applicationId "tx.graccvslibtest"
minSdk 27
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation files('libs/graccvs.aar')
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
测试效果:
?
|