feat: pdf

This commit is contained in:
zzs 2025-03-01 17:59:42 +08:00
parent b82496e19e
commit c9aaa1c696
6 changed files with 54 additions and 18 deletions

View File

@ -27,11 +27,11 @@ import java.util.Map;
@Component
public class TemplateReplaceExecutor {
public String doReplace(@NotNull String absolutePath, TemplateExecDataModel data) {
public static String doReplace(@NotNull String absolutePath, TemplateExecDataModel data) {
return doReplace(absolutePath, data, DefaultConfig.def());
}
private String doReplace(@NotNull String absolutePath, TemplateExecDataModel data, Configure def) {
private static String doReplace(@NotNull String absolutePath, TemplateExecDataModel data, Configure def) {
File wordFile = new File(absolutePath);
Map<String, Object> dataMap = new HashMap<>();
for (TypeText text : data.getText()) {

View File

@ -1,14 +1,12 @@
package com.wmyun.module.infra.controller.admin.word;
import com.wmyun.farmwork.word.core.model.exec.TemplateExecDataModel;
import com.wmyun.farmwork.word.core.model.gen.TagsGenDataModel;
import com.wmyun.framework.common.pojo.CommonResult;
import com.wmyun.module.infra.service.file.WordTemplateTagService;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -26,7 +24,7 @@ public class WordTemplateController {
@Autowired
private WordTemplateTagService wordService;
@PostMapping("file/{fileId}")
@PostMapping("/file/{fileId}")
public CommonResult<List<TagsGenDataModel>> requestAllTags(@PathVariable("fileId") String fileId) {
try {
return CommonResult.success(wordService.queryAllTag(fileId));
@ -36,4 +34,13 @@ public class WordTemplateController {
}
}
@PostMapping("/file/{fileId}/generate")
public CommonResult<Object> doGenerate(@PathVariable("fileId") String fileId, @RequestBody TemplateExecDataModel data) {
try {
return CommonResult.success(wordService.generateNew(fileId, data));
} catch (Exception e) {
e.printStackTrace();
return CommonResult.error(500, e.getMessage());
}
}
}

View File

@ -1,5 +1,6 @@
package com.wmyun.module.infra.service.file;
import com.wmyun.farmwork.word.core.model.exec.TemplateExecDataModel;
import com.wmyun.farmwork.word.core.model.gen.TagsGenDataModel;
import java.util.List;
@ -14,4 +15,6 @@ import java.util.List;
public interface WordTemplateTagService {
List<TagsGenDataModel> queryAllTag(String fileId) throws Exception;
Long generateNew(String fileId, TemplateExecDataModel data) throws Exception;
}

View File

@ -1,17 +1,15 @@
package com.wmyun.module.infra.service.file;
import com.wmyun.farmwork.word.core.TemplateReplaceExecutor;
import com.wmyun.farmwork.word.core.TemplateTagsGenerate;
import com.wmyun.farmwork.word.core.model.exec.TemplateExecDataModel;
import com.wmyun.farmwork.word.core.model.gen.TagsGenDataModel;
import com.wmyun.framework.common.util.io.IoUtils;
import com.wmyun.module.infra.dal.dataobject.file.FileDO;
import com.wmyun.module.infra.dal.mysql.file.FileMapper;
import com.wmyun.module.infra.framework.file.core.client.FileClient;
import jakarta.annotation.Resource;
import jodd.io.IOUtil;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@ -32,9 +30,17 @@ public class WordTemplateTagServiceImpl implements WordTemplateTagService {
@Autowired
private FileConfigService fileConfigService;
@Autowired
private FileService fileService;
@Override
public List<TagsGenDataModel> queryAllTag(String fileId) throws Exception {
FileDO file = previewService.queryFileInfoByFileId(fileId);
return TemplateTagsGenerate.execAllTags(saveFileToLocalTmp(fileId));
}
private String saveFileToLocalTmp(String fileId) throws Exception {
FileDO file = getFileInfo(fileId);
FileClient client = fileConfigService.getFileClient(file.getConfigId());
byte[] content = client.getContent(file.getPath());
@ -42,6 +48,22 @@ public class WordTemplateTagServiceImpl implements WordTemplateTagService {
Path tempDir = Paths.get(System.getProperty("java.io.tmpdir"));
Path targetPath = tempDir.resolve(name);
Files.write(targetPath, content);
return TemplateTagsGenerate.execAllTags(targetPath.toAbsolutePath().toString());
return targetPath.toString();
}
private FileDO getFileInfo(String fileId) {
return previewService.queryFileInfoByFileId(fileId);
}
@Override
public Long generateNew(String fileId, TemplateExecDataModel data) throws Exception {
String inputPath = saveFileToLocalTmp(fileId);
String outputPath = TemplateReplaceExecutor.doReplace(inputPath, data);
FileDO fileInfo = getFileInfo(fileId);
File file = new File(outputPath);
byte[] content = Files.readAllBytes(file.toPath());
String url = fileService.createFile(fileInfo.getName(), outputPath, content);
return 0L;
}
}

View File

@ -9,9 +9,9 @@ import java.util.ArrayList;
import java.util.List;
public interface PdfSplitService {
List<PdfResultVO> splitPdf(File sourceFile, String outputDir);
List<PdfResultVO> splitPdf(File sourceFile, String outputDir) throws IOException;
void splitPdfByPages(File sourceFile, String outputDir, int startPage, int endPage);
void splitPdfByPages(File sourceFile, String outputDir, int startPage, int endPage) throws IOException;
void splitAllPages(File sourceFile, String outputDir);
void splitAllPages(File sourceFile, String outputDir) throws IOException;
}

View File

@ -2,19 +2,23 @@ package com.wmyun.module.system.service.pdf;
import com.wmyun.module.system.controller.admin.pdf.vo.PdfResultVO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @author zhouc
* @date 2025/3/1 15:42
* @className PdfSplitServiceImpl
* @description
*/
public class PdfSplitServiceImpl {
@Service
public class PdfSplitServiceImpl implements PdfSplitService{
public List<PdfResultVO> splitPdf(File sourceFile, String outputDir) throws IOException {
List<PdfResultVO> results = new ArrayList<>();
try (PDDocument document = PDDocument.load(sourceFile)) {