diff --git a/pom.xml b/pom.xml index e315e9e..b5a4aaf 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,7 @@ 1.6.2 2.0.53 0.44.0 + 1.12.2 @@ -131,6 +132,13 @@ provided + + com.deepoove + poi-tl + ${poi-tl.version} + + + diff --git a/src/main/java/com/zsc/edu/dify/framework/generateDocx/generateDocx.java b/src/main/java/com/zsc/edu/dify/framework/generateDocx/generateDocx.java new file mode 100644 index 0000000..5614844 --- /dev/null +++ b/src/main/java/com/zsc/edu/dify/framework/generateDocx/generateDocx.java @@ -0,0 +1,28 @@ +package com.zsc.edu.dify.framework.generateDocx; + +import com.deepoove.poi.XWPFTemplate; +import com.zsc.edu.dify.framework.generateDocx.styleConfig.styleDataWrapper; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class generateDocx { + void generateSpider4(List> rawData) { + String resource = "src/main/resources/docxTemplate/spiderFourModel.docx"; + String target = "src/main/resources/docxTemplate/resultDocx.docx"; + + Map data = new HashMap<>(); + + List> styledData = styleDataWrapper.wrap(rawData); + + data.put("context", styledData); + + try (XWPFTemplate template = XWPFTemplate.compile(resource).render(data)) { + template.writeToFile(target); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/zsc/edu/dify/framework/generateDocx/styleConfig/labelStyles.java b/src/main/java/com/zsc/edu/dify/framework/generateDocx/styleConfig/labelStyles.java new file mode 100644 index 0000000..3a38c24 --- /dev/null +++ b/src/main/java/com/zsc/edu/dify/framework/generateDocx/styleConfig/labelStyles.java @@ -0,0 +1,28 @@ +package com.zsc.edu.dify.framework.generateDocx.styleConfig; + +import com.deepoove.poi.data.style.Style; +import lombok.Data; + +@Data +public class labelStyles { + private final Style titleStyle; + private final Style textStyle; + + // 私有构造函数,强制通过工厂方法创建 + private labelStyles(Style titleStyle, Style textStyle) { + this.titleStyle = titleStyle; + this.textStyle = textStyle; + } + + // 工厂方法:初始化默认样式 + public static labelStyles createDefault() { + Style titleStyle = new Style(); + titleStyle.setBold(true); + titleStyle.setFontSize(11); + + Style textStyle = new Style(); + textStyle.setFontSize(11); + + return new labelStyles(titleStyle, textStyle); + } +} diff --git a/src/main/java/com/zsc/edu/dify/framework/generateDocx/styleConfig/paragraphStylesTesting.java b/src/main/java/com/zsc/edu/dify/framework/generateDocx/styleConfig/paragraphStylesTesting.java new file mode 100644 index 0000000..4ad5b7f --- /dev/null +++ b/src/main/java/com/zsc/edu/dify/framework/generateDocx/styleConfig/paragraphStylesTesting.java @@ -0,0 +1,20 @@ +package com.zsc.edu.dify.framework.generateDocx.styleConfig; + +import com.deepoove.poi.data.style.ParagraphStyle; +import lombok.Data; + +@Data +public class paragraphStylesTesting { + private final ParagraphStyle commonParagraphStyles; + + private paragraphStylesTesting(ParagraphStyle commonParagraphStyles) { + this.commonParagraphStyles = commonParagraphStyles; + } + + public static paragraphStylesTesting createDefault() { + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setSpacing(1.0); + return new paragraphStylesTesting(paragraphStyle); + } + +} diff --git a/src/main/java/com/zsc/edu/dify/framework/generateDocx/styleConfig/styleDataWrapper.java b/src/main/java/com/zsc/edu/dify/framework/generateDocx/styleConfig/styleDataWrapper.java new file mode 100644 index 0000000..1b37d4a --- /dev/null +++ b/src/main/java/com/zsc/edu/dify/framework/generateDocx/styleConfig/styleDataWrapper.java @@ -0,0 +1,42 @@ +package com.zsc.edu.dify.framework.generateDocx.styleConfig; + +import com.deepoove.poi.data.ParagraphRenderData; +import com.deepoove.poi.data.Paragraphs; +import com.deepoove.poi.data.TextRenderData; +import com.deepoove.poi.data.style.Style; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class styleDataWrapper { + static labelStyles styles = labelStyles.createDefault(); + + // 定义标签与样式映射规则。标题用一个样式,其他标签用一个样式 + private static final Map STYLE_MAPPING = Map.of( + "title", styles.getTitleStyle(), + "*", styles.getTextStyle() + ); + + public static List> wrap(List> rawData) { + return rawData.stream() + .map(styleDataWrapper::processMap) + .collect(Collectors.toList()); + } + + // 为每个字段绑定特定的样式 + private static Map processMap(Map rawMap) { + Map styledMap = new HashMap<>(); + rawMap.forEach((key, value) -> { + Style style = STYLE_MAPPING.getOrDefault(key, STYLE_MAPPING.get("*")); + TextRenderData textRenderData = new TextRenderData(value.toString(), style); + +// ParagraphRenderData paragraph = Paragraphs.of(textRenderData).create(); +// paragraph.setParagraphStyle(paragraphStylesTesting.createDefault().getCommonParagraphStyles()); + + styledMap.put(key, textRenderData); + }); + return styledMap; + } +} diff --git a/src/main/resources/docxTemplate/resultDocx.docx b/src/main/resources/docxTemplate/resultDocx.docx new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/docxTemplate/spiderFourModel.docx b/src/main/resources/docxTemplate/spiderFourModel.docx new file mode 100644 index 0000000..98e3753 Binary files /dev/null and b/src/main/resources/docxTemplate/spiderFourModel.docx differ