Java导出word保留样式

简介

1本文主要使用XDocReport +FreeMarker,该技术组合既简单又高效可实现word模板的编辑,docx和doc均可处理,可以动态的生成表格。

pom文件引入

可以适当的提升版本目前最新的是2.0.6

<dependency>
     <groupId>fr.opensagres.xdocreport</groupId>
     <artifactId>fr.opensagres.xdocreport.core</artifactId>
     <version>2.0.6</version>
</dependency>
<dependency>
     <groupId>fr.opensagres.xdocreport</groupId>
     <artifactId>fr.opensagres.xdocreport.document</artifactId>
     <version>2.0.6</version>
</dependency>
<dependency>
      <groupId>fr.opensagres.xdocreport</groupId>
      <artifactId>fr.opensagres.xdocreport.template</artifactId>
      <version>2.0.6</version>
</dependency>
<dependency>
     <groupId>fr.opensagres.xdocreport</groupId>
     <artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
     <version>2.0.6</version>
</dependency>
<dependency>
      <groupId>fr.opensagres.xdocreport</groupId>
      <artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
      <version>2.0.6</version>
</dependency>
<dependency>
     <groupId>org.freemarker</groupId>
     <artifactId>freemarker</artifactId>
     <version>2.3.23</version>
</dependency>

动态文本替换

首先打开你需要导出word模版:
选择插入,然后选择文档部件选择域,在类别中选择邮件合并。
在这里插入图片描述
word模版中:
在这里插入图片描述

代码中:

 ins = new FileInputStream("C:\\Users\\86182\\Desktop\\服务类合同模板.docx");
            // 注册xdocreport实例并加载FreeMarker模板引擎
            IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins, TemplateEngineKind.Freemarker);
            // 创建xdocreport上下文对象,用于存放具体数据
            IContext context = report.createContext();

            // 创建要替换的文本变量,并去除所有空格
            context.put("jia", payContractHead.getFirst() != null ? payContractHead.getFirst().replaceAll("\\s+", "") : "");
            context.put("yi", payContractHead.getSecond() != null ? payContractHead.getSecond().replaceAll("\\s+", "") : "");
            context.put("agreementNum", payContractHead.getNum() != null ? payContractHead.getNum().replaceAll("\\s+", "") : "");
            context.put("contractName", payContractHead.getContractName() != null ? payContractHead.getContractName().replaceAll("\\s+", "") : "");

导出后的结果

在这里插入图片描述

表格生成

在这里插入图片描述
首先自己需要建一个表格 只需要在第一行打上需要填写的内容,payContractLotList这个要与代码当中对应是一个list。其中PayContractItem是实体类,查询数据库的时候需要使用List来进行接收,如果使用List<Map<String, Object>>来接收需要进行转换。
代码片段:

   context.put("payContractLotList", payContractLotList);
            context.put("payContractItemList",payContractItemList);
            FieldsMetadata fm = report.createFieldsMetadata();
            fm.load("payContractItemList", PayContractItem.class, true);
            fm.load("payContractLotList", PayContractLot.class, true);

导出结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值