diff --git a/jeecg-boot-base-core/pom.xml b/jeecg-boot-base-core/pom.xml
index f885dca7..5b327bc0 100644
--- a/jeecg-boot-base-core/pom.xml
+++ b/jeecg-boot-base-core/pom.xml
@@ -257,6 +257,22 @@
jsch
0.1.55
+
+
+ org.jodconverter
+ jodconverter-local
+ ${libreoffice.jodconverter-local.version}
+
+
+ org.libreoffice
+ ridl
+ ${libreoffice.ridl.version}
+
+
+ org.jodconverter
+ jodconverter-spring-boot-starter
+ ${libreoffice.jodconverter-spring-boot-starter.version}
+
\ No newline at end of file
diff --git a/jeecg-module-main/pom.xml b/jeecg-module-main/pom.xml
index fea213ae..b5ead643 100644
--- a/jeecg-module-main/pom.xml
+++ b/jeecg-module-main/pom.xml
@@ -61,20 +61,6 @@
logging-interceptor
2.7.5
-
-
-
-
- com.artofsolving
- jodconverter
- 2.2.1
-
-
- org.openoffice
- bootstrap-connector
- 0.1.1
-
-
cn.hutool
hutool-http
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/httpinterface/controller/testController.java b/jeecg-module-main/src/main/java/org/jeecg/modules/httpinterface/controller/testController.java
new file mode 100644
index 00000000..970c6c9f
--- /dev/null
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/httpinterface/controller/testController.java
@@ -0,0 +1,56 @@
+package org.jeecg.modules.httpinterface.controller;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.net.url.UrlBuilder;
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.http.HttpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Maps;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.compress.utils.Lists;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.kc.grab.exports.entity.TBks;
+import org.jeecg.modules.kc.grab.exports.service.ITBksService;
+import org.jeecg.modules.kc.jiaoshi.entity.KcZhihuijiaoshi;
+import org.jeecg.modules.kc.jiaoshi.entity.KcZhihuijiaoshiMonitorLog;
+import org.jeecg.modules.kc.jiaoshi.entity.KcZhihuijiaoshiOperateLog;
+import org.jeecg.modules.kc.jiaoshi.service.IKcZhihuijiaoshiMonitorLogService;
+import org.jeecg.modules.kc.jiaoshi.service.IKcZhihuijiaoshiOperateLogService;
+import org.jeecg.modules.kc.jiaoshi.service.IKcZhihuijiaoshiService;
+import org.jeecg.modules.tools.office.pdf.PDFUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 对外部访问接口
+ * @Author: jeecg-boot
+ * @Date: 2023-04-10
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="对外部访问接口")
+//@RestController
+@RequestMapping("/temp")
+public class testController extends JeecgController {
+
+ @AutoLog(value = "对外部访问接口-通过IDS访问奥威亚接口")
+ @ApiOperation(value="T_BKS-抓取-通过id查询", notes="T_BKS-抓取-通过id查询")
+ @GetMapping(value = "/testPDF")
+ public Result> runAvyApiByIds(String ids,String type){
+ PDFUtil.office2PDF("F:\\temp\\test\\a.docx","F:\\temp\\test\\a.pdf");
+ return Result.OK();
+ }
+
+}
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/teachingunitcontent/controller/KcTeachingUnitContentThreeController.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/teachingunitcontent/controller/KcTeachingUnitContentThreeController.java
index 5afa80ec..3d3d6d13 100644
--- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/teachingunitcontent/controller/KcTeachingUnitContentThreeController.java
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/teachingunitcontent/controller/KcTeachingUnitContentThreeController.java
@@ -1,54 +1,28 @@
package org.jeecg.modules.kc.teachingunitcontent.controller;
-import java.io.File;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import cn.hutool.core.io.FileUtil;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import org.jeecg.common.api.vo.Result;
-import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.util.DateUtils;
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.kc.teachingunitcontent.entity.KcTeachingUnitContentOne;
-import org.jeecg.modules.kc.teachingunitcontent.entity.KcTeachingUnitContentThree;
-import org.jeecg.modules.kc.teachingunitcontent.service.IKcTeachingUnitContentThreeService;
-
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
-
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.kc.teachingunitcontent.entity.KcTeachingUnitContentThree;
+import org.jeecg.modules.kc.teachingunitcontent.service.IKcTeachingUnitContentThreeService;
import org.jeecg.modules.tools.Global;
-import org.jeecg.modules.tools.pdf.PDFUtil;
import org.jeecg.modules.zyk.entity.ZykInfo;
import org.jeecg.modules.zyk.service.IZykService;
import org.jeecg.modules.zyk.utils.WjlxEnum;
-import org.jeecgframework.poi.excel.ExcelImportUtil;
-import org.jeecgframework.poi.excel.def.NormalExcelConstants;
-import org.jeecgframework.poi.excel.entity.ExportParams;
-import org.jeecgframework.poi.excel.entity.ImportParams;
-import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
-import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.servlet.ModelAndView;
-import com.alibaba.fastjson.JSON;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.jeecg.common.aspect.annotation.AutoLog;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
/**
* @Description: 教学单元内容-第三层
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyInfoStudent/controller/ZyInfoStudentController.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyInfoStudent/controller/ZyInfoStudentController.java
index 56896356..41870f2e 100644
--- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyInfoStudent/controller/ZyInfoStudentController.java
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyInfoStudent/controller/ZyInfoStudentController.java
@@ -1,22 +1,19 @@
package org.jeecg.modules.kc.zyInfoStudent.controller;
-import java.io.File;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import cn.hutool.core.io.FileUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.*;
@@ -36,12 +33,6 @@ import org.jeecg.modules.kc.zyInfoScjl.service.IZyInfoScjlService;
import org.jeecg.modules.kc.zyInfoStudent.entity.ZyInfoStudent;
import org.jeecg.modules.kc.zyInfoStudent.entity.ZyInfoStudentSys;
import org.jeecg.modules.kc.zyInfoStudent.service.IZyInfoStudentService;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.extern.slf4j.Slf4j;
-
import org.jeecg.modules.kc.zyInfoStudentHp.entity.ZyInfoStudentHp;
import org.jeecg.modules.kc.zyInfoStudentHp.service.IZyInfoStudentHpService;
import org.jeecg.modules.kc.zyInfoStudentPcz.service.IZyInfoStudentPczService;
@@ -50,28 +41,25 @@ import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
import org.jeecg.modules.tools.DictUtils;
import org.jeecg.modules.tools.Global;
-import org.jeecg.modules.tools.pdf.PDFUtil;
+import org.jeecg.modules.tools.office.pdf.PDFUtil;
import org.jeecg.modules.zyk.entity.ZykInfo;
import org.jeecg.modules.zyk.service.IZykService;
import org.jeecg.modules.zyk.utils.WjlxEnum;
-import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
-import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
-import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
-import com.alibaba.fastjson.JSON;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.jeecg.common.aspect.annotation.AutoLog;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
/**
* @Description: 学生提交作业
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyJxdg/controller/ZyJxdgController.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyJxdg/controller/ZyJxdgController.java
index 4446858d..0984c8c5 100644
--- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyJxdg/controller/ZyJxdgController.java
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/zyJxdg/controller/ZyJxdgController.java
@@ -15,12 +15,8 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
-import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.DateUtils;
-import org.jeecg.common.util.SpringContextHolder;
-import org.jeecg.common.util.SpringContextUtils;
-import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.kc.config.entity.KcExportConfigTpkwcqkjzglx;
import org.jeecg.modules.kc.config.service.IKcExportConfigTpkwcqkjzglxService;
import org.jeecg.modules.kc.kcSysConfig.entity.KcSysConfig;
@@ -32,7 +28,7 @@ import org.jeecg.modules.kc.zyJxdg.entity.ZyJxdgSys;
import org.jeecg.modules.kc.zyJxdg.service.IZyJxdgService;
import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
import org.jeecg.modules.tools.Global;
-import org.jeecg.modules.tools.pdf.PDFUtil;
+import org.jeecg.modules.tools.office.pdf.PDFUtil;
import org.jeecg.modules.zyk.entity.ZykInfo;
import org.jeecg.modules.zyk.service.IZykService;
import org.jeecg.modules.zyk.utils.WjlxEnum;
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/MyOfficeUtils.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/MyOfficeUtils.java
new file mode 100644
index 00000000..248025ed
--- /dev/null
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/MyOfficeUtils.java
@@ -0,0 +1,130 @@
+package org.jeecg.modules.tools.office.convert;
+
+import org.apache.poi.poifs.filesystem.FileMagic;
+import org.apache.poi.ss.usermodel.PrintSetup;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+public final class MyOfficeUtils {
+
+ private MyOfficeUtils () {}
+
+ /**
+ * 获取文档类型
+ * @param file 待转换的文件
+ * @return 文件转换器
+ * @throws IOException io异常
+ */
+ public static FileMagic getFileMagic(File file) throws IOException {
+ try (FileInputStream inp = new FileInputStream(file)) {
+ return getFileMagic(inp);
+ }
+ }
+
+ /**
+ * 获取文档类型
+ * @param inp 待转换的文件流
+ * @return 文件转换器
+ * @throws IOException io异常
+ */
+ public static FileMagic getFileMagic(InputStream inp) throws IOException {
+ InputStream is = FileMagic.prepareToCheckMagic(inp);
+ return FileMagic.valueOf(is);
+ }
+
+ /**
+ * 判断是否excel03版本
+ * @param file 待检测的文件
+ * @return true:是03版本 false:不是03版本
+ */
+ public static boolean isExcel03(File file) {
+ try {
+ boolean ole2 = FileMagic.OLE2 == getFileMagic(file);
+ if (!ole2) {
+ return false;
+ }
+ try (Workbook workbook = WorkbookFactory.create(file)) {
+ if(workbook != null) return true;
+ }
+ return false;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ /**
+ * 判断是否excel07版本
+ * @param file 待检测的文件
+ * @return true:是07版本 false:不是07版本
+ */
+ public static boolean isExcel07(File file) {
+ try {
+ boolean ole2 = FileMagic.OOXML == getFileMagic(file);
+ if (!ole2) {
+ return false;
+ }
+ try (Workbook workbook = WorkbookFactory.create(file)) {
+ if(workbook != null) return true;
+ }
+ return false;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ /**
+ * excel默认打印配置
+ * @param workbook 文档对象
+ */
+ public static void setDefaultExcelPrintScale (Workbook workbook) {
+ int numberOfSheets = workbook.getNumberOfSheets();
+ for (int i = 0; i < numberOfSheets; i++) {
+ workbook.removePrintArea(i);
+ setSheetPrintScale(workbook.getSheetAt(i), null);
+ }
+ }
+
+ static void setExcelPrintScale (Workbook workbook, OfficeInputExcelPrintSetup inputExcelPrintSetup) {
+ int numberOfSheets = workbook.getNumberOfSheets();
+ for (int i = 0; i < numberOfSheets; i++) {
+ workbook.removePrintArea(i);
+ setSheetPrintScale(workbook.getSheetAt(i), inputExcelPrintSetup);
+ }
+ }
+
+ private static void setSheetPrintScale(Sheet sheet, OfficeInputExcelPrintSetup inputExcelPrintSetup) {
+ PrintSetup setup = sheet.getPrintSetup();
+ if (inputExcelPrintSetup == null) {
+ setup.setLandscape(true);
+ setup.setFitHeight((short) 0);
+ setup.setFitWidth((short) 1);
+ setup.setPaperSize(PrintSetup.A4_PAPERSIZE);
+ sheet.setFitToPage(true);
+ sheet.setPrintRowAndColumnHeadings(false);
+ sheet.setHorizontallyCenter(true);
+ sheet.setVerticallyCenter(false);
+ } else {
+ setup.setLandscape(inputExcelPrintSetup.isLandscape());
+ setup.setFitHeight(inputExcelPrintSetup.getFitHeight());
+ setup.setFitWidth(inputExcelPrintSetup.getFitWidth());
+ setup.setPaperSize(inputExcelPrintSetup.getPaperSize());
+ sheet.setFitToPage(inputExcelPrintSetup.isFitToPage());
+ sheet.setPrintRowAndColumnHeadings(inputExcelPrintSetup.isPrintRowAndColumnHeadings());
+ sheet.setHorizontallyCenter(inputExcelPrintSetup.isHorizontallyCenter());
+ sheet.setVerticallyCenter(inputExcelPrintSetup.isVerticallyCenter());
+ }
+ sheet.setMargin(Sheet.TopMargin, 0.75);
+ sheet.setMargin(Sheet.RightMargin, 0.70);
+ sheet.setMargin(Sheet.BottomMargin, 0.75);
+ sheet.setMargin(Sheet.LeftMargin, 0.70);
+ sheet.setMargin(Sheet.HeaderMargin, 0.30);
+ sheet.setMargin(Sheet.FooterMargin, 0.30);
+ }
+
+}
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeConvertHelper.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeConvertHelper.java
new file mode 100644
index 00000000..a962cbc2
--- /dev/null
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeConvertHelper.java
@@ -0,0 +1,239 @@
+package org.jeecg.modules.tools.office.convert;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.poifs.filesystem.FileMagic;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.apache.poi.util.IOUtils;
+import org.jeecg.common.util.SpringContextUtils;
+import org.jeecg.modules.tools.Global;
+import org.jodconverter.core.DocumentConverter;
+import org.jodconverter.core.document.DefaultDocumentFormatRegistry;
+import org.jodconverter.core.document.DocumentFormat;
+import org.jodconverter.core.job.ConversionJobWithOptionalSourceFormatUnspecified;
+import org.jodconverter.core.job.ConversionJobWithSourceSpecified;
+import org.jodconverter.core.office.OfficeException;
+
+import java.io.*;
+import java.nio.file.Files;
+import java.util.UUID;
+
+/**
+ * 文档转化工具统一入口
+ */
+@Slf4j
+public final class OfficeConvertHelper {
+
+
+ private static Global global = SpringContextUtils.getBean(Global.class);
+ public void setGlobal(Global g){
+ global = g;
+ }
+
+ private static String TMP_DIRECTORY = global.getTmpDickPath();
+
+ private OfficeConvertHelper () {}
+
+ public static OfficeConverterBox converter(DocumentConverter documentConverter) {
+ return new OfficeConverterBox(documentConverter);
+ }
+
+ /**
+ * 转换
+ * @param outputHelper 输出对象
+ * @throws IOException io异常
+ * @throws OfficeException office异常
+ */
+ static void execute(OfficeOutputBox outputHelper) throws IOException, OfficeException {
+ OfficeInputBox officeInputBox = outputHelper.getOfficeInputBox();
+ OfficeConverterBox officeConverterBox = officeInputBox.getOfficeConverterBox();
+
+ DocumentConverter documentConverter = officeConverterBox.getDocumentConverter();
+
+ File inpFile = officeInputBox.getInpFile();
+ InputStream inp = officeInputBox.getInp();
+ boolean inpCloseStream = officeInputBox.isCloseStream();
+ DocumentFormat inpDocumentFormat = officeInputBox.getInpDocumentFormat();
+ OfficeInputExcelPrintSetup inputExcelPrintSetup = officeInputBox.getOfficeInputExcelPrintSetup();
+
+ File outFile = outputHelper.getOutFile();
+ OutputStream outp = outputHelper.getOutp();
+ boolean outpCloseStream = outputHelper.isCloseStream();
+ DocumentFormat outDocumentFormat = outputHelper.getOutDocumentFormat();
+
+ if (inpFile != null) {
+ DocumentFormat isDocFormat = inpDocumentFormat;
+ if (MyOfficeUtils.isExcel03(inpFile)) {
+ isDocFormat = DefaultDocumentFormatRegistry.XLS;
+ } else if (MyOfficeUtils.isExcel07(inpFile)) {
+ isDocFormat = DefaultDocumentFormatRegistry.XLSX;
+ }
+ if (DefaultDocumentFormatRegistry.XLS == isDocFormat || DefaultDocumentFormatRegistry.XLSX == isDocFormat) {
+ File file = new File(TMP_DIRECTORY, "xls" + UUID.randomUUID().toString().replace("-", "") + ".tmp");
+ try {
+ try (
+ OutputStream tmpOs = toBufferedOutputStream(Files.newOutputStream(file.toPath()));
+ Workbook workbook = WorkbookFactory.create(inpFile);
+ ) {
+ MyOfficeUtils.setExcelPrintScale(workbook, inputExcelPrintSetup);
+ workbook.write(tmpOs);
+ }
+ ConversionJobWithSourceSpecified as = documentConverter.convert(file).as(isDocFormat);
+ if (outFile != null) {
+ if (outDocumentFormat != null) {
+ as.to(outFile).as(outDocumentFormat).execute();
+ } else {
+ as.to(outFile).execute();
+ }
+ } else {
+ OutputStream bufferedOs = toBufferedOutputStream(outp);
+ as.to(bufferedOs, outpCloseStream).as(outDocumentFormat).execute();
+ }
+ } finally {
+ try {
+ Files.delete(file.toPath());
+ } catch (Exception e) {
+ log.error("文档转换出现问题:" + e.getMessage(),e);
+ }
+ }
+ } else {
+ if (inpDocumentFormat != null) {
+ ConversionJobWithSourceSpecified as = documentConverter.convert(inpFile).as(inpDocumentFormat);
+ if (outFile != null) {
+ if (outDocumentFormat != null) {
+ as.to(outFile).as(outDocumentFormat).execute();
+ } else {
+ as.to(outFile).execute();
+ }
+ } else {
+ OutputStream bufferedOs = toBufferedOutputStream(outp);
+ as.to(bufferedOs, outpCloseStream).as(outDocumentFormat).execute();
+ }
+ } else {
+ ConversionJobWithOptionalSourceFormatUnspecified as = documentConverter.convert(inpFile);
+ if (outFile != null) {
+ if (outDocumentFormat != null) {
+ as.to(outFile).as(outDocumentFormat).execute();
+ } else {
+ as.to(outFile).execute();
+ }
+ } else {
+ OutputStream bufferedOs = toBufferedOutputStream(outp);
+ as.to(bufferedOs, outpCloseStream).as(outDocumentFormat).execute();
+ }
+ }
+ }
+ } else {
+ File unknownFile = new File(TMP_DIRECTORY, "unknown" + UUID.randomUUID().toString().replace("-", "") + ".tmp");
+ try {
+ InputStream bufferedIs = null;
+ try {
+ bufferedIs = FileMagic.prepareToCheckMagic(inp);
+ IOUtils.copy(bufferedIs, unknownFile);
+ } finally {
+ if (inpCloseStream) {
+ if (bufferedIs != null) {
+ try {
+ bufferedIs.close();
+ bufferedIs = null;
+ } catch (Exception e) {
+ log.error("文档转换出现问题:" + e.getMessage(),e);
+ }
+ } else {
+ try {
+ inp.close();
+ } catch (Exception e) {
+ log.error("文档转换出现问题:" + e.getMessage(),e);
+ }
+ }
+ } else {
+ if (bufferedIs != null) {
+ try {
+ bufferedIs.reset();
+ } catch (Exception e) {
+ log.error("文档转换出现问题:" + e.getMessage(),e);
+ }
+ }
+ }
+ }
+
+ DocumentFormat isDocFormat = inpDocumentFormat;
+ if (MyOfficeUtils.isExcel03(unknownFile)) {
+ isDocFormat = DefaultDocumentFormatRegistry.XLS;
+ } else if (MyOfficeUtils.isExcel07(unknownFile)) {
+ isDocFormat = DefaultDocumentFormatRegistry.XLSX;
+ }
+ if (DefaultDocumentFormatRegistry.XLS == isDocFormat || DefaultDocumentFormatRegistry.XLSX == isDocFormat) {
+ File file = new File(TMP_DIRECTORY, "xls" + UUID.randomUUID().toString().replace("-", "") + ".tmp");
+ try {
+ try (
+ OutputStream tmpOs = toBufferedOutputStream(Files.newOutputStream(file.toPath()));
+ Workbook workbook = WorkbookFactory.create(unknownFile);
+ ) {
+ MyOfficeUtils.setExcelPrintScale(workbook, inputExcelPrintSetup);
+ workbook.write(tmpOs);
+ }
+ ConversionJobWithSourceSpecified as = documentConverter.convert(file).as(isDocFormat);
+ if (outFile != null) {
+ if (outDocumentFormat != null) {
+ as.to(outFile).as(outDocumentFormat).execute();
+ } else {
+ as.to(outFile).execute();
+ }
+ } else {
+ OutputStream bufferedOs = toBufferedOutputStream(outp);
+ as.to(bufferedOs, outpCloseStream).as(outDocumentFormat).execute();
+ }
+ } finally {
+ try {
+ Files.delete(file.toPath());
+ } catch (Exception e) {
+ log.error("文档转换出现问题:" + e.getMessage(),e);
+ }
+ }
+ } else {
+ if (inpDocumentFormat != null) {
+ ConversionJobWithSourceSpecified as = documentConverter.convert(unknownFile).as(inpDocumentFormat);
+ if (outFile != null) {
+ if (outDocumentFormat != null) {
+ as.to(outFile).as(outDocumentFormat).execute();
+ } else {
+ as.to(outFile).execute();
+ }
+ } else {
+ OutputStream bufferedOs = toBufferedOutputStream(outp);
+ as.to(bufferedOs, outpCloseStream).as(outDocumentFormat).execute();
+ }
+ } else {
+ ConversionJobWithOptionalSourceFormatUnspecified as = documentConverter.convert(unknownFile);
+ if (outFile != null) {
+ if (outDocumentFormat != null) {
+ as.to(outFile).as(outDocumentFormat).execute();
+ } else {
+ as.to(outFile).execute();
+ }
+ } else {
+ OutputStream bufferedOs = toBufferedOutputStream(outp);
+ as.to(bufferedOs, outpCloseStream).as(outDocumentFormat).execute();
+ }
+ }
+ }
+ } finally {
+ try {
+ Files.delete(unknownFile.toPath());
+ } catch (Exception e) {
+ log.error("文档转换出现问题:" + e.getMessage(),e);
+ }
+ }
+
+ }
+ }
+
+ private static OutputStream toBufferedOutputStream(OutputStream stream) {
+ if (stream instanceof BufferedOutputStream) {
+ return stream;
+ }
+ return new BufferedOutputStream(stream);
+ }
+
+}
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeConverterBox.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeConverterBox.java
new file mode 100644
index 00000000..8796808c
--- /dev/null
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeConverterBox.java
@@ -0,0 +1,31 @@
+package org.jeecg.modules.tools.office.convert;
+
+import org.jodconverter.core.DocumentConverter;
+
+import java.io.File;
+import java.io.InputStream;
+
+public class OfficeConverterBox {
+
+ private final DocumentConverter documentConverter;
+
+ OfficeConverterBox(DocumentConverter documentConverter) {
+ this.documentConverter = documentConverter;
+ }
+
+ public OfficeInputBox from(File inpFile) {
+ return new OfficeInputBox(this, inpFile);
+ }
+
+ public OfficeInputBox from(InputStream inp) {
+ return new OfficeInputBox(this, inp, true);
+ }
+
+ public OfficeInputBox from(InputStream inp, boolean closeStream) {
+ return new OfficeInputBox(this, inp, closeStream);
+ }
+
+ DocumentConverter getDocumentConverter() {
+ return documentConverter;
+ }
+}
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeInputBox.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeInputBox.java
new file mode 100644
index 00000000..b7153faa
--- /dev/null
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeInputBox.java
@@ -0,0 +1,114 @@
+package org.jeecg.modules.tools.office.convert;
+
+import org.jodconverter.core.document.DefaultDocumentFormatRegistry;
+import org.jodconverter.core.document.DocumentFormat;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class OfficeInputBox {
+
+ private final OfficeConverterBox officeConverterBox;
+
+ private File inpFile;
+
+ private InputStream inp;
+
+ private boolean closeStream = true;
+
+ private DocumentFormat inpDocumentFormat;
+
+ private OfficeInputExcelPrintSetup officeInputExcelPrintSetup;
+
+ OfficeInputBox(OfficeConverterBox officeConverterBox, File inpFile) {
+ this.officeConverterBox = officeConverterBox;
+ this.inpFile = inpFile;
+ }
+
+ /**
+ *
+ * @param officeConverterBox 转换对象
+ * @param inp 输入流
+ * @param closeStream 是否关闭输入流,默认true
+ */
+ OfficeInputBox(OfficeConverterBox officeConverterBox, InputStream inp, boolean closeStream) {
+ this.officeConverterBox = officeConverterBox;
+ this.inp = inp;
+ this.closeStream = closeStream;
+ }
+
+ /**
+ *
+ * @param documentFormat @see {org.jodconverter.core.document.DefaultDocumentFormatRegistry}
+ * @return this
+ */
+ public OfficeInputBox as(DocumentFormat documentFormat) {
+ this.inpDocumentFormat = documentFormat;
+ return this;
+ }
+
+ /**
+ *
+ * @param extension @see {org.jodconverter.core.document.DefaultDocumentFormatRegistry}
+ * @return this
+ */
+ public OfficeInputBox asExtension(String extension) {
+ this.inpDocumentFormat = DefaultDocumentFormatRegistry.getFormatByExtension(extension);
+ return this;
+ }
+
+ /**
+ *
+ * @param mediaType @see {org.jodconverter.core.document.DefaultDocumentFormatRegistry}
+ * @return this
+ */
+ public OfficeInputBox asMediaType(String mediaType) {
+ this.inpDocumentFormat = DefaultDocumentFormatRegistry.getFormatByMediaType(mediaType);
+ return this;
+ }
+
+ public OfficeInputExcelPrintSetup excel() {
+ if (this.officeInputExcelPrintSetup == null) {
+ this.officeInputExcelPrintSetup = new OfficeInputExcelPrintSetup(this);
+ }
+ return this.officeInputExcelPrintSetup;
+ }
+
+ public OfficeOutputBox to(File outFile) {
+ return new OfficeOutputBox(this, outFile);
+ }
+
+ public OfficeOutputStreamBox to(OutputStream outp) {
+ return new OfficeOutputStreamBox(this, outp, true);
+ }
+
+ public OfficeOutputStreamBox to(OutputStream outp, boolean closeStream) {
+ return new OfficeOutputStreamBox(this, outp, closeStream);
+ }
+
+ OfficeConverterBox getOfficeConverterBox() {
+ return officeConverterBox;
+ }
+
+ File getInpFile() {
+ return inpFile;
+ }
+
+ InputStream getInp() {
+ return inp;
+ }
+
+ boolean isCloseStream() {
+ return closeStream;
+ }
+
+ DocumentFormat getInpDocumentFormat() {
+ return inpDocumentFormat;
+ }
+
+ OfficeInputExcelPrintSetup getOfficeInputExcelPrintSetup() {
+ return this.officeInputExcelPrintSetup;
+ }
+
+}
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeInputExcelPrintSetup.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeInputExcelPrintSetup.java
new file mode 100644
index 00000000..0452707e
--- /dev/null
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeInputExcelPrintSetup.java
@@ -0,0 +1,170 @@
+package org.jeecg.modules.tools.office.convert;
+
+import org.apache.poi.ss.usermodel.PrintSetup;
+
+public class OfficeInputExcelPrintSetup {
+
+ private final OfficeInputBox officeInputBox;
+
+ /**
+ * 默认A4纸
+ */
+ private short paperSize = PrintSetup.A4_PAPERSIZE;
+ /**
+ * 默认横版
+ */
+ private boolean landscape = true;
+ /**
+ * 默认水平内容在一页上
+ */
+ private short fitWidth = 1;
+ /**
+ * 默认垂直内容分页
+ */
+ private short fitHeight = 0;
+ /**
+ * 默认铺满纸张
+ */
+ private boolean fitToPage = true;
+ /**
+ * 默认内容水平居中
+ */
+ private boolean horizontallyCenter = true;
+ /**
+ * 默认内容垂直与顶部对齐
+ */
+ private boolean verticallyCenter = false;
+ /**
+ * 默认不打印excel的行号和列号
+ */
+ private boolean printRowAndColumnHeadings = false;
+
+ OfficeInputExcelPrintSetup(OfficeInputBox officeInputBox) {
+ this.officeInputBox = officeInputBox;
+ }
+
+ public OfficeInputBox end() {
+ return this.officeInputBox;
+ }
+
+ /**
+ * 设置打印纸张大小
+ * @param paperSize @see {org.apache.poi.ss.usermodel.PrintSetup}
+ * @return this
+ */
+ public OfficeInputExcelPrintSetup setPaperSize(short paperSize) {
+ this.paperSize = paperSize;
+ return this;
+ }
+
+ /**
+ * 设置打印方向,默认true
+ * @param landscape 是否横版打印
+ * @return this
+ */
+ public OfficeInputExcelPrintSetup setLandscape(boolean landscape) {
+ this.landscape = landscape;
+ return this;
+ }
+
+ /**
+ * 设置打印宽度
+ * @param fitWidth 是否打印宽度方向的内容在一页上
+ * @return this
+ */
+ public OfficeInputExcelPrintSetup setFitWidth(boolean fitWidth) {
+ if (fitWidth) {
+ this.fitWidth = 1;
+ } else {
+ this.fitWidth = 0;
+ }
+ return this;
+ }
+
+ /**
+ * 设置打印高度
+ * @param fitHeight 是否打印高度方向的内容在一页上
+ * @return this
+ */
+ public OfficeInputExcelPrintSetup setFitHeight(boolean fitHeight) {
+ if (fitHeight) {
+ this.fitHeight = 1;
+ } else {
+ this.fitHeight = 0;
+ }
+ return this;
+ }
+
+ /**
+ * 设置是否铺满
+ * @param fitToPage 内容是否铺满页面
+ * @return this
+ */
+ public OfficeInputExcelPrintSetup setFitToPage(boolean fitToPage) {
+ this.fitToPage = fitToPage;
+ return this;
+ }
+
+ /**
+ * 设置水平居中
+ * @param horizontallyCenter 内容是否水平居中
+ * @return this
+ */
+ public OfficeInputExcelPrintSetup setHorizontallyCenter(boolean horizontallyCenter) {
+ this.horizontallyCenter = horizontallyCenter;
+ return this;
+ }
+
+ /**
+ * 设置垂直居中
+ * @param verticallyCenter 内容是否垂直居中
+ * @return this
+ */
+ public OfficeInputExcelPrintSetup setVerticallyCenter(boolean verticallyCenter) {
+ this.verticallyCenter = verticallyCenter;
+ return this;
+ }
+
+ /**
+ * 设置是否打印行号和列号,默认false
+ * @param show 设置是否打印行号和列号
+ * @return this
+ */
+ public OfficeInputExcelPrintSetup setPrintRowAndColumnHeadings(boolean show) {
+ this.printRowAndColumnHeadings = show;
+ return this;
+ }
+
+ short getPaperSize() {
+ return paperSize;
+ }
+
+ boolean isLandscape() {
+ return landscape;
+ }
+
+ short getFitWidth() {
+ return fitWidth;
+ }
+
+ short getFitHeight() {
+ return fitHeight;
+ }
+
+ boolean isFitToPage() {
+ return fitToPage;
+ }
+
+ boolean isHorizontallyCenter() {
+ return horizontallyCenter;
+ }
+
+ boolean isVerticallyCenter() {
+ return verticallyCenter;
+ }
+
+ boolean isPrintRowAndColumnHeadings() {
+ return printRowAndColumnHeadings;
+ }
+
+}
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeOutputBox.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeOutputBox.java
new file mode 100644
index 00000000..7dce3143
--- /dev/null
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeOutputBox.java
@@ -0,0 +1,88 @@
+package org.jeecg.modules.tools.office.convert;
+
+import org.jodconverter.core.document.DefaultDocumentFormatRegistry;
+import org.jodconverter.core.document.DocumentFormat;
+import org.jodconverter.core.office.OfficeException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+
+public class OfficeOutputBox {
+
+ private final OfficeInputBox officeInputBox;
+
+ private File outFile;
+
+ private OutputStream outp;
+
+ private boolean closeStream = true;
+
+ private DocumentFormat outDocumentFormat;
+
+ OfficeOutputBox(OfficeInputBox officeInputBox, File outFile) {
+ this.officeInputBox = officeInputBox;
+ this.outFile = outFile;
+ }
+
+ OfficeOutputBox(OfficeOutputStreamBox officeOutputStreamBox) {
+ this.officeInputBox = officeOutputStreamBox.getOfficeInputBox();
+ this.outp = officeOutputStreamBox.getOutp();
+ this.closeStream = officeOutputStreamBox.isCloseStream();
+ }
+
+ /**
+ *
+ * @param documentFormat @see {org.jodconverter.core.document.DefaultDocumentFormatRegistry}
+ * @return this
+ */
+ public OfficeOutputBox as(DocumentFormat documentFormat) {
+ this.outDocumentFormat = documentFormat;
+ return this;
+ }
+
+ /**
+ *
+ * @param extension @see {org.jodconverter.core.document.DefaultDocumentFormatRegistry}
+ * @return this
+ */
+ public OfficeOutputBox asExtension(String extension) {
+ this.outDocumentFormat = DefaultDocumentFormatRegistry.getFormatByExtension(extension);
+ return this;
+ }
+
+ /**
+ *
+ * @param mediaType @see {org.jodconverter.core.document.DefaultDocumentFormatRegistry}
+ * @return this
+ */
+ public OfficeOutputBox asMediaType(String mediaType) {
+ this.outDocumentFormat = DefaultDocumentFormatRegistry.getFormatByMediaType(mediaType);
+ return this;
+ }
+
+ public void execute() throws IOException, OfficeException {
+ OfficeConvertHelper.execute(this);
+ }
+
+ public OfficeInputBox getOfficeInputBox() {
+ return officeInputBox;
+ }
+
+ public File getOutFile() {
+ return outFile;
+ }
+
+ public OutputStream getOutp() {
+ return outp;
+ }
+
+ public boolean isCloseStream() {
+ return closeStream;
+ }
+
+ public DocumentFormat getOutDocumentFormat() {
+ return outDocumentFormat;
+ }
+
+}
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeOutputStreamBox.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeOutputStreamBox.java
new file mode 100644
index 00000000..7a301006
--- /dev/null
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/convert/OfficeOutputStreamBox.java
@@ -0,0 +1,69 @@
+package org.jeecg.modules.tools.office.convert;
+
+import org.jodconverter.core.document.DocumentFormat;
+
+import java.io.OutputStream;
+
+public class OfficeOutputStreamBox {
+
+ private final OfficeInputBox officeInputBox;
+
+ private final OutputStream outp;
+
+ private final boolean closeStream;
+
+ OfficeOutputStreamBox(OfficeInputBox officeInputBox, OutputStream outp, boolean closeStream) {
+ this.officeInputBox = officeInputBox;
+ this.outp = outp;
+ this.closeStream = closeStream;
+ }
+
+
+ /**
+ *
+ * @param documentFormat @see {org.jodconverter.core.document.DefaultDocumentFormatRegistry}
+ * @return 文档输出类
+ */
+ public OfficeOutputBox as(DocumentFormat documentFormat) {
+ OfficeOutputBox officeOutputBox = new OfficeOutputBox(this);
+ officeOutputBox.as(documentFormat);
+ return officeOutputBox;
+ }
+
+ /**
+ *
+ * @param extension @see {org.jodconverter.core.document.DefaultDocumentFormatRegistry}
+ * @return 文档输出类
+ */
+ public OfficeOutputBox asExtension(String extension) {
+ OfficeOutputBox officeOutputBox = new OfficeOutputBox(this);
+ officeOutputBox.asExtension(extension);
+ return officeOutputBox;
+ }
+
+ /**
+ *
+ * @param mediaType @see {org.jodconverter.core.document.DefaultDocumentFormatRegistry}
+ * @return 文档输出类
+ */
+ public OfficeOutputBox asMediaType(String mediaType) {
+ OfficeOutputBox officeOutputBox = new OfficeOutputBox(this);
+ officeOutputBox.asMediaType(mediaType);
+ return officeOutputBox;
+ }
+
+
+ OfficeInputBox getOfficeInputBox() {
+ return officeInputBox;
+ }
+
+
+ OutputStream getOutp() {
+ return outp;
+ }
+
+
+ boolean isCloseStream() {
+ return closeStream;
+ }
+}
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/pdf/PDFUtil.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/pdf/PDFUtil.java
new file mode 100644
index 00000000..8a4c6376
--- /dev/null
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/pdf/PDFUtil.java
@@ -0,0 +1,65 @@
+package org.jeecg.modules.tools.office.pdf;
+
+import lombok.SneakyThrows;
+import org.jeecg.common.util.SpringContextUtils;
+import org.jeecg.modules.tools.office.convert.OfficeConvertHelper;
+import org.jodconverter.core.DocumentConverter;
+
+import java.io.File;
+
+/**
+ * PFD工具类
+ */
+public class PDFUtil {
+
+// private static Global global = SpringContextUtils.getBean(Global.class);
+//
+// public void setGlobal(Global g){
+// global = g;
+// }
+
+ private static DocumentConverter documentConverter = SpringContextUtils.getBean(DocumentConverter.class);
+
+ public void setDocumentConverter(DocumentConverter g){
+ documentConverter = g;
+ }
+
+
+ /**
+ * WORD转PDF方法
+ * @param sourceFile 要被转化的word文档路径(如E:\\1.docx)
+ * @param destFile 转成之后pdf文档存放路径(如E:\\1.pdf)
+ */
+ @SneakyThrows
+ public static void office2PDF(String sourceFile, String destFile) {
+
+ OfficeConvertHelper.converter(documentConverter).from(new File(sourceFile)).to(new File(destFile)).execute();
+// try {
+// File inputFile = new File(sourceFile);
+// File outputFile = new File(destFile);
+// // 获得文件格式(2018年9月25日16:12:35添加,不增加格式,多个文档拼接后转换会报错)
+// DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();
+// DocumentFormat pdfFormat = formatReg.getFormatByFileExtension("pdf");
+// DocumentFormat docFormat = formatReg.getFormatByFileExtension("doc");
+//
+// if (!outputFile.getParentFile().exists()) {
+// outputFile.getParentFile().mkdirs();
+// }
+// OpenOfficeConnection connection = new SocketOpenOfficeConnection(global.libreOfficeUrl, global.libreOfficePort);
+//// OpenOfficeConnection connection = new SocketOpenOfficeConnection("192.168.1.227", 8100);
+// connection.connect();
+// // 2018年7月19日修改, 原方法生成pdf会报错 wy
+//// DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
+// DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
+// converter.convert(inputFile,docFormat, outputFile,pdfFormat);
+// connection.disconnect();
+// } catch (ConnectException e) {
+// e.printStackTrace();
+// }
+ }
+
+ public static void main(String[] args) {
+ PDFUtil.office2PDF("F:\\temp\\test\\a.docx","F:\\temp\\test\\a.pdf");
+ }
+
+}
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/pdf/WordToPDf.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/pdf/WordToPDf.java
similarity index 84%
rename from jeecg-module-main/src/main/java/org/jeecg/modules/tools/pdf/WordToPDf.java
rename to jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/pdf/WordToPDf.java
index 8b1b28f4..116cf9be 100644
--- a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/pdf/WordToPDf.java
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/office/pdf/WordToPDf.java
@@ -1,4 +1,4 @@
-package org.jeecg.modules.tools.pdf;
+package org.jeecg.modules.tools.office.pdf;
public class WordToPDf {
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/pdf/PDFUtil.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/pdf/PDFUtil.java
deleted file mode 100644
index f0043d79..00000000
--- a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/pdf/PDFUtil.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.jeecg.modules.tools.pdf;
-
-import com.artofsolving.jodconverter.DefaultDocumentFormatRegistry;
-import com.artofsolving.jodconverter.DocumentConverter;
-import com.artofsolving.jodconverter.DocumentFormat;
-import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
-import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
-import com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;
-import org.jeecg.common.util.SpringContextUtils;
-import org.jeecg.modules.tools.Global;
-
-import java.io.File;
-import java.net.ConnectException;
-
-/**
- * PFD工具类
- */
-public class PDFUtil {
-
- private static Global global = SpringContextUtils.getBean(Global.class);
-
- public void setGlobal(Global g){
- global = g;
- }
-
- /**
- * WORD转PDF方法
- * @param sourceFile 要被转化的word文档路径(如E:\\1.docx)
- * @param destFile 转成之后pdf文档存放路径(如E:\\1.pdf)
- */
- public static void office2PDF(String sourceFile, String destFile) {
- try {
- File inputFile = new File(sourceFile);
- File outputFile = new File(destFile);
- // 获得文件格式(2018年9月25日16:12:35添加,不增加格式,多个文档拼接后转换会报错)
- DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();
- DocumentFormat pdfFormat = formatReg.getFormatByFileExtension("pdf");
- DocumentFormat docFormat = formatReg.getFormatByFileExtension("doc");
-
- if (!outputFile.getParentFile().exists()) {
- outputFile.getParentFile().mkdirs();
- }
- OpenOfficeConnection connection = new SocketOpenOfficeConnection(global.libreOfficeUrl, global.libreOfficePort);
-// OpenOfficeConnection connection = new SocketOpenOfficeConnection("192.168.1.227", 8100);
- connection.connect();
- // 2018年7月19日修改, 原方法生成pdf会报错 wy
-// DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
- DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
- converter.convert(inputFile,docFormat, outputFile,pdfFormat);
- connection.disconnect();
- } catch (ConnectException e) {
- e.printStackTrace();
- }
- }
-
-// public static void main(String[] args) {
-// PDFUtil.office2PDF("G:\\work\\IDEAWork\\jeecg\\beadhouse\\beadhouse_customer_jeecg_java\\src\\main\\resources\\officetemplates\\jkpg\\HT.docx","F:\\ht4.pdf");
-// }
-
-}
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/word/ExportWord.java b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/word/ExportWord.java
index 024a56d4..37ac9324 100644
--- a/jeecg-module-main/src/main/java/org/jeecg/modules/tools/word/ExportWord.java
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/tools/word/ExportWord.java
@@ -10,7 +10,7 @@ import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.tools.FileUtils;
import org.jeecg.modules.tools.Global;
import org.jeecg.modules.tools.IdGen;
-import org.jeecg.modules.tools.pdf.PDFUtil;
+import org.jeecg.modules.tools.office.pdf.PDFUtil;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/service/impl/ZykServiceImpl.java b/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/service/impl/ZykServiceImpl.java
index 9ef25a4d..5b32d335 100644
--- a/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/service/impl/ZykServiceImpl.java
+++ b/jeecg-module-main/src/main/java/org/jeecg/modules/zyk/service/impl/ZykServiceImpl.java
@@ -13,11 +13,10 @@ import org.jeecg.common.util.text.StringUtils;
import org.jeecg.modules.kc.ktgl.entity.KcKechengbiao;
import org.jeecg.modules.kc.ktgl.service.IKcKechengbiaoService;
import org.jeecg.modules.tools.Global;
-import org.jeecg.modules.tools.pdf.PDFUtil;
+import org.jeecg.modules.tools.office.pdf.PDFUtil;
import org.jeecg.modules.zyk.entity.ZykInfo;
import org.jeecg.modules.zyk.mapper.ZykMapper;
import org.jeecg.modules.zyk.service.IZykService;
-
import org.jeecg.modules.zyk.utils.FileHandleUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -29,7 +28,10 @@ import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
-import java.util.*;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* @Description: 资源库信息
diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
index 18f64364..d41e36b5 100644
--- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
+++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
@@ -297,10 +297,22 @@ third-app:
# appSecret
client-secret: ??
agent-id: ??
-# libreOffice5
+# libreOffice5(旧)弃用
libreOffice:
url: 127.0.0.1
port: 8100
+# 文档转换(新)
+jodconverter:
+ # 使用本机作为转换服务器,如果使用其它主机作为转换服务器,则需要配置remote,
+ # 请参考 org.jodconverter.boot.autoconfigure.JodConverterRemoteProperties
+ local:
+ enabled: true
+ # 为了避免不必要的兼容问题,需要配置本机的LibreOffice安装目录
+ office-home: D:\Program Files\LibreOffice
+ # 配置LibreOffice的服务端口,以逗号分隔,每个端口为一个独立的进程
+ port-numbers: 2001,2002,2003,2004,2005,2006,2007,2008,2009,2010
+ # 配置最大的任务队列
+ max-tasks-per-process: 100
# 媒体处理器
ffmpeg:
# 根路径
diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
index 0cc67926..8a4ee1e5 100644
--- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
+++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
@@ -303,10 +303,22 @@ third-app:
# appSecret
client-secret: ??
agent-id: ??
-# libreOffice5
+# libreOffice5(旧)弃用
libreOffice:
url: 127.0.0.1
port: 8100
+# 文档转换(新)
+jodconverter:
+ # 使用本机作为转换服务器,如果使用其它主机作为转换服务器,则需要配置remote,
+ # 请参考 org.jodconverter.boot.autoconfigure.JodConverterRemoteProperties
+ local:
+ enabled: true
+ # 为了避免不必要的兼容问题,需要配置本机的LibreOffice安装目录
+ office-home: D:\Program Files\LibreOffice
+ # 配置LibreOffice的服务端口,以逗号分隔,每个端口为一个独立的进程
+ port-numbers: 2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020
+ # 配置最大的任务队列
+ max-tasks-per-process: 100
# 媒体处理器
ffmpeg:
# 根路径
diff --git a/pom.xml b/pom.xml
index 734374cd..f3e25d33 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,6 +72,12 @@
2.17.0
1.2.9
+
+
+ 4.4.2
+ 7.3.4
+ 4.4.2
+
@@ -384,6 +390,36 @@
jimureport-nosql-starter
${jimureport-spring-boot-starter.version}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.jodconverter
+ jodconverter-local
+ ${libreoffice.jodconverter-local.version}
+
+
+ org.libreoffice
+ ridl
+ ${libreoffice.ridl.version}
+
+
+ org.jodconverter
+ jodconverter-spring-boot-starter
+ ${libreoffice.jodconverter-spring-boot-starter.version}
+
+