java

您所在的位置:网站首页 freemark导出word java

java

2023-03-10 10:40| 来源: 网络整理| 查看: 265

导出word我们常用的是通过POI实现导出。POI最擅长的是EXCEL的操作。word操作起来样式控制还是太繁琐了。今天我们介绍下通过FREEMARK来实现word模板导出。

[TOC]

# 开发准备

本文实现基于springboot,所以项目中采用的都是springboot衍生的产品。首先我们在maven项目中引入freemark坐标。 org.springframework.boot spring-boot-starter-freemarker 只需要引入上面的jar包 。 前提是继承springboot坐标。就可以通过freemark进行word的导出了。 模板准备

上面是我们导出的一份模板。填写规则也很简单。只需要我们提前准备一份样本文档,然后将需要动态修改的通过${}进行占位就行了。我们导出的时候提供相应的数据就行了。这里注意一下${c.no}这种格式的其实是我们后期为了做集合遍历的。这里先忽略掉。后面我们会着重介绍。 开发测试 到了这一步说明我们的前期准备就已经完成了。剩下我们就通过freemark就行方法调用导出就可以了。 首先我们构建freemark加载路径。就是设置一下freemark模板路径。模板路径中存放的就是我们上面编写好的模板。只不过这里的模板不是严格意义的word.而是通过word另存为xml格式的文件。

配置加载路径 //创建配置实例 Configuration configuration = new Configuration(); //设置编码 configuration.setDefaultEncoding("UTF-8"); //ftl模板文件 configuration.setClassForTemplateLoading(OfficeUtils.class, "/template"); 获取模板类 Template template = configuration.getTemplate(templateName); 构建输出对象 Writer out = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 导出数据到out template.process(dataMap, out); 就上面四步骤我们就可以实现导出了。我们可以将加载配置路径的放到全局做一次。剩下也就是我们三行代码就可以搞定导出了。当然我们该做的异常捕获这些还是需要的。点我获取源码 结果检测

功能通用化思考 上面我们只是简单介绍一下freemark导出word的流程。关于细节方面我们都没有进行深究。 细心的朋友会发现上面的图片并没有进行动态的设置。这样子功能上肯定是说不过去的。图片我们想生成我们自己设置的图片。 还有一个细节就是复选框的问题。仔细观察会发现复选框也没有字段去控制。肯定也是没有办法进行动态勾选的。 最后就是我们上面提到的就是主要安全措施那块。那块是我们的集合数据。通过模板我们是没法控制的。 上面的问题我们freemark的word模板是无法实现的。有问题其实是好事。这样我们才能进步。实际上freemark导出真正是基于ftl格式的文件的。只不过xml和ftl语法很像所以上面我们才说导出模板是xml的。实际上我们需要的ftl文件。如果是ftl文件那么上面的问题的复选框和集合都很好解决了。一个通过if标签一个通过list标签就可以解决了。图片我们还是需要通过人为去替换 005200A3 dosomethings() 上面两段代码就是if 和 list语法 Dom4j实现智能化 上面ftl虽然解决了导出的功能问题。但是还是不能实现智能化。我们想做的其实想通过程序自动根据我们word的配置去进行生成ftl文件。经过百度终究还是找到了对应的方法。Dom4j就是我们最终方法。我们可以通过在word进行特殊编写。然后程序通过dom4j进行节点修改。通过dom4j我们的图片问题也就迎刃而解了。下面主要说说针对以上三个问题的具体处理细节 复选框

首先我们约定同一类型的复选框前需要#{}格式编写。里面就是控制复选框的字段名。 然后我们通过dom4j解析xml。我们再看看复选框原本的格式在xml中 那么我们只需要通过dom4j获取到w:sym标签。在获取到该标签后对应的文本内容即#{zhuyaoweihaiyinsu}窒息;这个内容。 匹配出字段名zhuyaoweihaiyinsu进行if标签控制内容


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3