xdocreport填充导出word

  1. 导入依赖

<!--xdocreport必备的依赖-->

<dependency>

<groupId>fr.opensagres.xdocreport</groupId>

<artifactId>fr.opensagres.xdocreport.document</artifactId>

<version>2.0.1</version>

</dependency>

<dependency>

<groupId>fr.opensagres.xdocreport</groupId>

<artifactId>fr.opensagres.xdocreport.core</artifactId>

<version>2.0.1</version>

</dependency>

<dependency>

<groupId>fr.opensagres.xdocreport</groupId>

<artifactId>fr.opensagres.xdocreport.template</artifactId>

<version>2.0.1</version>

</dependency>

<dependency>

<groupId>fr.opensagres.xdocreport</groupId>

<artifactId>fr.opensagres.xdocreport.converter</artifactId>

<version>2.0.1</version>

</dependency>

<!--模板引擎相关-->

<dependency>

<groupId>fr.opensagres.xdocreport</groupId>

<artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>

<version>2.0.1</version>

</dependency>

<!--文档格式相关-->

<dependency>

<groupId>fr.opensagres.xdocreport</groupId>

<artifactId>fr.opensagres.xdocreport.document.docx</artifactId>

<version>2.0.1</version>

</dependency>

2 插件

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-resources-plugin</artifactId>

<configuration>

<encoding>UTF-8</encoding>

<!-- 过滤后缀文件 -->

<nonFilteredFileExtensions>

<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>

<nonFilteredFileExtension>docx</nonFilteredFileExtension>

<nonFilteredFileExtension>xls</nonFilteredFileExtension>

</nonFilteredFileExtensions>

</configuration>

</plugin>

<resources>

<resource>

<directory>src/main/resources</directory>

<filtering>true</filtering>

</resource>

<resource>

<directory>src/main/java</directory>

<includes>

<include>**/*.xml</include>

<include>**/*.json</include>

<include>**/*.ftl</include>

</includes>

</resource>

</resources>

3

@ApiOperation(value = "申请模板导出")

@GetMapping("/exportApplyTemplate")

public void exportApplyTemplate(HttpServletResponse response, @RequestParam("id") Integer id)throws IOException {

try {

InputStream ins = null;

CoalitionCompanyV0 companyV0 = coalitionCompanyService.detail(id);

if (companyV0 != null) {

//String templateFileName = "C:\\Users\\555li\\Desktop\\companyApply_template.docx";

//String templateFileName = reportTemplate+"/orderdailysummary_template.xlsx";

Resource resource = new ClassPathResource("OfficeTmpe/companyApply_template.docx");

String templateFileName = resource.getFile().getPath();

//获取Word模板,模板存放路径在项目的resources目录下

ins = new FileInputStream(templateFileName);

//ins = this.getClass().getResourceAsStream("/OfficeTmpe/companyApply_template.docx");

//注册xdocreport实例并加载FreeMarker模板引擎

IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins, TemplateEngineKind.Freemarker);

//创建xdocreport上下文对象

IContext context = report.createContext();

//创建要替换的文本变量 方式1

//context.put(“num”, “2233”);

//创建要替换的文本实体类 方式2

context.put("company", companyV0);

/* //创建字段元数据

FieldsMetadata fm = report.createFieldsMetadata();

//Word模板中的表格数据对应的集合类型 方式1 list

//fm.load("company", CoalitionCompanyV0.class, true);

//Word模板中的表格数据对应的集合类型 方式2 实体

fm.load("company", CoalitionCompanyV0.class, false);*/

String eTag = String.valueOf(System.currentTimeMillis());

String fileName = "丝路海运联盟章程及申请表("+companyV0.getName()+").docx";

//输出到本地目录 // FileOutputStream out = new FileOutputStream(“D://cc10.docx”);

//浏览器下载

response.setCharacterEncoding("utf-8");

response.setContentType("application/msword");

response.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));

report.process(context, response.getOutputStream());

}

} catch (Exception e) {

response.reset();

response.setContentType("application/json");

response.setCharacterEncoding("utf-8");

Map<String, String> map = new HashMap<String, String>(16);

map.put("status", "failure");

map.put("message", "下载文件失败" + e.getMessage());

response.getWriter().println(JSON.toJSONString(map));

}

}

4模板制作,效果如图

4.1在需要插入动态数据的位置,按键盘 Ctrl + F9 生成域

4.2右键点击上面的域,选择“编辑域”

4.3选择“邮件合并” ,再在域代码处 输入对应字段 ${contractName}

4.4对象列表数据的处理: ${对象.属性} ,如 ${opinions.opinion}

4.5图片数据处理: 先 插入 任意图片,作为模板图片,再点击书签 ,输入书签名,并点击 “添加” 按钮

4.6由于我的图片列表数据,在图片所在行依次添加 如下两个域

"@before-row[#list picList as item]"

说明: picList as item ,其中 picList 对应代码中的列表数据, item为每项数据

"@after-row[/#list]"

效果如下

解决图片不存在时, “现场照片” 列被隐藏问题

  1. 在对应的单元格中再加一个单元格, 将图片和对应遍历用的两个域放在其中, 并编辑图片布局,如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值