Merge remote-tracking branch 'origin/master'

This commit is contained in:
zhouc 2025-03-05 18:15:18 +08:00
commit a5e2631adc
8 changed files with 30 additions and 54 deletions

View File

@ -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);

View File

@ -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;
}

View File

@ -24,4 +24,6 @@ import lombok.Data;
})
public class AbstractExData {
private BookmarkType type;
private String value;
}

View File

@ -18,9 +18,5 @@ public class BookmarkReplaceDataModel {
private String name;
private BookmarkType type;
private String value;
private AbstractExData extData;
}

View File

@ -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;
}

View File

@ -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<Set<String>> requestAllBookmarks(@PathVariable("fileId") String fileId) {
@Operation(summary = "书签替换 - 获取文件中所有书签")
@PreAuthorize("@ss.hasPermission('infra:file:bookmark:query')")
public CommonResult<List<BookmarkQueryDataModel>> 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<Object> doGenerate(@PathVariable("fileId") String fileId, @RequestBody List<BookmarkReplaceDataModel> data) {
return CommonResult.success(service.replaceBookmarkWithContent(fileId, data));
}

View File

@ -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<String> queryAllBookmarks(String fileId);
List<BookmarkQueryDataModel> queryAllBookmarks(String fileId);
Long replaceBookmarkWithContent(String fileId, List<BookmarkReplaceDataModel> data);
}

View File

@ -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<String> queryAllBookmarks(String fileId) {
public List<BookmarkQueryDataModel> 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