diff对比文字-----实现上传合同对比
上传文件
| 通过file获取文件流调用第三方OCR接口进行识别文档文字 |
File testLeft = new File(“D:\测试01.doc”);
File testRight = new File(“D:\测试02.doc”);
byte[] bytesLeft = new byte[(int) testLeft.length()];
byte[] bytesRight= new byte[(int) testRight.length()];
| 调用第三方OCR接口 ,按照接口返回数据保存到List数组|
public static List post(byte[] bytes){
OkHttpClient okHttpClient = new OkHttpClient.Builder().connectTimeout(100000, TimeUnit.MILLISECONDS)
.readTimeout(100000, TimeUnit.MILLISECONDS).build();
MultipartBody.Builder builder = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(“file”, “Y.doc”, RequestBody.create(bytes));
Request request = new Request.Builder()
.url(“http://ip:port/text/”)
.post(builder.build())
.build();
try {
Response response = okHttpClient.newCall(request).execute();
String string = response.body().string();
System.out.println(string);
//封装的返回实体类
Result res = JSONObject.parseObject(string,Result.class);
List values = res.getValues();
return values;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
diff比较两边文档内容
List<String> left= post(bytesLeft );
List<String> right= post(bytesRight);
Patch<String> diff = DiffUtils.diff(left, right);
List<AbstractDelta> deltas = diff.getDeltas();
deltas.forEach(delta -> {
switch (delta.getType()) {
case INSERT:
//新增
Chunk<String> insert = delta.getTarget();
int position = insert.getPosition();
System.out.println(“+ " + (position + 1) + " " + insert.getLines());
break;
case CHANGE:
//修改
Chunk<String> source = delta.getSource();
Chunk<String> target1 = delta.getTarget();
System.out.println(”\n- " + (source.getPosition() + 1) + " " + source.getLines() + “\n+ " + “” + (target1.getPosition() + 1) + " " + target1.getLines());
break;
case DELETE:
//删除
Chunk<String> delete = delta.getSource();
System.out.println(”- " + (delete.getPosition() + 1) + " " + delete.getLines());
break;
case EQUAL:
// System.out.println(“无变化”);
break;
}
});