在pom.xml文件中添加Apache POI依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.1</version>
</dependency>
-
创建Word模板文件,可以在模板文件中设置内容、样式、页眉页脚等信息。
-
在后端控制器中编写代码,通过POI库读取Word模板文件,替换其中的变量,最后保存为新的Word文件
java @Controller @RequestMapping("/system") public class SysGenController extends BaseController { @PostMapping("/genWord") @ResponseBody public AjaxResult genWord() { // 读取Word模板文件 String templatePath = "D:\\template.docx"; try (XWPFDocument doc = new XWPFDocument(OPCPackage.open(templatePath))) { // 替换变量 Map<String, String> replaceMap = new HashMap<>(); replaceMap.put("${name}", "张三"); replaceMap.put("${age}", "30"); replaceMap.put("${address}", "北京市朝阳区"); replaceText(doc, replaceMap); // 保存为新的Word文件 String destPath = "D:\\output.docx"; try (OutputStream os = new FileOutputStream(destPath)) { doc.write(os); } AjaxResult ajax = AjaxResult.success(); ajax.put("data", "/profile/output.docx"); return ajax; } catch (Exception e) { return AjaxResult.error("生成Word文件失败: " + e.getMessage()); } } private void replaceText(XWPFDocument doc, Map<String, String> map) { for (XWPFParagraph p : doc.getParagraphs()) { List<XWPFRun> runs = p.getRuns(); if (runs != null) { for (XWPFRun r : runs) { String text = r.getText(0); if (text != null) { for (Entry<String, String> entry : map.entrySet()) { if (text.contains(entry.getKey())) { text = text.replace(entry.getKey(), entry.getValue()); r.setText(text, 0); } } } } } } } }在前端页面中提供生成Word文件的按钮,当用户点击按钮时调用后端控制器中的接口来生成Word文件
<template>
<div>
<el-button type="primary" @click="genDoc">生成Word文件</el-button>
</div>
</template>
<script>
export default {
methods: {
genDoc() {
// 调用后端生成Word文件的接口
this.$axios.post('/system/genWord')
.then(response => {
// 在页面中显示生成的Word文件
window.open(response.data.data);
})
.catch(error => {
console.log(error);
});
}
}
}
</script>
该文章描述了如何在Java应用中利用ApachePOI库从模板生成Word文档。首先,在pom.xml中添加ApachePOI依赖,然后创建Word模板并设置内容。在后端控制器中,读取模板文件,替换变量,最后保存为新文件。前端通过按钮触发生成操作,展示生成的Word文件。
3434

被折叠的 条评论
为什么被折叠?



