首先到百度搜索图片识别,orc技术,进入官网平台,通过百度账号,获取orc资质和应用使用的key
在来下载jxl.jar插件来操作excel。
效果图
拍摄 获取信息,
最后点击插入表格后进行插入操作,
前提:本工程需要用到百度原生附属工程,不会的可以查看orc_ui包的使用说明
1.初始化key:百度有相关介绍这里不做解释。按百度的文档来解决问题
/**
* 用明文ak,sk初始化
*/
private void initAccessTokenWithAkSk() {
OCR.getInstance(this).initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {
@Override
public void onResult(AccessToken result) {
String token = result.getAccessToken();
LT.lg("token = " + token);
hasGotToken = true;
}
@Override
public void onError(OCRError error) {
error.printStackTrace();
alertText("AK,SK方式获取token失败", error.getMessage());
}
}, getApplicationContext(), "key1",
"key2");
}
2.调取摄像头(需要用到摄像头的功能):
//在监听中 ,启动用带返回activity模式
findViewById(R.id.gallery_button_front).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkGalleryPermission()) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE_FRONT);
}
}
});
//在返回中处理数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_PICK_IMAGE_FRONT && resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
picPath = getRealPathFromURI(uri);
recIDCard(IDCardParams.ID_CARD_SIDE_FRONT, picPath);
}
if (requestCode == REQUEST_CODE_PICK_IMAGE_BACK && resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
picPath = getRealPathFromURI(uri);
recIDCard(IDCardParams.ID_CARD_SIDE_BACK, picPath);
}
if (requestCode == REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK) {
if (data != null) {
String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);
String filePath = FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath();
if (!TextUtils.isEmpty(contentType)) {
if (CameraActivity.CONTENT_TYPE_ID_CARD_FRONT.equals(contentType)) {
recIDCard(IDCardParams.ID_CARD_SIDE_FRONT, filePath);
} else if (CameraActivity.CONTENT_TYPE_ID_CARD_BACK.equals(contentType)) {
recIDCard(IDCardParams.ID_CARD_SIDE_BACK, filePath);
}
}
}
}
}
//处理数据的方法
private void recIDCard(String idCardSide, final String filePath) {
IDCardParams param = new IDCardParams();
param.setImageFile(new File(filePath));
// 设置身份证正反面
param.setIdCardSide(idCardSide);
// 设置方向检测
param.setDetectDirection(true);
// 设置图像参数压缩质量0-100, 越大图像质量越好但是请求时间越长。 不设置则默认值为20
param.setImageQuality(20);
OCR.getInstance(this).recognizeIDCard(param, new OnResultListener<IDCardResult>() {
@Override
public void onResult(IDCardResult result) {
if (result != null) {//TODO 这里返回结果开始处理
//1.解析后,
ParseJson pj = new ParseJson();
LT.lg("filePath = " + filePath);
LT.lg(result.toString());
json = pj.parse(ParseJson.ID_CARD_FRONT, result.toString());//转换成需要的字段
datas = pj.parseIdMessage(json);
//2.显示到界面中
for (int i = 0; i < llId.getChildCount(); i++) {
TextView v = (TextView) llId.getChildAt(i);
v.setText(datas[i]);
}
//显示图片在界面上
Bitmap bm = BitmapFactory.decodeFile(filePath);
ivIdPic.setImageBitmap(bm);
//将图片文件复制到对应目录中
FileUtil.copyFile(filePath, Consts.getPicCatalog(null));
}
}
@Override
public void onError(OCRError error) {
alertText("返回错误", ParseJson.ID_CARD_FRONT, error.getMessage(), null);
}
});
}
//确保读取权限的打开
private boolean checkGalleryPermission() {
int ret = ActivityCompat.checkSelfPermission(IDCardActivity.this, Manifest.permission
.READ_EXTERNAL_STORAGE);
if (ret != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(IDCardActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
1000);
return false;
}
return true;
}
3.点击插入,开始操作excle
//插入数据到excle的点击监听
findViewById(R.id.bt_id_insert).setOnClickListener(new View.OnClickListener() {//TODO 插入数据库操作
@Override
public void onClick(View v) {
try {
ExcelUtil eu = new ExcelUtil();
if (datas == null||datas.length<1) {
LT.toast(IDCardActivity.this, "获取数据失败");
} else {
String filePath = Consts.getIdCatalog();//获取文件的路径
eu.insertIdData(datas, ParseJson.ID_CARD_FRONT, filePath);
LT.toast(IDCardActivity.this, "插入成功");
Consts.PersonCount=0;//添加新的权利人信息,或者户主的时候,重置人数!
h();
}
} catch (IOException e) {
LT.lg("插入失败。IOException : " + e.toString());
e.printStackTrace();
} catch (WriteException e) {
LT.lg("插入失败。IOException : " + e.toString());
e.printStackTrace();
} catch (BiffException e) {
LT.lg("插入失败。IOException : " + e.toString());
e.printStackTrace();
}
}
});
4.ExcelUtil excel操作方法
public class ExcelUtil {
private WritableWorkbook book;
private String tableName = "Sheet1";
public ExcelUtil() {
}
public boolean insertIdData(String[] data, String type, String path) throws IOException, WriteException, BiffException {//将数据插入到
File file = new File(path);
LT.lg("保存路径:filePath = " + path);
if (!file.exists()) {
writeIdDataExcel(file, data);
} else {
updataExcel(path, data);
}
return true;
}
//直接写入
private void writeIdDataExcel(File file, String[] ss) throws WriteException, IOException {
FileUtil.CreatNewFile(file);
WritableWorkbook book = Workbook.createWorkbook(file);
WritableSheet sheet = book.createSheet(tableName, 0);
//TODO 读取文件中的数据条目数量,设置item
String[] cc = new String[]{"宗地代码", "权利人名称", "权利人类型", "证件种类", "证件号", "通讯地址"};
for (int i = 0; i < cc.length; i++) {
//字段
Label label = new Label(i, 0, cc[i]);
sheet.addCell(label);
//数据
LT.lg(i + "个数据为:" + ss[i]);
Label label2= new Label(i + 1, 1, ss[i]);
sheet.addCell(label2);
}
book.write();
book.close();
}
/**更新操作
* @param path 文件绝对路径
* @param cc 写入数据
* @throws IOException
* @throws WriteException
* @throws BiffException
*/
private void updataExcel(String path, String[] cc) throws IOException, WriteException, BiffException {//在第r行插入一条数据
// 在已写入的表中添加内容
File file = new File(path);
path = file.getAbsolutePath().replace(".xls", "(1).xls");
File file2 = new File(path);
FileUtil.CreatNewFile(file2);
// 打开文件
Workbook wb = Workbook.getWorkbook(file);
// 打开一个文本的副本,并指定数据写回到源文件
WritableWorkbook book = Workbook.createWorkbook(file2, wb);
WritableSheet sheet = book.getSheet(0);//默认在excel中的第一张表中!
int r = sheet.getRows();//获取已写入的行数
// Consts.PersonCount=r+1;
//正式写入数据
Label label;
for (int i = 0; i < cc.length; i++) {
label = new Label(i, r, cc[i]);
sheet.addCell(label);
}
System.out.println("执行添加数据成功");
book.write();
book.close();
// 写回数据
Workbook wb2 = Workbook.getWorkbook(file2);
WritableWorkbook book2 = Workbook.createWorkbook(file, wb2);
book2.write();
book2.close();
//删除副本
file2.delete();
System.out.println("删除成功");
}
}