feat: change bookmark data type
This commit is contained in:
parent
a1ed79ab53
commit
1d53f09b06
@ -4,10 +4,9 @@ import cn.hutool.core.io.FileUtil;
|
|||||||
import cn.hutool.core.io.IoUtil;
|
import cn.hutool.core.io.IoUtil;
|
||||||
import cn.hutool.core.io.file.FileNameUtil;
|
import cn.hutool.core.io.file.FileNameUtil;
|
||||||
import com.wmyun.farmwork.word.core.enums.BookmarkType;
|
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.BookmarkReplaceDataModel;
|
||||||
import com.wmyun.farmwork.word.core.model.ext.PictureExData;
|
import com.wmyun.farmwork.word.core.model.ext.PictureExData;
|
||||||
|
import com.wmyun.farmwork.word.core.model.ext.TextExData;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
||||||
import org.apache.poi.util.Units;
|
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.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.Text;
|
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -126,17 +124,21 @@ public class BookmarkExec {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
BookmarkReplaceDataModel model = dataMap.get(name);
|
BookmarkReplaceDataModel model = dataMap.get(name);
|
||||||
BookmarkType type = model.getType();
|
if (model.getExtData() instanceof TextExData textExData) {
|
||||||
// 处理文本
|
BookmarkType type = textExData.getType();
|
||||||
if (BookmarkType.TEXT.equals(type)) {
|
|
||||||
run.setText(model.getValue());
|
// 处理文本
|
||||||
|
if (BookmarkType.TEXT.equals(type)) {
|
||||||
|
run.setText(textExData.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// 处理图片,以嵌入式插入图片
|
if (model.getExtData() instanceof PictureExData pictureData) {
|
||||||
if (BookmarkType.PICTURE.equals(type)) {
|
BookmarkType type = pictureData.getType();
|
||||||
AbstractExData extData = model.getExtData();
|
// 处理图片,以嵌入式插入图片
|
||||||
if (extData instanceof PictureExData picture && PictureProvideNameType.BOOKMARK.equals(picture.getNameType())) {
|
if (BookmarkType.PICTURE.equals(type)) {
|
||||||
try {
|
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) {
|
} catch (InvalidFormatException e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
@ -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;
|
|
||||||
}
|
|
@ -24,4 +24,6 @@ import lombok.Data;
|
|||||||
})
|
})
|
||||||
public class AbstractExData {
|
public class AbstractExData {
|
||||||
private BookmarkType type;
|
private BookmarkType type;
|
||||||
|
|
||||||
|
private String value;
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,5 @@ public class BookmarkReplaceDataModel {
|
|||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
private BookmarkType type;
|
|
||||||
|
|
||||||
private String value;
|
|
||||||
|
|
||||||
private AbstractExData extData;
|
private AbstractExData extData;
|
||||||
}
|
}
|
||||||
|
@ -3,14 +3,12 @@ package com.wmyun.farmwork.word.core.model.ext;
|
|||||||
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.core.io.FileUtil;
|
||||||
import cn.hutool.http.HttpUtil;
|
import cn.hutool.http.HttpUtil;
|
||||||
import com.wmyun.farmwork.word.core.enums.PictureProvideDataType;
|
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 com.wmyun.farmwork.word.core.model.AbstractExData;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import org.apache.poi.xwpf.usermodel.Document;
|
import org.apache.poi.xwpf.usermodel.Document;
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -30,20 +28,16 @@ public class PictureExData extends AbstractExData {
|
|||||||
|
|
||||||
private PictureProvideDataType dataType;
|
private PictureProvideDataType dataType;
|
||||||
|
|
||||||
private PictureProvideNameType nameType;
|
|
||||||
|
|
||||||
private String data;
|
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public byte[] readAsByteArray() {
|
public byte[] readAsByteArray() {
|
||||||
if (PictureProvideDataType.BASE64.equals(dataType)) {
|
if (PictureProvideDataType.BASE64.equals(dataType)) {
|
||||||
return Base64.getDecoder().decode(data);
|
return Base64.getDecoder().decode(this.getValue());
|
||||||
}
|
}
|
||||||
if (PictureProvideDataType.DOWNLOAD_URL.equals(dataType)) {
|
if (PictureProvideDataType.DOWNLOAD_URL.equals(dataType)) {
|
||||||
return HttpUtil.downloadBytes(data);
|
return HttpUtil.downloadBytes(this.getValue());
|
||||||
}
|
}
|
||||||
if (PictureProvideDataType.ABSOLUTE_PATH.equals(dataType)) {
|
if (PictureProvideDataType.ABSOLUTE_PATH.equals(dataType)) {
|
||||||
return FileUtil.readBytes(data);
|
return FileUtil.readBytes(this.getValue());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -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.farmwork.word.deprecated.core.model.gen.TagsGenDataModel;
|
||||||
import com.wmyun.framework.common.pojo.CommonResult;
|
import com.wmyun.framework.common.pojo.CommonResult;
|
||||||
import com.wmyun.module.infra.service.file.WordBookmarkService;
|
import com.wmyun.module.infra.service.file.WordBookmarkService;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -27,11 +29,15 @@ public class WordBookmarkController {
|
|||||||
private WordBookmarkService service;
|
private WordBookmarkService service;
|
||||||
|
|
||||||
@PostMapping("/file/{fileId}")
|
@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));
|
return CommonResult.success(service.queryAllBookmarks(fileId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/file/{fileId}/generate")
|
@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) {
|
public CommonResult<Object> doGenerate(@PathVariable("fileId") String fileId, @RequestBody List<BookmarkReplaceDataModel> data) {
|
||||||
return CommonResult.success(service.replaceBookmarkWithContent(fileId, data));
|
return CommonResult.success(service.replaceBookmarkWithContent(fileId, data));
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package com.wmyun.module.infra.service.file;
|
package com.wmyun.module.infra.service.file;
|
||||||
|
|
||||||
|
import com.wmyun.farmwork.word.core.model.BookmarkQueryDataModel;
|
||||||
import com.wmyun.farmwork.word.core.model.BookmarkReplaceDataModel;
|
import com.wmyun.farmwork.word.core.model.BookmarkReplaceDataModel;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Classname WordBookmarkService
|
* @Classname WordBookmarkService
|
||||||
@ -14,7 +14,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
public interface WordBookmarkService {
|
public interface WordBookmarkService {
|
||||||
|
|
||||||
Set<String> queryAllBookmarks(String fileId);
|
List<BookmarkQueryDataModel> queryAllBookmarks(String fileId);
|
||||||
|
|
||||||
Long replaceBookmarkWithContent(String fileId, List<BookmarkReplaceDataModel> data);
|
Long replaceBookmarkWithContent(String fileId, List<BookmarkReplaceDataModel> data);
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,6 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: TODO
|
* @Description: TODO
|
||||||
@ -32,9 +30,9 @@ public class WordBookmarkServiceImpl implements WordBookmarkService {
|
|||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@Override
|
@Override
|
||||||
public Set<String> queryAllBookmarks(String fileId) {
|
public List<BookmarkQueryDataModel> queryAllBookmarks(String fileId) {
|
||||||
FileDO fileDO = previewService.queryFileInfoByFileId(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
|
@SneakyThrows
|
||||||
|
Loading…
Reference in New Issue
Block a user