Browse Source

word转换pdf修复

master
maojian 2 months ago
parent
commit
b454573984
  1. 3
      document-convert-service/src/main/java/com/bw/convert/entity/Constants.java
  2. 323
      document-convert-service/src/main/java/com/bw/convert/service/impl/ConvertTaskServiceImpl.java
  3. 2
      opai-api/src/main/java/com/bw/opai/config/WebMvcConfig.java

3
document-convert-service/src/main/java/com/bw/convert/entity/Constants.java

@ -40,7 +40,8 @@ public class Constants {
public static final String JOBID = "jobId";
public static final String PROGRESS = "Progress";
public static final String JOBDOCUMENTS = "JobDocuments";
public static final String OutputDocuments = "OutputDocuments";
public static final String OUTPUTDOCUMENTS = "OutputDocuments";
public static final String INPUTFILES = "InputFiles";
public static final String FILES = "Files";
public static final String IDRENAME = "#id";

323
document-convert-service/src/main/java/com/bw/convert/service/impl/ConvertTaskServiceImpl.java

@ -157,158 +157,7 @@ public class ConvertTaskServiceImpl implements ConvertTaskService {
//识别中 -- 放回队列
ConfigCache.resultQueue.put(task);
}else if (progress == 100) {
//文件类型
String fileType = (String) task.get(Constants.DOC_TYPE);
//识别成功 -- 获取请求结果
String lastQueryUrl = queryUrl;
lastQueryUrl = lastQueryUrl.replace(Constants.IDRENAME,jobId);
log.info("queryUrl:{}",lastQueryUrl);
String queryResStr = DownLoadUtil.doGet(lastQueryUrl);
Map<String, Object> queryRes = JSONObject.parseObject(queryResStr);
List<Map<String, Object>> jobDocuments = (List<Map<String, Object>>) queryRes.get(Constants.JOBDOCUMENTS);
List<Map<String, Object>> outputDocuments = (List<Map<String, Object>>) jobDocuments.get(0).get(Constants.OutputDocuments);
List<Map<String, Object>> files = (List<Map<String, Object>>) outputDocuments.get(0).get(Constants.FILES);
for (int i =0;i<files.size();i++) {
Map<String, Object> map = files.get(i);
String fileContents = (String) map.get(Constants.FILECONTENTS);
String fileName = (String) map.get(Constants.F_ILENAME);
if(fileType.contains(Constants.HTML)) {
/*******html********/
//拆分文件名一部分是文件夹名称一部分是文件名
String[] arr = fileName.split("\\\\");
String lastConvertFilePathPrefix = convertFilePathPrefix + arr[0];
boolean isInputFile = base64ToFile(fileContents, lastConvertFilePathPrefix, arr[1]);
if (isInputFile) {
log.info("html相关文件转换成功,fileName:{}",arr[1]);
if(i == files.size() -1 ) {
log.info("最后的文件转换成功,准备压缩文件夹,path={}", lastConvertFilePathPrefix);
try {
// 生成 zip 文件名
String zipFileName = UUID.randomUUID().toString().replace("-", "") + ".zip";
String zipFilePath = convertFilePathPrefix + zipFileName;
// 压缩文件夹
ZipUtil.zipDirectory(lastConvertFilePathPrefix, zipFilePath);
log.info("文件夹压缩成功,zipPath={}", zipFilePath);
// === 后续你如果要上传 / 回传结果可继续写 ===
String responseBody = DownLoadUtil.upLoadFile(zipFilePath, gofastUrl);
//删除目录
FileUtil.deleteDir(new File(lastConvertFilePathPrefix));
//删除压缩包
FileUtil.delFile(zipFilePath);
// 解析返回 JSON
JSONObject json = JSONObject.parseObject(responseBody);
// 根据你 GoFast 实际返回字段调整
String path = json.getString(Constants.PATH);
String url = gofastAccessPrefix + path;
//成功 发送结果
AppResultDoc entity = new AppResultDoc();
entity.setInput(task);
entity.setTaskId((String)task.get(Constants.TASKID));
entity.setAppId((Integer)task.get(Constants.ID));
long now = System.currentTimeMillis();
entity.setCreateTime(now);
Map<String, Object> result = new HashMap<String, Object>(16);
result.put(Constants.FILEURL, url);
result.put(Constants.FILENAME, zipFileName);
entity.setResult(result);
entity.setStatus(1);
entity.setDel(0);
//回传给api服务保存
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity));
} catch (Exception e) {
log.error("HTML 文件夹压缩失败", e);
// 压缩失败按失败处理
AppResultDoc entity = new AppResultDoc();
entity.setInput(task);
entity.setTaskId((String) task.get(Constants.TASKID));
entity.setAppId((Integer) task.get(Constants.ID));
long now = System.currentTimeMillis();
entity.setCreateTime(now);
Map<String, Object> result = new HashMap<>(16);
result.put(Constants.ERROR, "HTML 文件夹压缩失败");
entity.setResult(result);
entity.setStatus(2);
entity.setDel(0);
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity));
}
}
}else {
//识别异常
log.error("html文档转换异常:{}",resStr);
//发送失败结果
AppResultDoc entity = new AppResultDoc();
entity.setInput(task);
entity.setTaskId((String)task.get(Constants.TASKID));
entity.setAppId((Integer)task.get(Constants.ID));
long now = System.currentTimeMillis();
entity.setCreateTime(now);
Map<String, Object> result = new HashMap<String, Object>(16);
result.put(Constants.ERROR, "转换失败");
entity.setResult(result);
entity.setStatus(2);
entity.setDel(0);
//回传给api服务保存
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity));
break;
}
}else {
/******其他类型**********/
//输出文件
boolean isInputFile = base64ToFile(fileContents, convertFilePathPrefix, fileName);
if (isInputFile) {
//转换成功 --上传文件
String fileAddr = convertFilePathPrefix+fileName;
//上传
String responseBody = DownLoadUtil.upLoadFile(fileAddr, gofastUrl);
//删除源文件
FileUtil.delFile(fileAddr);
// 解析返回 JSON
JSONObject json = JSONObject.parseObject(responseBody);
// 根据你 GoFast 实际返回字段调整
String path = json.getString(Constants.PATH);
String url = gofastAccessPrefix + path;
//成功 发送结果
AppResultDoc entity = new AppResultDoc();
entity.setTaskId((String)task.get(Constants.TASKID));
entity.setAppId((Integer)task.get(Constants.ID));
long now = System.currentTimeMillis();
entity.setCreateTime(now);
Map<String, Object> result = new HashMap<String, Object>(16);
result.put(Constants.FILEURL, url);
result.put(Constants.FILENAME, fileName);
entity.setResult(result);
entity.setStatus(1);
entity.setDel(0);
entity.setInput(task);
//回传给api服务保存
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity));
}else {
//识别异常
log.error("文档转换异常:{}",resStr);
//发送失败结果
AppResultDoc entity = new AppResultDoc();
entity.setInput(task);
entity.setTaskId((String)task.get(Constants.TASKID));
entity.setAppId((Integer)task.get(Constants.ID));
long now = System.currentTimeMillis();
entity.setCreateTime(now);
Map<String, Object> result = new HashMap<String, Object>(16);
result.put(Constants.ERROR, "转换失败");
entity.setResult(result);
entity.setStatus(2);
entity.setDel(0);
//回传给api服务保存
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity));
}
}
}
parseOcrRes(task,jobId);
}else {
//识别异常
log.error("文档转换异常:{}",resStr);
@ -415,6 +264,176 @@ public class ConvertTaskServiceImpl implements ConvertTaskService {
}
/**
* 解析查询结果
* @param task
* @param jobId
*/
private void parseOcrRes(Map<String, Object> task,String jobId) {
//文件类型
String fileType = (String) task.get(Constants.DOC_TYPE);
//识别成功 -- 获取请求结果
String lastQueryUrl = queryUrl;
lastQueryUrl = lastQueryUrl.replace(Constants.IDRENAME,jobId);
log.info("queryUrl:{}",lastQueryUrl);
String queryResStr = DownLoadUtil.doGet(lastQueryUrl);
Map<String, Object> queryRes = JSONObject.parseObject(queryResStr);
List<Map<String, Object>> jobDocuments = (List<Map<String, Object>>) queryRes.get(Constants.JOBDOCUMENTS);
List<Map<String, Object>> outputDocuments = null;
List<Map<String, Object>> files = null;
if(jobDocuments != null && jobDocuments.size() > 0) {
outputDocuments = (List<Map<String, Object>>) jobDocuments.get(0).get(Constants.OUTPUTDOCUMENTS);
files = (List<Map<String, Object>>) outputDocuments.get(0).get(Constants.FILES);
}else {
List<Map<String, Object>> InputFiles = (List<Map<String, Object>>) queryRes.get(Constants.INPUTFILES);
outputDocuments = (List<Map<String, Object>>)InputFiles.get(0).get(Constants.OUTPUTDOCUMENTS);
files = (List<Map<String, Object>>) outputDocuments.get(outputDocuments.size() - 1).get(Constants.FILES);
}
for (int i =0;i<files.size();i++) {
Map<String, Object> map = files.get(i);
String fileContents = (String) map.get(Constants.FILECONTENTS);
String fileName = (String) map.get(Constants.F_ILENAME);
if(fileType.contains(Constants.HTML)) {
/*******html********/
//拆分文件名一部分是文件夹名称一部分是文件名
String[] arr = fileName.split("\\\\");
String lastConvertFilePathPrefix = convertFilePathPrefix + arr[0];
boolean isInputFile = base64ToFile(fileContents, lastConvertFilePathPrefix, arr[1]);
if (isInputFile) {
log.info("html相关文件转换成功,fileName:{}",arr[1]);
if(i == files.size() -1 ) {
log.info("最后的文件转换成功,准备压缩文件夹,path={}", lastConvertFilePathPrefix);
try {
// 生成 zip 文件名
String zipFileName = UUID.randomUUID().toString().replace("-", "") + ".zip";
String zipFilePath = convertFilePathPrefix + zipFileName;
// 压缩文件夹
ZipUtil.zipDirectory(lastConvertFilePathPrefix, zipFilePath);
log.info("文件夹压缩成功,zipPath={}", zipFilePath);
// === 后续你如果要上传 / 回传结果可继续写 ===
String responseBody = DownLoadUtil.upLoadFile(zipFilePath, gofastUrl);
//删除目录
FileUtil.deleteDir(new File(lastConvertFilePathPrefix));
//删除压缩包
FileUtil.delFile(zipFilePath);
// 解析返回 JSON
JSONObject json = JSONObject.parseObject(responseBody);
// 根据你 GoFast 实际返回字段调整
String path = json.getString(Constants.PATH);
String url = gofastAccessPrefix + path;
//成功 发送结果
AppResultDoc entity = new AppResultDoc();
entity.setInput(task);
entity.setTaskId((String)task.get(Constants.TASKID));
entity.setAppId((Integer)task.get(Constants.ID));
long now = System.currentTimeMillis();
entity.setCreateTime(now);
Map<String, Object> result = new HashMap<String, Object>(16);
result.put(Constants.FILEURL, url);
result.put(Constants.FILENAME, zipFileName);
entity.setResult(result);
entity.setStatus(1);
entity.setDel(0);
//回传给api服务保存
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity));
} catch (Exception e) {
log.error("HTML 文件夹压缩失败", e);
// 压缩失败按失败处理
AppResultDoc entity = new AppResultDoc();
entity.setInput(task);
entity.setTaskId((String) task.get(Constants.TASKID));
entity.setAppId((Integer) task.get(Constants.ID));
long now = System.currentTimeMillis();
entity.setCreateTime(now);
Map<String, Object> result = new HashMap<>(16);
result.put(Constants.ERROR, "HTML 文件夹压缩失败");
entity.setResult(result);
entity.setStatus(2);
entity.setDel(0);
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity));
}
}
}else {
//识别异常
log.error("html文档转换异常:{}",queryResStr);
//发送失败结果
AppResultDoc entity = new AppResultDoc();
entity.setInput(task);
entity.setTaskId((String)task.get(Constants.TASKID));
entity.setAppId((Integer)task.get(Constants.ID));
long now = System.currentTimeMillis();
entity.setCreateTime(now);
Map<String, Object> result = new HashMap<String, Object>(16);
result.put(Constants.ERROR, "转换失败");
entity.setResult(result);
entity.setStatus(2);
entity.setDel(0);
//回传给api服务保存
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity));
break;
}
}else {
/******其他类型**********/
//输出文件
boolean isInputFile = base64ToFile(fileContents, convertFilePathPrefix, fileName);
if (isInputFile) {
//转换成功 --上传文件
String fileAddr = convertFilePathPrefix+fileName;
//上传
String responseBody = DownLoadUtil.upLoadFile(fileAddr, gofastUrl);
//删除源文件
FileUtil.delFile(fileAddr);
// 解析返回 JSON
JSONObject json = JSONObject.parseObject(responseBody);
// 根据你 GoFast 实际返回字段调整
String path = json.getString(Constants.PATH);
String url = gofastAccessPrefix + path;
//成功 发送结果
AppResultDoc entity = new AppResultDoc();
entity.setTaskId((String)task.get(Constants.TASKID));
entity.setAppId((Integer)task.get(Constants.ID));
long now = System.currentTimeMillis();
entity.setCreateTime(now);
Map<String, Object> result = new HashMap<String, Object>(16);
result.put(Constants.FILEURL, url);
result.put(Constants.FILENAME, fileName);
entity.setResult(result);
entity.setStatus(1);
entity.setDel(0);
entity.setInput(task);
//回传给api服务保存
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity));
}else {
//识别异常
log.error("文档转换异常:{}",queryResStr);
//发送失败结果
AppResultDoc entity = new AppResultDoc();
entity.setInput(task);
entity.setTaskId((String)task.get(Constants.TASKID));
entity.setAppId((Integer)task.get(Constants.ID));
long now = System.currentTimeMillis();
entity.setCreateTime(now);
Map<String, Object> result = new HashMap<String, Object>(16);
result.put(Constants.ERROR, "转换失败");
entity.setResult(result);
entity.setStatus(2);
entity.setDel(0);
//回传给api服务保存
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity));
}
}
}
}
public static void main(String[] args) throws Exception {
// OcrTaskServiceImpl ocrTaskServiceImpl = new OcrTaskServiceImpl();
// String base64Word = "77u/VGFibGUgMS4gRGlzdHJpYnV0aW9uIG9mIGNvbmZpcm1lZCBhbnRocmF4IGNhc2VzIGJ5IGNvdW50cnkgYW5kIHllYXIsIEVVL0VFQSwgMjAxNS0yMDE5DQpDb3VudHJ5CTIwMTUJMjAxNgkyMDE3CTIwMTgJMjAxOQ0KCU51bWJlcglOdW1iZXIJTnVtYmVyCU51bWJlcglOdW1iZXINCkF1c3RyaWEJMAkwCTAJMAkwDQpCZWxnaXVtCTAJMAkwCTAJMA0KQnVsZ2FyaWEJMgkwCTEJMAkwDQpDcm9hdGlhCTAJMAkwCTAJMA0KQ3lwcnVzCTAJMAkwCTAJMA0KQ3plY2hpYQkwCTAJMAkwCTANCkRlbm1hcmsJMAkwCTAJMAkwDQpFc3RvbmlhCTAJMAkwCTAJMA0KRmlubGFuZAkwCTAJMAkwCTANCkZyYW5jZQkwCTAJMAkwCTANCkdlcm1hbnkJMAkwCTAJMAkwDQpHcmVlY2UJMAkwCTAJMAkwDQpIdW5nYXJ5CTAJMAkwCTAJMQ0KSWNlbGFuZAkwCTAJMAkwCTANCklyZWxhbmQJMAkwCTAJMAkwDQpJdGFseQkwCTAJMAkwCTANCkxhdHZpYQkwCTAJMAkwCTANClVlY2h0ZW5zdGVpbgnigKIJ4oCiCeKAognigKIJ4oCiDQpVdGh1YW5pYQkwCTAJMAkwCTANCkx1eGVtYm91cmcJMAkwCTAJMAkwDQpNYWx0YQkwCTAJMAkwCTANCk5ldGhlcmxhbmRzCTAJMAkwCTEJMA==";

2
opai-api/src/main/java/com/bw/opai/config/WebMvcConfig.java

@ -19,6 +19,8 @@ public class WebMvcConfig implements WebMvcConfigurer {
registry.addInterceptor(authInterceptor)
// 拦截所有业务接口
.addPathPatterns("/apps/**")
// 放行 datasave
.excludePathPatterns("/apps/datasave")
// 放行登录注册接口否则就死循环了
.excludePathPatterns("/auth/**")
.excludePathPatterns("/static/**");

Loading…
Cancel
Save