Java web项目用模板填充方式生成word文档

本文介绍了在JavaWeb项目中,如何使用poi-tl库来简化Word文档生成过程,包括添加pom.xml依赖、创建Word生成工具类和测试类,以及模板文件的使用和参数填充示例。
摘要由CSDN通过智能技术生成

Java web项目用模板填充方式生成word文档

最近在项目开发中遇到根据规则生成word文档的需求,以前利用Framework生成flt模板之后填充进行word文档生成,但生成flt对格式校验要求较高 ,所以尝试用poi-tl工具生成,发现应用代码简洁高效,话不多说,直接上代码。



一、运行效果

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、使用步骤

1.pom.xml依赖

<!-- word start -->
<dependency>
	<groupId>com.deepoove</groupId>
	<artifactId>poi-tl</artifactId>
	<version>1.10.5</version>
</dependency>
<!-- word end -->

<!-- Slf4j日志包,可以不用 -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.18</version>
	<scope>provided</scope>
</dependency>

2.word生成工具类

WordTemplateUtils.java代码如下:

import com.deepoove.poi.XWPFTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import java.io.File;
import java.util.Map;

/**
 * 根据参数填充word模板生成word文档工具
 */
@Slf4j
public class WordTemplateUtils {

    /**
     *
     * @param templatePath 模板文件地址
     * @param filePath 生成word文件地址
     * @param map 模板填充参数
     * @return
     */
    public static boolean compileWordTemplate(String templatePath, String filePath,Map<String, Object> map){
        // 在实际项目应用中返回可自行修改, RestResponse<Map<String, String>>
        try {
            // templatePath和filePath不能为空,可自行判空
            /*if(StringUtils.isEmpty(templatePath)){
                log.info("模板文件不能为空!!!");
                return false;
            }
            if(StringUtils.isEmpty(filePath)){
                log.info("生成word文件地址不能为空!!!");
                return false;
            }*/
            if(map == null){
                log.info("入参参数不能为空!!!");
                return false;
            }
            File file = new File(filePath);
            // 判断上级目录是否存在,不存在创建目录
            if(!file.getParentFile().exists()){
                file.getParentFile().mkdirs();
            }
            XWPFTemplate.compile(templatePath).render(map).writeToFile(filePath);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            log.info("word文档生成失败!!!");
            return false;
        }
    }
}

3.测试类

WordTemplateTest.java代码如下:

import java.util.HashMap;
import java.util.Map;

public class WordTemplateTest {
    public static void main(String[] args) {
    	// 模板文件路径
        String templatePath = "D:\\project_demo\\jrtyEntrustWord.docx";
        // 生成文件路径
        String filePath = "D:\\project_demo\\投后核息确认函.docx";
        // 组装参数
        Map<String, Object> map = new HashMap<>();
        map.put("productName","2024年第二期住房抵押贷款资产支持证券");
        map.put("busiDate","2024年01月29日");
        map.put("busiName","2024年第二期住房抵押贷款/2089147.IB");
        map.put("busiAmt","100,000,000.00");
        map.put("rate","5.70%");
        map.put("interestAccrual","365");
        map.put("interestDays","31");
        map.put("regularRate","浮动");
        map.put("adjustDesc","下一计息期间基准利率为2024年12月5年期以上LPR,即7.30%,基本利差为-1.60%,利率为5.70%");
        map.put("rateCycle","2023/1/26-2024/1/26");
        map.put("interestBegin","2023-12-26");
        map.put("interestEnd","2024-01-26");
        map.put("investAmt","48,787,200.00");
        map.put("residueAmt","47,464,000.00");
        map.put("accruedInterest","108,842.10");
        map.put("principalInterestSum","48,896,042.10");
        map.put("year","2024");
        map.put("month","01");
        // 方法调用
        WordTemplateUtils.compileWordTemplate(templatePath,filePath,map);
    }
}

4.模板文件样式

在这里插入图片描述

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当根据Word模板填充内容生成Word文档时,可以使用Apache POI的`XWPFDocument`类提供的方法来处理空值。以下是一个示例代码: ```java import org.apache.poi.xwpf.usermodel.*; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class WordTemplateFiller { public static void main(String[] args) { try { // 加载Word模板文件 FileInputStream templateStream = new FileInputStream("template.docx"); XWPFDocument document = new XWPFDocument(templateStream); // 填充内容 Map<String, String> placeholders = new HashMap<>(); placeholders.put("name", "John Doe"); placeholders.put("age", "30"); placeholders.put("address", ""); replacePlaceholders(document, placeholders); // 保存填充后的文档 FileOutputStream outputStream = new FileOutputStream("filled_template.docx"); document.write(outputStream); outputStream.close(); System.out.println("Word文档生成成功!"); } catch (IOException e) { e.printStackTrace(); } } private static void replacePlaceholders(XWPFDocument document, Map<String, String> placeholders) { for (XWPFParagraph paragraph : document.getParagraphs()) { for (XWPFRun run : paragraph.getRuns()) { String text = run.getText(0); if (text != null) { for (Map.Entry<String, String> entry : placeholders.entrySet()) { String placeholder = "${" + entry.getKey() + "}"; if (text.contains(placeholder)) { text = text.replace(placeholder, entry.getValue()); run.setText(text, 0); } } } } } } } ``` 在上述代码中,我们首先加载Word模板文件,然后定义了一个`placeholders`的映射,其中包含了要替换的占位符和对应的值。接下来,我们调用`replacePlaceholders`方法来替换文档中的占位符。 在`replacePlaceholders`方法中,我们遍历文档中的每个段落和文本运行,通过检查文本内容中是否包含占位符来确定是否需要替换。如果找到了匹配的占位符,则将其替换为对应的值。 请注意,上述代码中使用的占位符格式为`${placeholder}`,你可以根据实际情况修改为其他格式。 对于空值的处理,可以在`placeholders`映射中将空字符串或其他默认值设置为相应的占位符值,这样在填充文档时,空值的占位符会被替换为默认值。 以上是一个基本示例,你可以根据自己的需求进行修改和扩展。同时,需要确保在项目中添加了Apache POI的依赖库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不称职的程序员❦

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值