From 4b0b792e81ba92a15185b3709810c680b5ef2870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E9=BB=84=E6=9E=97?= Date: Thu, 29 Dec 2022 10:19:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86wordToImage=E5=81=9A=E4=B8=BA=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E6=96=B9=E6=B3=95=E6=94=BE=E5=88=B0BaseDocumentServic?= =?UTF-8?q?e=E4=B8=AD=20=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../document/api/BaseDocumentService.java | 36 ++++++++++++------ .../optima/document/api/DocumentService.java | 16 ++++---- .../document/api/LegacyDocumentService.java | 12 ------ .../server/api/LegacyDocumentServiceImpl.java | 16 ++++---- .../tl/server/api/DocumentServiceImpl.java | 37 ++++++++++--------- 5 files changed, 62 insertions(+), 55 deletions(-) diff --git a/api/src/main/java/com/optima/document/api/BaseDocumentService.java b/api/src/main/java/com/optima/document/api/BaseDocumentService.java index 73a519b..71be642 100644 --- a/api/src/main/java/com/optima/document/api/BaseDocumentService.java +++ b/api/src/main/java/com/optima/document/api/BaseDocumentService.java @@ -8,45 +8,59 @@ public interface BaseDocumentService { /** * 格式转换,server和tl-server下均实现 * - * @param sourceData 源文件流,tl-server下仅支持docx格式 + * @param source 源文件流,tl-server下仅支持docx格式 * @param sourceExtension 源文件后缀名,不包含"." * @param targetExtension 目标文件后缀名,不包含"." - * @param targetFormat 目标文件格式 + * @param targetFormat 目标文件格式,需与目标文件后缀名匹配,server下此参数无效。,tl-server下参考: word格式 + * 或 excel格式 + * 或 powerpoint格式 * @return 转换后的文件流 */ - default byte[] convert(byte[] sourceData, String sourceExtension, String targetExtension, String targetFormat) { + default byte[] convert(byte[] source, String sourceExtension, String targetExtension, String targetFormat) { throw new UnsupportedOperationException(); } /** - * 通word转pdf,server和tl-server下均实现 + * word转为pdf,server和tl-server下均实现 * - * @param source 源文件流,tl-server下仅支持docx格式 - * @param sourceFormat 源文件后缀名,不包含".",tl-server下可忽略 - * @param clear 是否清除占位符 + * @param source word文件流,tl-server下仅支持docx格式 + * @param sourceFormat 源文件后缀名,不包含".",tl-server下此参数无效 + * @param clear 是否清除占位符,如果为true,则在tl-server下源文件只支持docx格式 * @return pdf文档流 */ default byte[] wordToPdf(byte[] source, String sourceFormat, boolean clear) { throw new UnsupportedOperationException(); } + /** + * 通过pdfbox将word转图片 + * + * @param source word文件流,tl-server下仅支持docx格式 + * @param sourceExtension 源文件后缀名,不包含".",server下此参数无效 + * @param targetExtension 目标格式 支持jpeg, jpg, gif, tiff or png + * @return 图片流 + */ + default byte[] wordToImage(byte[] source, String sourceExtension, String targetExtension) { + throw new UnsupportedOperationException(); + } + /** * doc转为docx,server和tl-server下均实现 * - * @param docData doc文档流 + * @param source doc文档流 * @return docx文档流 */ - default byte[] docToDocx(byte[] docData) { + default byte[] docToDocx(byte[] source) { throw new UnsupportedOperationException(); } /** * xls转为xlsx,server和tl-server下均实现 * - * @param xlsData xls文档流 + * @param source xls文档流 * @return xlsx文档流 */ - default byte[] xlsToXlsx(byte[] xlsData) { + default byte[] xlsToXlsx(byte[] source) { throw new UnsupportedOperationException(); } } diff --git a/api/src/main/java/com/optima/document/api/DocumentService.java b/api/src/main/java/com/optima/document/api/DocumentService.java index d4fc5df..81b6d47 100644 --- a/api/src/main/java/com/optima/document/api/DocumentService.java +++ b/api/src/main/java/com/optima/document/api/DocumentService.java @@ -12,27 +12,27 @@ public interface DocumentService extends BaseDocumentService { /** * 通过调用poi生成word,仅tl-server模块下实现,仅支持docx格式 * - * @param templateData word模版流,仅支持docx格式 - * @param dataModel 数据模型 + * @param sourceTemplate word模版流,仅支持docx格式 + * @param dataModel 数据模型 * @return word文档流 */ - default byte[] generateWord(byte[] templateData, Map dataModel) { + default byte[] generateWord(byte[] sourceTemplate, Map dataModel) { throw new UnsupportedOperationException(); } /** - * 通过调用poi将word转pdf,仅tl-server模块下实现,仅支持docx格式 + * 通过调用poi将word转pdf,仅tl-server模块下实现,如果clear为true,则仅支持docx格式 * - * @param templateData word模版流,仅支持docx格式 - * @param clear 是否清除占位符 + * @param source word模版流,仅支持docx格式 + * @param clear 是否清除占位符 * @return pdf文档流 */ - default byte[] wordToPdf(byte[] templateData, boolean clear) { + default byte[] wordToPdf(byte[] source, boolean clear) { throw new UnsupportedOperationException(); } /** - * word转图片,仅支持docx格式 + * 通过pdfbox将word转图片,仅支持docx格式 * * @param source word文件流,仅支持docx格式 * @param targetExtension 目标格式 支持jpeg, jpg, gif, tiff or png diff --git a/api/src/main/java/com/optima/document/api/LegacyDocumentService.java b/api/src/main/java/com/optima/document/api/LegacyDocumentService.java index b1d7e7a..f4c9610 100644 --- a/api/src/main/java/com/optima/document/api/LegacyDocumentService.java +++ b/api/src/main/java/com/optima/document/api/LegacyDocumentService.java @@ -10,18 +10,6 @@ import java.util.Map; * @since 2021-09-28 16:00 */ public interface LegacyDocumentService extends BaseDocumentService { - /** - * 通过pdfbox将word转图片,仅server模块下实现 - * - * @param templateData word模版流 - * @param sourceExtension 源文件后缀名,不包含"." - * @param targetExtension 目标格式 支持jpeg, jpg, gif, tiff or png - * @return 图片流 - */ - default byte[] wordToImage(byte[] templateData, String sourceExtension, String targetExtension) { - throw new UnsupportedOperationException(); - } - /** * 通过jacob向文档中插入图片,仅server模块下实现 * diff --git a/server/src/main/java/com/optima/document/server/api/LegacyDocumentServiceImpl.java b/server/src/main/java/com/optima/document/server/api/LegacyDocumentServiceImpl.java index 190864d..f01cdd9 100644 --- a/server/src/main/java/com/optima/document/server/api/LegacyDocumentServiceImpl.java +++ b/server/src/main/java/com/optima/document/server/api/LegacyDocumentServiceImpl.java @@ -44,6 +44,8 @@ public class LegacyDocumentServiceImpl implements LegacyDocumentService { */ private byte[] convert(byte[] source, String sourceExtension, String targetExtension) { try { + sourceExtension = sourceExtension.replace(".",""); + targetExtension = targetExtension.replace(".",""); long start = System.currentTimeMillis(); String command = "%s -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\" -nofirststartwizard"; Process p = Runtime.getRuntime().exec(String.format(command, documentConfig.getOpenOfficeHome())); @@ -55,7 +57,7 @@ public class LegacyDocumentServiceImpl implements LegacyDocumentService { converter.convert(new ByteArrayInputStream(source), formatRegistry.getFormatByFileExtension(sourceExtension), bos, formatRegistry.getFormatByFileExtension(targetExtension)); connection.disconnect(); p.destroy(); - log.info("{} to {} take {} milliseconds", sourceExtension, targetExtension, System.currentTimeMillis() - start); + log.info("openoffice convert {} to {} take time in millis:{}", sourceExtension, targetExtension, System.currentTimeMillis() - start); return bos.toByteArray(); } catch (Exception e) { e.printStackTrace(); @@ -87,8 +89,8 @@ public class LegacyDocumentServiceImpl implements LegacyDocumentService { return null; } - public byte[] convert(byte[] sourceData, String sourceExtension, String targetExtension, String targetFormat) { - return convert(sourceData, sourceExtension, targetExtension); + public byte[] convert(byte[] source, String sourceExtension, String targetExtension, String targetFormat) { + return convert(source, sourceExtension, targetExtension); } public byte[] wordToImage(byte[] source, String sourceExtension, String targetExtension) { @@ -108,11 +110,11 @@ public class LegacyDocumentServiceImpl implements LegacyDocumentService { return null; } - public byte[] docToDocx(byte[] docData) { - return convert(docData, "doc", "docx"); + public byte[] docToDocx(byte[] source) { + return convert(source, "doc", "docx"); } - public byte[] xlsToXlsx(byte[] xlsData) { - return convert(xlsData, "xls", "xlsx"); + public byte[] xlsToXlsx(byte[] source) { + return convert(source, "xls", "xlsx"); } } diff --git a/tl-server/src/main/java/com/optima/document/tl/server/api/DocumentServiceImpl.java b/tl-server/src/main/java/com/optima/document/tl/server/api/DocumentServiceImpl.java index c4e99f7..bc068d0 100644 --- a/tl-server/src/main/java/com/optima/document/tl/server/api/DocumentServiceImpl.java +++ b/tl-server/src/main/java/com/optima/document/tl/server/api/DocumentServiceImpl.java @@ -38,6 +38,7 @@ import java.util.UUID; * @author Elias * @since 2021-09-28 16:18 */ +@SuppressWarnings("rawtypes") @Slf4j @Service public class DocumentServiceImpl implements DocumentService { @@ -86,15 +87,13 @@ public class DocumentServiceImpl implements DocumentService { @Resource private DocumentConfig documentConfig; - public byte[] convert(byte[] sourceData, String sourceExtension, String targetExtension, String targetFormat) { + public byte[] convert(byte[] source, String sourceExtension, String targetExtension, String targetFormat) { try { - if (!sourceExtension.contains(".")) - sourceExtension = "." + sourceExtension; - if (!targetExtension.contains(".")) - targetExtension = "." + targetExtension; - Path sourcePath = Files.createTempFile(UUID.randomUUID().toString(), sourceExtension); - Path targetPath = Files.createTempFile(UUID.randomUUID().toString(), targetExtension); - Files.write(sourcePath, sourceData); + sourceExtension = sourceExtension.replace(".", ""); + targetExtension = targetExtension.replace(".", ""); + Path sourcePath = Files.createTempFile(UUID.randomUUID().toString(), "." + sourceExtension); + Path targetPath = Files.createTempFile(UUID.randomUUID().toString(), "." + targetExtension); + Files.write(sourcePath, source); try { long begin = System.currentTimeMillis(); String command; @@ -109,7 +108,7 @@ public class DocumentServiceImpl implements DocumentService { Process p = Runtime.getRuntime().exec(command); p.waitFor(); long end = System.currentTimeMillis(); - log.info("docto {} to {} take time in millis:{}", sourceExtension, targetExtension, (end - begin)); + log.info("docto convert {} to {} take time in millis:{}", sourceExtension, targetExtension, (end - begin)); return Files.readAllBytes(targetPath); } catch (Exception e) { e.printStackTrace(); @@ -124,12 +123,12 @@ public class DocumentServiceImpl implements DocumentService { return null; } - public byte[] generateWord(byte[] templateData, Map dataModel) { + public byte[] generateWord(byte[] sourceTemplate, Map dataModel) { long start = System.currentTimeMillis(); - XWPFTemplate template = XWPFTemplate.compile(new ByteArrayInputStream(templateData), wtlConfig).render(dataModel); + XWPFTemplate template = XWPFTemplate.compile(new ByteArrayInputStream(sourceTemplate), wtlConfig).render(dataModel); try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { template.write(bos); - log.info("word generate========consuming:{} milliseconds", System.currentTimeMillis() - start); + log.info("word generate take time in millis:{}", System.currentTimeMillis() - start); return bos.toByteArray(); } catch (Exception e) { log.error("word generate error", e); @@ -179,7 +178,7 @@ public class DocumentServiceImpl implements DocumentService { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageIOUtil.writeImage(bim, targetExtension, bos, 300); document.close(); - log.info("word to image=======consuming:{} milliseconds", System.currentTimeMillis() - start); + log.info("word to image take time in millis:{}", System.currentTimeMillis() - start); return bos.toByteArray(); } catch (Exception e) { log.error("word to image error", e); @@ -187,11 +186,15 @@ public class DocumentServiceImpl implements DocumentService { return null; } - public byte[] docToDocx(byte[] docData) { - return convert(docData, "doc", "docx", "wdFormatDocumentDefault"); + public byte[] wordToImage(byte[] source, String sourceExtension, String targetExtension) { + return wordToImage(source, targetExtension); } - public byte[] xlsToXlsx(byte[] xlsData) { - return convert(xlsData, "xls", "xlsx", "xlWorkbookDefault"); + public byte[] docToDocx(byte[] source) { + return convert(source, "doc", "docx", "wdFormatDocumentDefault"); + } + + public byte[] xlsToXlsx(byte[] source) { + return convert(source, "xls", "xlsx", "xlWorkbookDefault"); } }