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模板:注意模板里面的中文最好全部设置成微软雅黑或者宋体,不然会乱码

相关推荐
心随雨下几秒前
TypeScript泛型开发常见错误解析
java·开发语言·typescript
DonaldCen6662 分钟前
Java 王者修炼手册【Mysql篇 - SQL执行存储流程】:拆解 InnoDB 存储结构与 SQL 执行流程,吃透 Buffer Pool 和 Change
java
旺仔Sec18 分钟前
2025年广东省职业院校技能大赛高职组“区块链技术应用”竞赛试题(二)
java·区块链
Boop_wu32 分钟前
[Java EE] 多线程编程进阶
java·数据库·java-ee
w***37511 小时前
SpringBoot【实用篇】- 测试
java·spring boot·后端
q***61411 小时前
Java实战:Spring Boot实现WebSocket实时通信
java·spring boot·websocket
k***82511 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
2301_815686451 小时前
extern
java·开发语言
q***56381 小时前
Java进阶-SPI机制
java·开发语言
合作小小程序员小小店1 小时前
桌面开发,在线%物品代送,代接管理%系统,基于vs2022,c#,winform,sql server数据。
开发语言·数据库·sql·microsoft·c#