java生成word

两种方案

一、poi-tl生成word

XML 复制代码
<dependency>
	<groupId>com.deepoove</groupId>
	<artifactId>poi-tl</artifactId>
	<version>1.12.1</version>
</dependency>
java 复制代码
public static void main(String[] args) throws Exception {
	String path = "C:/siefile/bak11/v9/";
	String templateUrl = path + "poitl-template.docx";
	String outUrl = path + "poi-tl测试.docx";
	Map<String, Object> data = new HashMap<>();
	data.put("detail", "用这些语言编写的程序和上面我们讲的命令行客户端");
	data.put("remark", "对mysql-connector-java源码的分析");

	RowRenderData row0 = Rows.of("姓名", "学历").textColor("FFFFFF")
			.bgColor("4472C4").center().create();
	RowRenderData row1 = Rows.create("李四", "博士");
	data.put("testTable", Tables.create(row0, row1));

	XWPFTemplate render = XWPFTemplate.compile(templateUrl).render(data);
	render.writeToFile(outUrl);
	System.out.println("========done========");
}

word模板:注意模板里面的中文最好全部设置成微软雅黑或者宋体,不然会乱码

二、docx4j生成word

XML 复制代码
<properties>
	<docx4j.version>8.3.10</docx4j.version>
</properties>
XML 复制代码
<dependency>
	<groupId>org.docx4j</groupId>
	<artifactId>docx4j-JAXB-Internal</artifactId>
	<version>${docx4j.version}</version>
</dependency>
<dependency>
	<groupId>org.docx4j</groupId>
	<artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
	<version>${docx4j.version}</version>
</dependency>
<dependency>
	<groupId>org.docx4j</groupId>
	<artifactId>docx4j-export-fo</artifactId>
	<version>${docx4j.version}</version>
</dependency>
java 复制代码
public static void main(String[] args) throws Exception {
	String path = "C:/siefile/bak11/v9/";
	String templateFilePath = path + "docx4j-template.docx";
	String outFilePath = path + "docx4j测试.docx";

	// 加载word模板
	WordprocessingMLPackage wordPackage = WordprocessingMLPackage.load(new File(templateFilePath));
	MainDocumentPart documentPart = wordPackage.getMainDocumentPart();

	// 找到表格第二行,然后进行变量替换
	ClassFinder find = new ClassFinder(Tbl.class);
	new TraversalUtil(documentPart.getContent(), find);
	Tbl table = (Tbl) find.results.get(0);
	List<Object> tableContent = table.getContent();
	Tr templateTr = (Tr) tableContent.get(1);
	String templateTrXml = XmlUtils.marshaltoString(templateTr);
	List<Map> list = getTableData();
	for (Map map : list) {
		Tr newTr = (Tr) XmlUtils.unmarshallFromTemplate(templateTrXml, map);
		tableContent.add(newTr);
	}
	tableContent.remove(1);

	// 普通的变量替换
	Map<String, String> data = new HashMap<>();
	data.put("detail", "用这些语言编写的程序和上面我们讲的命令行客户端");
	data.put("remark", "对mysql-connector-java源码的分析");
	VariablePrepare.prepare(wordPackage);
	documentPart.variableReplace(data);

	Docx4J.save(wordPackage, new FileOutputStream(outFilePath));
	System.out.println("=========done========");
}

private static List<Map> getTableData() {
	List list = new ArrayList();
	for (int index = 0; index < 5; index++) {
		HashMap map = new HashMap();
		map.put("name", "name_" + index);
		map.put("age", "age_" + index);
		list.add(map);
	}
	return list;
}

word模板:注意模板里面的中文最好全部设置成微软雅黑或者宋体,不然会乱码

相关推荐
认真的酒窝8 小时前
自己动手开发编译器(十一)语义分析
java·开发语言
wbs_scy9 小时前
Linux C++ 高并发编程:线程池全链路深度解析,从原理到手撕实现
java·开发语言
JAVA面经实录9179 小时前
Linux 常用命令完整知识体系
java·linux·开发语言·汇编
贪玩的蛋挞10 小时前
C#与闭包
开发语言·c#
Full Stack Developme11 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
程序员老油条13 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
shushangyun_14 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..14 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
忧郁的紫菜14 小时前
基础实现:单篇 Markdown 转 Word
开发语言·c#·word
甜美的小天鹅15 小时前
Swifter C#之inline还是不inline,这是个问题
开发语言·c#