From 0ec450d85c75c00a11eca466576536cd746c0aa4 Mon Sep 17 00:00:00 2001
From: 18792927508 <1322446236@qq.com>
Date: Thu, 7 Dec 2023 17:41:00 +0800
Subject: [PATCH] =?UTF-8?q?word=E8=BD=ACpdf?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/resources/application.yml | 14 ++-
ruoyi-common/pom.xml | 45 +++++++
.../ruoyi/common/utils/LibreOfficeUtil.java | 119 ++++++++++++++++++
.../service/impl/AdjudicationServiceImpl.java | 38 ++++--
.../impl/CaseApplicationServiceImpl.java | 20 +--
.../wisdomarbitrate/CaseApplicationMapper.xml | 2 +-
6 files changed, 215 insertions(+), 23 deletions(-)
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/LibreOfficeUtil.java
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 06bc003..d8d49a1 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -182,4 +182,16 @@ imConfig:
# 腾讯云账户 SecretId
secretId: AKID3xfHgroY4MQHvLXUXMwIQL1UjmbBX1Tv
# 腾讯云密钥
- secretKey: INDrIXcT8YmomZBcsy0oNirnU0LTN4X7
\ No newline at end of file
+ secretKey: INDrIXcT8YmomZBcsy0oNirnU0LTN4X7
+jodconverter:
+ local:
+ #暂时关闭预览,启动时会有点慢
+ enabled: true
+ #设置libreoffice主目录 linux地址如:/usr/lib64/libreoffice
+ office-home: /usr/lib64/libreoffice
+# office-home: D:/Program Files/LibreOffice
+# office-home: D:\app\libreOffice
+ #开启多个libreoffice进程,每个端口对应一个进程
+ port-numbers: 8100
+ #libreoffice进程重启前的最大进程数
+ max-tasks-per-process: 100
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index d664b74..b647ab0 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -11,12 +11,57 @@
ruoyi-common
+
common通用工具
+
+
+ org.jodconverter
+ jodconverter-core
+ 4.2.0
+
+
+ org.jodconverter
+ jodconverter-local
+ 4.2.0
+
+
+ org.jodconverter
+ jodconverter-spring-boot-starter
+ 4.2.0
+
+
+ com.artofsolving
+ jodconverter
+ 2.2.1
+
+
+ org.openoffice
+ jurt
+ 3.0.1
+
+
+ org.openoffice
+ ridl
+ 3.0.1
+
+
+ org.openoffice
+ juh
+ 3.0.1
+
+
+ org.openoffice
+ unoil
+ 3.0.1
+
+
+
+
org.springframework
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/LibreOfficeUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/LibreOfficeUtil.java
new file mode 100644
index 0000000..2740738
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/LibreOfficeUtil.java
@@ -0,0 +1,119 @@
+package com.ruoyi.common.utils;
+
+import cn.hutool.extra.spring.SpringUtil;
+
+import com.artofsolving.jodconverter.DocumentConverter;
+import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
+import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
+import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
+import com.ruoyi.common.exception.ServiceException;
+import lombok.extern.slf4j.Slf4j;
+import org.jodconverter.document.DocumentFormat;
+import org.jodconverter.office.OfficeException;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.MediaType;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * LibreOffice工具类,用于将word,excel,ppt等格式文件转为pdf预览
+ *
+ * @author xuyuxiang
+ * @date 2020/7/6 14:55
+ */
+@Slf4j
+public class LibreOfficeUtil {
+ @Value("${jodconverter.local.office-home}")
+ private long OpenOffice_HOME;
+
+ private static DocumentConverter documentConverter;
+
+ private static void init() {
+ try {
+ documentConverter = SpringUtil.getBean(DocumentConverter.class);
+ } catch (Exception e) {
+ throw new ServiceException();
+ }
+ }
+
+
+ public static boolean doc2pdf(File docFile, File pdfFile) {
+ boolean result = false;// 转换结果
+ if (docFile.exists()) {
+ if (!pdfFile.exists()) {
+ OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
+ try {
+ connection.connect();
+ DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
+ converter.convert(docFile, pdfFile);
+ // 关闭连接
+ connection.disconnect();
+ result = true;
+
+ log.info("****pdf转换成功,PDF输出:" + pdfFile.getPath() + "****");
+ } catch (java.net.ConnectException e) {
+ log.error("openoffice服务未启动", e);
+ } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
+ log.error("读取转换文件失败", e);
+ } catch (Exception e) {
+ log.error("转换失败", e);
+ }
+ } else {
+ result = true;
+ log.info("****已经转换为pdf,不需要再进行转化****");
+ }
+ } else {
+ log.info("****需要转换的文档不存在,无法转换****");
+ }
+ return result;
+ }
+ /**
+ * doc转pdf(程序启动openoffice)
+ *
+ * @param inputFile 输入文件
+ * @param outputFile 输出文件
+ * @return
+ */
+ public static boolean doc2pdf2(File inputFile, File outputFile) {
+ boolean result = false;
+ // OpenOffice的安装目录
+ String OpenOffice_HOME = "D:\\app\\libreOffice";
+ if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '/') {
+ OpenOffice_HOME += "/";
+ }
+ Process process = null;
+ try {
+ // 启动OpenOffice的服务
+ String command = OpenOffice_HOME
+ + "program/soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
+ process = Runtime.getRuntime().exec(command);
+ // 连接 OpenOffice实例,运行在8100端口
+ OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
+ connection.connect();
+
+ // 转换
+ DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
+ converter.convert(inputFile, outputFile);
+
+ // 关闭连接
+ connection.disconnect();
+ // 销毁OpenOffice服务的进程
+ process.destroy();
+
+ log.info("****pdf转换成功,PDF输出:" + outputFile.getPath() + "****");
+ return true;
+ } catch (Exception e) {
+ log.error("pdf转换失败", e);
+ } finally {
+ if (process != null) {
+ process.destroy();
+ }
+ }
+ return result;
+ }
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/AdjudicationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/AdjudicationServiceImpl.java
index 6b40443..95c3f42 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/AdjudicationServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/AdjudicationServiceImpl.java
@@ -180,7 +180,16 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
//
for (String bookmark : bookmarkList) {
if(columnValueMap.containsKey(bookmark)){
- datas.put(bookmark,columnValueMap.get(bookmark));
+ if(bookmark.equals("resSex")){
+ String responSex = columnValueMap.get(bookmark);
+ if (responSex.equals("0")) {
+ datas.put(bookmark, "男");
+ } else {
+ datas.put(bookmark, "女");
+ }
+ }else {
+ datas.put(bookmark, columnValueMap.get(bookmark));
+ }
}
}
}else {
@@ -231,11 +240,11 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
// todo 线上仲裁/线下仲裁方式未选择
//线上开庭时
if (arbitratMethod == 1) {
- String replace = onLine.replace(onLineDate, hearDateStr);
+ String replace = onLine.replace(onLineDate, Optional.ofNullable(hearDateStr).orElse(""));
datas.put("onLine", replace);
} else {
//书面仲裁时
- String replace = written.replace(writtenDate, hearDateStr);
+ String replace = written.replace(writtenDate, Optional.ofNullable(hearDateStr).orElse(""));
datas.put("written", replace);
}
@@ -252,7 +261,7 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
if (arbitratMethod == 1) {
if (isAbsence != null && isAbsence == 1) {
// 被申请人缺席
- String absentReplace = absent.replace("{{agentName}}", agentName);
+ String absentReplace = absent.replace("{{agentName}}", Optional.ofNullable(agentName).orElse(""));
datas.put("absent",absentReplace);
// 被申请人缺席
String resAbsentReplace=resAbsent;
@@ -267,7 +276,7 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
datas.put("resAbsent",resAbsentReplace);
} else {
// 出席
- String attendReplace = attend.replace("{{agentName}}", agentName);
+ String attendReplace = attend.replace("{{agentName}}", Optional.ofNullable(agentName).orElse(""));
datas.put("attend",attend);
// 被申请人证据
if(caseAttachMap!=null && CollectionUtil.isNotEmpty(caseAttachMap.get(6))){
@@ -281,7 +290,7 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
for (CaseAttach caseAttach : caseAttaches) {
stringBuilder.append(caseAttach.getAnnexName()).append("\n");
}
- resFileRplace = resFile.replace("{{resFile}}", stringBuilder.toString()).replace("{{applicantOpinion}}", arbitrateRecordSelect.getApplicantOpinion());
+ resFileRplace = resFile.replace("{{resFile}}", stringBuilder.toString()).replace("{{applicantOpinion}}", Optional.ofNullable(arbitrateRecordSelect.getApplicantOpinion()).orElse(""));
}
datas.put("resFile",resFileRplace);
}else {
@@ -296,7 +305,7 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
for (CaseAttach caseAttach : caseAttaches) {
stringBuilder.append(caseAttach.getAnnexName()).append("\n");
}
- resAttendOpinionReplace = resAttendOpinion.replace("{{applicantFile}}", stringBuilder.toString()).replace("{{respondentOpinion}}", arbitrateRecordSelect.getRespondentOpinion());
+ resAttendOpinionReplace = resAttendOpinion.replace("{{applicantFile}}", stringBuilder.toString()).replace("{{respondentOpinion}}", arbitrateRecordSelect.getRespondentOpinion()==null?"":arbitrateRecordSelect.getRespondentOpinion());
}
datas.put("resAttendOpinion",resAttendOpinionReplace);
@@ -306,13 +315,16 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
String month = String.format("%02d", now.getMonthValue());
String day = String.format("%02d", now.getDayOfMonth());
- String modalFilePath = "/data/arbitrate-document/template/新裁决书模板.docx";
-// String modalFilePath = "D:/新裁决书模板.docx";
- // todo 服务器路径
- String saveFolderPath = "/home/ruoyi/uploadPath/upload/" + year + "/" + month + "/" + day;
-// String saveFolderPath = "D:/";
+ // todo
+// String modalFilePath = "/data/arbitrate-document/template/新裁决书模板.docx";
+ String modalFilePath = templatePath;
+ // todo
+// String saveFolderPath = "/home/ruoyi/uploadPath/upload/" + year + "/" + month + "/" + day;
+ String saveFolderPath = "D:/home/ruoyi/uploadPath/upload/" + year + "/" + month + "/" + day;
String fileName = UUID.randomUUID().toString().replace("-", "") + ".docx";
- String saveName = "/profile/upload/" + year + "/" + month + "/" + day + "/" + fileName;
+ // todo
+// String saveName = "/profile/upload/" + year + "/" + month + "/" + day + "/" + fileName;
+ String saveName = "D:/home/ruoyi/uploadPath/upload/" + year + "/" + month + "/" + day + "/" + fileName;
String resultFilePath = saveFolderPath + "/" + fileName;
// 创建日期目录
File saveFolder = new File(saveFolderPath);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CaseApplicationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CaseApplicationServiceImpl.java
index 31454c5..134a6a6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CaseApplicationServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CaseApplicationServiceImpl.java
@@ -3016,7 +3016,7 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService {
if (unzipSuccess) {
// 查询抓取规则
// todo 批次需要再上传压缩包时用户填写
- List fatchRuleList = fatchRuleMapper.listByTemplateId(17L);
+ List fatchRuleList = fatchRuleMapper.listByTemplateId(18L);
if (CollectionUtil.isEmpty(fatchRuleList)) {
return error("未设置抓取规则");
}
@@ -3291,7 +3291,7 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService {
//文件转成base64
String base64 = OCRUtils.pdfConvertBase64(pdfUrl);
if (base64 == null) {
- throw new ServiceException("文件转成base64,转码失败");
+ throw new ServiceException("文件转成base64,转码失败pdfUrl:"+pdfUrl);
// return false;
}
StringBuilder ocrText = new StringBuilder(); // 创建一个StringBuilder对象
@@ -3468,12 +3468,16 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService {
File outputFile = new File(pdfFilePath);
try {
- InputStream docxInputStream = new FileInputStream(inputWord);
- OutputStream outputStream = new FileOutputStream(outputFile);
- IConverter converter = LocalConverter.builder().build();
- converter.convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();
- docxInputStream.close();
- outputStream.close();
+ LibreOfficeUtil.doc2pdf2(inputWord,outputFile);
+
+
+//
+// InputStream docxInputStream = new FileInputStream(inputWord);
+// OutputStream outputStream = new FileOutputStream(outputFile);
+// IConverter converter = LocalConverter.builder().build();
+// converter.convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();
+// docxInputStream.close();
+// outputStream.close();
} catch (Exception e) {
throw new ServiceException(e.getMessage()+"wordFilePath:"+wordFilePath+"pdfFilePath:"+pdfFilePath);
diff --git a/ruoyi-system/src/main/resources/mapper/wisdomarbitrate/CaseApplicationMapper.xml b/ruoyi-system/src/main/resources/mapper/wisdomarbitrate/CaseApplicationMapper.xml
index 12bf31f..cb81905 100644
--- a/ruoyi-system/src/main/resources/mapper/wisdomarbitrate/CaseApplicationMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/wisdomarbitrate/CaseApplicationMapper.xml
@@ -1432,7 +1432,7 @@
c.disputes,
c.loan_type,
c.loan_term,
- c.mediation_agreement
+ c.mediation_agreement,c.template_id templateId
from case_application c
LEFT JOIN case_affiliate ca ON ca.case_appli_id = c.id and ca.identity_type=1
--
2.54.0