简介:
Apache POI 是一个用于读写Microsoft Office文件格式的开源Java库,它支持多种Office文件格式,包括Word (.doc 和 .docx)。
依赖:
在 pom.xml
文件中添加 Apache POI 的依赖:
<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poiartifactId>
<version>5.2.1version>
dependency>
<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poi-ooxmlartifactId>
<version>5.2.1version>
dependency>
简单用法:
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class SimpleWordGenerator {
public static void main(String[] args) {
try (XWPFDocument document = new XWPFDocument()) {
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("Hello, World!");
FileOutputStream fileOut = new FileOutputStream("simple.docx");
document.write(fileOut);
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
复杂用法:
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class ComplexWordGenerator {
public static void main(String[] args) {
try (XWPFDocument document = new XWPFDocument()) {
// 创建标题
XWPFParagraph titlePara = document.createParagraph();
XWPFRun titleRun = titlePara.createRun();
titleRun.setText("Report Title");
titleRun.setBold(true);
titlePara.setAlignment(ParagraphAlignment.CENTER);
// 创建列表
XWPFParagraph listPara = document.createParagraph();
XWPFRun listRun = listPara.createRun();
listPara.createRun().setText("Item 1");
listPara.createRun().addBreak(BreakType.LINE);
listPara.createRun().setText("Item 2");
listPara.createRun().addBreak(BreakType.LINE);
listPara.createRun().setText("Item 3");
// 创建表格
XWPFTable table = document.createTable(3, 2);
table.getRow(0).getCell(0).setText("Header 1");
table.getRow(0).getCell(1).setText("Header 2");
table.getRow(1).getCell(0).setText("Row 1 Data 1");
table.getRow(1).getCell(1).setText("Row 1 Data 2");
table.getRow(2).getCell(0).setText("Row 2 Data 1");
table.getRow(2).getCell(1).setText("Row 2 Data 2");
FileOutputStream fileOut = new FileOutputStream("complex.docx");
document.write(fileOut);
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
简介:
Docx4j 是一个用于生成和处理Word文档的Java库,它支持复杂的文档布局和样式控制。
依赖:
在 pom.xml
文件中添加 Docx4j 的依赖:
<dependency>
<groupId>org.docx4jgroupId>
<artifactId>docx4jartifactId>
<version>3.3.2version>
dependency>
简单用法:
import org.docx4j.Docx4J;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.wml.P;
import org.docx4j.wml.R;
import org.docx4j.wml.Text;
import java.io.File;
public class SimpleDocx4jGenerator {
public static void main(String[] args) {
try {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
P p = wordMLPackage.getMainDocumentPart().createParagraphOfText("Hello, World!");
R r = new R();
r.getContent().add(new Text("Simple Docx4j Example"));
p.getContent().add(r);
wordMLPackage.getMainDocumentPart().getContent().add(p);
Docx4J.save(wordMLPackage, new File("simple.docx"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
复杂用法:
import org.docx4j.Docx4J;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.wml.*;
import org.docx4j.wml.dom.DOMUtil;
import org.docx4j.wml.text.FieldChar;
import org.docx4j.wml.text.FieldCharType;
import org.docx4j.wml.text.Inline;
import org.docx4j.wml.text.SdtContent;
import org.docx4j.wml.text.SdtPr;
import org.docx4j.wml.text.SdtRun;
import java.io.File;
public class ComplexDocx4jGenerator {
public static void main(String[] args) {
try {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
Body body = wordMLPackage.getMainDocumentPart().getJaxbElement().getBody();
// 创建段落
P p = DOMUtil.createElement(P.type, wordMLPackage.getMainDocumentPart().getJaxb2Context());
R r = new R();
r.getContent().add(new T("Complex Docx4j Example"));
p.getContent().add(r);
body.getContent().add(p);
// 创建表格
Tbl tbl = new Tbl();
Tr tr = new Tr();
Tc tc = new Tc();
tc.getContent().add(new P(new R(new T("Header 1"))));
tr.getContent().add(tc);
tc = new Tc();
tc.getContent().add(new P(new R(new T("Header 2"))));
tr.getContent().add(tc);
tbl.getContent().add(tr);
body.getContent().add(tbl);
Docx4J.save(wordMLPackage, new File("complex.docx"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
简介:
FreeMarker 是一个用于生成动态HTML、XML和其他文本格式的模板引擎,同样可以用来生成Word文档。
依赖:
在 pom.xml
文件中添加 FreeMarker 的依赖:
<dependency>
<groupId>org.freemarkergroupId>
<artifactId>freemarkerartifactId>
<version>2.3.31version>
dependency>
简单用法:
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class SimpleFreemarkerGenerator {
public static void main(String[] args) {
try {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setClassForTemplateLoading(SimpleFreemarkerGenerator.class, "/");
Map<String, Object> root = new HashMap<>();
root.put("name", "John Doe");
Template temp = cfg.getTemplate("simple.ftl");
temp.process(root, new FileWriter(new File("simple.docx")));
} catch (Exception e) {
e.printStackTrace();
}
}
}
复杂用法:
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ComplexFreemarkerGenerator {
public static void main(String[] args) {
try {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setClassForTemplateLoading(ComplexFreemarkerGenerator.class, "/");
List<Map<String, Object>> data = new ArrayList<>();
Map<String, Object> item = new HashMap<>();
item.put("name", "John Doe");
item.put("age", 30);
data.add(item);
item = new HashMap<>();
item.put("name", "Jane Doe");
item.put("age", 28);
data.add(item);
Map<String, Object> root = new HashMap<>();
root.put("items", data);
Template temp = cfg.getTemplate("complex.ftl");
temp.process(root, new FileWriter(new File("complex.docx")));
} catch (Exception e) {
e.printStackTrace();
}
}
}
简介:
Thymeleaf 是一个现代的、功能强大的模板引擎,它同样可以用来生成Word文档。
依赖:
在 pom.xml
文件中添加 Thymeleaf 的依赖:
<dependency>
<groupId>org.thymeleafgroupId>
<artifactId>thymeleafartifactId>
<version>3.0.15.RELEASEversion>
dependency>
简单用法:
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import java.io.File;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
public class SimpleThymeleafGenerator {
public static void main(String[] args) {
try {
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("/templates/");
resolver.setSuffix(".docx");
resolver.setTemplateMode(TemplateMode.HTML);
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(resolver);
Context ctx = new Context();
ctx.setVariable("name", "John Doe");
PrintWriter writer = new PrintWriter(new File("simple.docx"));
templateEngine.process("simple", ctx, writer);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
复杂用法:
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import java.io.File;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
public class ComplexThymeleafGenerator {
public static void main(String[] args) {
try {
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("/templates/");
resolver.setSuffix(".docx");
resolver.setTemplateMode(TemplateMode.HTML);
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(resolver);
List<Map<String, Object>> data = new ArrayList<>();
Map<String, Object> item = new HashMap<>();
item.put("name", "John Doe");
item.put("age", 30);
data.add(item);
item = new HashMap<>();
item.put("name", "Jane Doe");
item.put("age", 28);
data.add(item);
Context ctx = new Context();
ctx.setVariable("items", data);
PrintWriter writer = new PrintWriter(new File("complex.docx"));
templateEngine.process("complex", ctx, writer);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}