word生成_Ruoyi

该文章描述了如何在Java应用中利用ApachePOI库从模板生成Word文档。首先,在pom.xml中添加ApachePOI依赖,然后创建Word模板并设置内容。在后端控制器中,读取模板文件,替换变量,最后保存为新文件。前端通过按钮触发生成操作,展示生成的Word文件。

 在pom.xml文件中添加Apache POI依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.1</version>
</dependency>
  1. 创建Word模板文件,可以在模板文件中设置内容、样式、页眉页脚等信息。

  2. 在后端控制器中编写代码,通过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>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值