From 5e0c59f2f5516c67a80a2dfbe91808777dde25d1 Mon Sep 17 00:00:00 2001 From: yanghuanglin Date: Tue, 1 Jul 2025 16:16:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4BaseDocumentService=EF=BC=8C?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E9=83=BD=E6=94=BE=E5=88=B0DocumentService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- document-api/pom.xml | 8 -- .../document/api/BaseDocumentService.java | 94 ------------------- .../optima/document/api/DocumentService.java | 55 ++++++++++- .../server/api/DocumentServiceImpl.java | 8 -- .../server/api/DocumentServiceImpl.java | 10 +- document-test/pom.xml | 37 ++++---- .../document/test/bean/DocumentConverter.java | 20 +++- 7 files changed, 86 insertions(+), 146 deletions(-) delete mode 100644 document-api/src/main/java/com/optima/document/api/BaseDocumentService.java diff --git a/document-api/pom.xml b/document-api/pom.xml index 6c71a4c..462621a 100644 --- a/document-api/pom.xml +++ b/document-api/pom.xml @@ -28,14 +28,6 @@ org.apache.maven.plugins maven-jar-plugin 3.3.0 - - - - - com.example.MyApp - - - diff --git a/document-api/src/main/java/com/optima/document/api/BaseDocumentService.java b/document-api/src/main/java/com/optima/document/api/BaseDocumentService.java deleted file mode 100644 index f7a4de2..0000000 --- a/document-api/src/main/java/com/optima/document/api/BaseDocumentService.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.optima.document.api; - -import java.util.Map; - -/** - * @author yanghuanglin - * @since 2022/12/28 - */ -public interface BaseDocumentService { - /** - * 格式转换 - * - * @param source 源文件流,仅支持docx格式 - * @param sourceExtension 源文件后缀名,不包含"." - * @param targetExtension 目标文件后缀名,不包含"." - * @return 转换后的文件流 - */ - default byte[] convert(byte[] source, String sourceExtension, String targetExtension) { - return convert(source, sourceExtension, targetExtension, null); - } - - /** - * 格式转换 - * - * @param source 源文件流,仅支持docx格式 - * @param sourceExtension 源文件后缀名,不包含"." - * @param targetExtension 目标文件后缀名,不包含"." - * @param targetFormat 目标文件格式,需与目标文件后缀名匹配。 - * server下此参数无效。 - * tl-server下参考: - * word格式 - * 或 excel格式 - * 或 powerpoint格式 - * @return 转换后的文件流 - */ - default byte[] convert(byte[] source, String sourceExtension, String targetExtension, String targetFormat) { - throw new UnsupportedOperationException(); - } - - /** - * 通过调用poi生成word - * - * @param sourceTemplate word模版流,仅支持docx格式 - * @param dataModel 数据模型 - * @return word文档流 - */ - default byte[] generateWord(byte[] sourceTemplate, Map dataModel) { - throw new UnsupportedOperationException(); - } - - /** - * word转为pdf - * - * @param source word文件流,仅支持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文件流,仅支持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 - * - * @param source doc文档流 - * @return docx文档流 - */ - default byte[] docToDocx(byte[] source) { - throw new UnsupportedOperationException(); - } - - /** - * xls转为xlsx - * - * @param source xls文档流 - * @return xlsx文档流 - */ - default byte[] xlsToXlsx(byte[] source) { - throw new UnsupportedOperationException(); - } -} diff --git a/document-api/src/main/java/com/optima/document/api/DocumentService.java b/document-api/src/main/java/com/optima/document/api/DocumentService.java index a86b261..26beaeb 100644 --- a/document-api/src/main/java/com/optima/document/api/DocumentService.java +++ b/document-api/src/main/java/com/optima/document/api/DocumentService.java @@ -1,12 +1,43 @@ package com.optima.document.api; +import java.util.Map; + /** - * 文档接口,此类中用的poi2生成word文档,使用docto进行格式转换 + * 文档操作接口 * * @author yanghuanglin * @since 2022/12/28 */ -public interface DocumentService extends BaseDocumentService { +public interface DocumentService { + /** + * 格式转换 + * + * @param source 源文件流,仅支持docx格式 + * @param sourceExtension 源文件后缀名,不包含"." + * @param targetExtension 目标文件后缀名,不包含"." + * @param targetFormat 目标文件格式,需与目标文件后缀名匹配。 + * jodconverter-document-server 下此参数无效。 + * docto-document-server 下参考: + * word格式 + * 或 excel格式 + * 或 powerpoint格式 + * @return 转换后的文件流 + */ + default byte[] convert(byte[] source, String sourceExtension, String targetExtension, String targetFormat) { + throw new UnsupportedOperationException(); + } + + /** + * 通过调用poi生成word + * + * @param sourceTemplate word模版流,仅支持docx格式 + * @param dataModel 数据模型 + * @return word文档流 + */ + default byte[] generateWord(byte[] sourceTemplate, Map dataModel) { + throw new UnsupportedOperationException(); + } + /** * 通过调用poi将word转pdf,如果clear为true,则仅支持docx格式 * @@ -28,4 +59,24 @@ public interface DocumentService extends BaseDocumentService { default byte[] wordToImage(byte[] source, String targetExtension) { throw new UnsupportedOperationException(); } + + /** + * doc转为docx + * + * @param source doc文档流 + * @return docx文档流 + */ + default byte[] docToDocx(byte[] source) { + throw new UnsupportedOperationException(); + } + + /** + * xls转为xlsx + * + * @param source xls文档流 + * @return xlsx文档流 + */ + default byte[] xlsToXlsx(byte[] source) { + throw new UnsupportedOperationException(); + } } diff --git a/document-server/docto-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java b/document-server/docto-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java index c77d154..c6011fa 100644 --- a/document-server/docto-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java +++ b/document-server/docto-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java @@ -135,10 +135,6 @@ public class DocumentServiceImpl implements DocumentService { } } - public byte[] wordToPdf(byte[] source, String sourceFormat, boolean clear) { - return wordToPdf(source, clear); - } - public byte[] wordToPdf(byte[] source, boolean clear) { try { long start = System.currentTimeMillis(); @@ -185,10 +181,6 @@ public class DocumentServiceImpl implements DocumentService { return null; } - public byte[] wordToImage(byte[] source, String sourceExtension, String targetExtension) { - return wordToImage(source, targetExtension); - } - public byte[] docToDocx(byte[] source) { return convert(source, "doc", "docx", "wdFormatDocumentDefault"); } diff --git a/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java b/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java index b1e53c1..615077b 100644 --- a/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java +++ b/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java @@ -91,7 +91,7 @@ public class DocumentServiceImpl implements DocumentService { * @param targetExtension 目标文件后缀名 * @return 转换后的文件流 */ - public byte[] convert(byte[] source, String sourceExtension, String targetExtension) { + private byte[] convert(byte[] source, String sourceExtension, String targetExtension) { try { sourceExtension = sourceExtension.replace(".", ""); targetExtension = targetExtension.replace(".", ""); @@ -131,10 +131,6 @@ public class DocumentServiceImpl implements DocumentService { } } - public byte[] wordToPdf(byte[] source, String sourceFormat, boolean clear) { - return wordToPdf(source, clear); - } - public byte[] wordToPdf(byte[] source, boolean clear) { try { long start = System.currentTimeMillis(); @@ -181,10 +177,6 @@ public class DocumentServiceImpl implements DocumentService { return null; } - public byte[] wordToImage(byte[] source, String sourceExtension, String targetExtension) { - return wordToImage(source, targetExtension); - } - public byte[] docToDocx(byte[] source) { return convert(source, "doc", "docx"); } diff --git a/document-test/pom.xml b/document-test/pom.xml index e6c0069..9e21255 100644 --- a/document-test/pom.xml +++ b/document-test/pom.xml @@ -45,33 +45,28 @@ - org.apache.maven.plugins - maven-jar-plugin - 3.3.0 - - - - - com.example.MyApp - - - - - - - - org.apache.maven.plugins - maven-source-plugin - 3.2.1 + maven-resources-plugin + 3.3.1 - attach-sources - package + copy-resources + process-resources - jar-no-fork + copy-resources + + ${project.build.directory} + + + src/main/resources + + application.yml + + + + diff --git a/document-test/src/main/java/com/optima/document/test/bean/DocumentConverter.java b/document-test/src/main/java/com/optima/document/test/bean/DocumentConverter.java index 5c45df5..1a2df90 100644 --- a/document-test/src/main/java/com/optima/document/test/bean/DocumentConverter.java +++ b/document-test/src/main/java/com/optima/document/test/bean/DocumentConverter.java @@ -9,6 +9,9 @@ import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; @Component public class DocumentConverter { @@ -29,10 +32,19 @@ public class DocumentConverter { targetFile.delete(); } - String sourceExtension = sourceFile.getName().substring(sourceFile.getName().lastIndexOf(".")); - String targetExtension = targetFile.getName().substring(targetFile.getName().lastIndexOf(".")); + Map params = new HashMap<>(); + params.put("callerName", "张三"); - byte[] converted = documentService.convert(Files.readAllBytes(sourceFile.toPath()), sourceExtension, targetExtension); - Files.write(targetFile.toPath(), converted); + // 生成word,并转为pdf + byte[] generatedWord = documentService.generateWord(Files.readAllBytes(sourceFile.toPath()), params); + byte[] wordedToPdf = documentService.wordToPdf(generatedWord, true); + Path pdfPath = targetFile.toPath(); + Files.write(pdfPath, wordedToPdf); + + // 生成的word转为图片 + byte[] wordedToImage = documentService.wordToImage(generatedWord, "jpg"); + File imageFile = new File(targetFile.getAbsolutePath().replace(".pdf", ".jpg")); + Path imagePath = imageFile.toPath(); + Files.write(imagePath, wordedToImage); } }