专业的JAVA编程教程与资源

网站首页 > java教程 正文

Poi生成word(poi生成word表格 内容居中)

temp10 2024-11-05 11:51:00 java教程 18 ℃ 0 评论

Poi生成word

在Java-web项目开发过程中经常会遇到导出Word文档的业务场景。XWPFDocument是apache基金会提供的用户导出Word文档的工具类

一、基本的概念

XWPFDocument:代表一个docx文档

Poi生成word(poi生成word表格 内容居中)

XWPFParagraph:代表文档、表格、标题等种的段落,由多个XWPFRun组成

XWPFRun:代表具有同样风格的一段文本

XWPFTable:代表一个表格

XWPFTableRow:代表表格的一行

XWPFTableCell:代表表格的一个单元格

XWPFChar:表示.docx文件中的图表

XWPFHyperlink:表示超链接

XWPFPicture:代表图片

XWPFComment :代表批注

XWPFFooter:代表页脚

XWPFHeader:代表页眉


二、实现思路:

1. 使用poi的XWPF模块读取word模板,生成一个XWPFDocument对象。

2. 遍历XWPFDocument的各个段落和表格,查找需要替换的文本,使用XWPFRun对象中的setText方法替换文本。

3. 使用OutputStream将替换后的XWPFDocument对象转化为字节数组。

4. 将字节数组通过HttpServletResponse对象的输出流写出给前端。

5. 前端通过ajax的方式接收并解析返回的文件流。

三、maven依赖,导入jar包

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi</artifactId>

<version>4.0.0</version>

</dependency>

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>4.0.0</version>

</dependency>


四、word模板

在resources资源文件夹下准备好Word模板



模板文件设置如下:



合同.docx

五、实现代码

@RestController

@RequestMapping("/contract")

public class ContractController extends ApiController {

@Autowired

private ResourceLoader resourceLoader;


@RequestMapping("/createContract")

public void createContract(HttpServletResponse response) throws IOException {

Map<String,Object> paramMap = new HashMap<>();

paramMap.put("${bankName}","农业银行");

paramMap.put("${userName}","张三");

Set set = paramMap.keySet();


//1、使用poi的XWPF模块读取word模板

// InputStream is = this.getClass().getClassLoader().getResourceAsStream("合同.docx");

// InputStream is =getClass().getResourceAsStream("classpath:合同.docx");

Resource resource = resourceLoader.getResource("classpath:合同.docx");

InputStream inputStream = resource.getInputStream();

/* InputStream is = getClass()

.getClassLoader().getResourceAsStream("合同.docx");

*/ //2、生成一个XWPFDocument对象

XWPFDocument doc = new XWPFDocument(inputStream);

//3、读取文档中的段落,回车符为一个段落。

Iterator<XWPFParagraph> itPara = doc.getParagraphsIterator();

while(itPara.hasNext()){//是否有下一个段落

XWPFParagraph paragraph = itPara.next();//获取下一个段落

//获取文本

List<XWPFRun> run = paragraph.getRuns();

// 遍历段落文字对象

for (XWPFRun xwpfRun:run

) {

if(xwpfRun==null){

continue; //继续执行

}

String sectionItem = xwpfRun.getText(xwpfRun.getTextPosition()); //段落内容

// 遍历自定义表单关键字,替换Word文档中的内容

Iterator<String> iterator = set.iterator();

while (iterator.hasNext()) {

// 当前关键字

String key = iterator.next();

// 替换内容

sectionItem = sectionItem.replace(key,

String.valueOf(paramMap.get(key)));

}

//重新赋值

xwpfRun.setText(sectionItem, 0);

}


}

String fileName = "张三合同";

fileName = new String((fileName + ".docx")

.getBytes("UTF-8"), "ISO-8859-1");

response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8");

OutputStream os = response.getOutputStream();

doc.write(os);

}

}

七、实现效果




替换成


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表