diff --git a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/BookmarkExec.java b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/BookmarkExec.java index 8859c5a..d9443fa 100644 --- a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/BookmarkExec.java +++ b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/BookmarkExec.java @@ -4,10 +4,9 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.file.FileNameUtil; import com.wmyun.farmwork.word.core.enums.BookmarkType; -import com.wmyun.farmwork.word.core.enums.PictureProvideNameType; -import com.wmyun.farmwork.word.core.model.AbstractExData; import com.wmyun.farmwork.word.core.model.BookmarkReplaceDataModel; import com.wmyun.farmwork.word.core.model.ext.PictureExData; +import com.wmyun.farmwork.word.core.model.ext.TextExData; import lombok.extern.slf4j.Slf4j; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.Units; @@ -15,7 +14,6 @@ import org.apache.poi.xwpf.usermodel.*; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark; import org.springframework.stereotype.Component; import org.w3c.dom.Node; -import org.w3c.dom.Text; import java.io.*; import java.util.ArrayList; @@ -126,17 +124,21 @@ public class BookmarkExec { continue; } BookmarkReplaceDataModel model = dataMap.get(name); - BookmarkType type = model.getType(); - // 处理文本 - if (BookmarkType.TEXT.equals(type)) { - run.setText(model.getValue()); + if (model.getExtData() instanceof TextExData textExData) { + BookmarkType type = textExData.getType(); + + // 处理文本 + if (BookmarkType.TEXT.equals(type)) { + run.setText(textExData.getValue()); + } + } - // 处理图片,以嵌入式插入图片 - if (BookmarkType.PICTURE.equals(type)) { - AbstractExData extData = model.getExtData(); - if (extData instanceof PictureExData picture && PictureProvideNameType.BOOKMARK.equals(picture.getNameType())) { + if (model.getExtData() instanceof PictureExData pictureData) { + BookmarkType type = pictureData.getType(); + // 处理图片,以嵌入式插入图片 + if (BookmarkType.PICTURE.equals(type)) { try { - run.addPicture(new ByteArrayInputStream(picture.readAsByteArray()), XWPFDocument.PICTURE_TYPE_PNG, picture.getPictureName(), Units.toEMU(picture.getWidth()), Units.toEMU(picture.getHeight())); + run.addPicture(new ByteArrayInputStream(pictureData.readAsByteArray()), pictureData.readPictureType(), pictureData.getPictureName(), Units.toEMU(pictureData.getWidth()), Units.toEMU(pictureData.getHeight())); } catch (InvalidFormatException e) { log.error(e.getMessage(), e); throw new RuntimeException(e); diff --git a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/enums/PictureProvideNameType.java b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/enums/PictureProvideNameType.java deleted file mode 100644 index 0559468..0000000 --- a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/enums/PictureProvideNameType.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.wmyun.farmwork.word.core.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * @Classname PictureProvideNameType - * @Description TODO - * @Date 2025/3/4 10:06 - * @Created by violet - */ - -@AllArgsConstructor -@Getter -public enum PictureProvideNameType { - - BOOKMARK("BOOKMARK"), - - DESCRIPTOR("DESCRIPTOR"); - - private final String type; -} diff --git a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/AbstractExData.java b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/AbstractExData.java index e5eec79..7d7d30f 100644 --- a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/AbstractExData.java +++ b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/AbstractExData.java @@ -24,4 +24,6 @@ import lombok.Data; }) public class AbstractExData { private BookmarkType type; + + private String value; } diff --git a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/BookmarkReplaceDataModel.java b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/BookmarkReplaceDataModel.java index b6d1b72..3867626 100644 --- a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/BookmarkReplaceDataModel.java +++ b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/BookmarkReplaceDataModel.java @@ -18,9 +18,5 @@ public class BookmarkReplaceDataModel { private String name; - private BookmarkType type; - - private String value; - private AbstractExData extData; } diff --git a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/ext/PictureExData.java b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/ext/PictureExData.java index d4b68a3..e31f935 100644 --- a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/ext/PictureExData.java +++ b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/model/ext/PictureExData.java @@ -3,14 +3,12 @@ package com.wmyun.farmwork.word.core.model.ext; import cn.hutool.core.io.FileUtil; import cn.hutool.http.HttpUtil; import com.wmyun.farmwork.word.core.enums.PictureProvideDataType; -import com.wmyun.farmwork.word.core.enums.PictureProvideNameType; import com.wmyun.farmwork.word.core.model.AbstractExData; import lombok.AllArgsConstructor; import lombok.Data; import lombok.SneakyThrows; import org.apache.poi.xwpf.usermodel.Document; -import java.net.URL; import java.util.Base64; /** @@ -30,20 +28,16 @@ public class PictureExData extends AbstractExData { private PictureProvideDataType dataType; - private PictureProvideNameType nameType; - - private String data; - @SneakyThrows public byte[] readAsByteArray() { if (PictureProvideDataType.BASE64.equals(dataType)) { - return Base64.getDecoder().decode(data); + return Base64.getDecoder().decode(this.getValue()); } if (PictureProvideDataType.DOWNLOAD_URL.equals(dataType)) { - return HttpUtil.downloadBytes(data); + return HttpUtil.downloadBytes(this.getValue()); } if (PictureProvideDataType.ABSOLUTE_PATH.equals(dataType)) { - return FileUtil.readBytes(data); + return FileUtil.readBytes(this.getValue()); } return null; } diff --git a/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/controller/admin/word/WordBookmarkController.java b/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/controller/admin/word/WordBookmarkController.java index a832938..c902edc 100644 --- a/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/controller/admin/word/WordBookmarkController.java +++ b/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/controller/admin/word/WordBookmarkController.java @@ -5,8 +5,10 @@ import com.wmyun.farmwork.word.core.model.BookmarkReplaceDataModel; import com.wmyun.farmwork.word.deprecated.core.model.gen.TagsGenDataModel; import com.wmyun.framework.common.pojo.CommonResult; import com.wmyun.module.infra.service.file.WordBookmarkService; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -27,11 +29,15 @@ public class WordBookmarkController { private WordBookmarkService service; @PostMapping("/file/{fileId}") - public CommonResult> requestAllBookmarks(@PathVariable("fileId") String fileId) { + @Operation(summary = "书签替换 - 获取文件中所有书签") + @PreAuthorize("@ss.hasPermission('infra:file:bookmark:query')") + public CommonResult> requestAllBookmarks(@PathVariable("fileId") String fileId) { return CommonResult.success(service.queryAllBookmarks(fileId)); } @PostMapping("/file/{fileId}/generate") + @Operation(summary = "书签替换 - 生成替换后文件") + @PreAuthorize("@ss.hasPermission('infra:file:bookmark:generate')") public CommonResult doGenerate(@PathVariable("fileId") String fileId, @RequestBody List data) { return CommonResult.success(service.replaceBookmarkWithContent(fileId, data)); } diff --git a/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/service/file/WordBookmarkService.java b/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/service/file/WordBookmarkService.java index 9638393..93949aa 100644 --- a/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/service/file/WordBookmarkService.java +++ b/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/service/file/WordBookmarkService.java @@ -1,9 +1,9 @@ package com.wmyun.module.infra.service.file; +import com.wmyun.farmwork.word.core.model.BookmarkQueryDataModel; import com.wmyun.farmwork.word.core.model.BookmarkReplaceDataModel; import java.util.List; -import java.util.Set; /** * @Classname WordBookmarkService @@ -14,7 +14,7 @@ import java.util.Set; public interface WordBookmarkService { - Set queryAllBookmarks(String fileId); + List queryAllBookmarks(String fileId); Long replaceBookmarkWithContent(String fileId, List data); } diff --git a/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/service/file/WordBookmarkServiceImpl.java b/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/service/file/WordBookmarkServiceImpl.java index 68d3dda..984045c 100644 --- a/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/service/file/WordBookmarkServiceImpl.java +++ b/wmyun-module-infra/wmyun-module-infra-biz/src/main/java/com/wmyun/module/infra/service/file/WordBookmarkServiceImpl.java @@ -12,8 +12,6 @@ import org.springframework.stereotype.Service; import java.io.File; import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; /** * @Description: TODO @@ -32,9 +30,9 @@ public class WordBookmarkServiceImpl implements WordBookmarkService { @SneakyThrows @Override - public Set queryAllBookmarks(String fileId) { + public List queryAllBookmarks(String fileId) { FileDO fileDO = previewService.queryFileInfoByFileId(fileId); - return BookmarkQuery.queryAll(fileService.getFileContent(fileDO.getConfigId(), fileDO.getPath())).stream().map(BookmarkQueryDataModel::getName).collect(Collectors.toSet()); + return BookmarkQuery.queryAll(fileService.getFileContent(fileDO.getConfigId(), fileDO.getPath())); } @SneakyThrows