java中Freemaker模板导出Word(统计图)和Excel详解(附工具类)

本文介绍了如何使用Freemarker模板方便地导出Word和Excel,避免复杂后台逻辑。步骤包括定制模板、后台填充数据、模板赋值和导出下载。并提供了工具类`ExcelUtils`的代码示例,支持导出时处理动态数据和统计图。
摘要由CSDN通过智能技术生成

      为什么不用jxl、poi的方式进行导出呢?如果模板复杂、又包含一些动态的判断,就要在后台写很多很多判断的代码,费时费力又容易出错,使用freemaker定制模板就方便很多很多。话不多说,一再强调,思路很重要。

使用freemaker思路(相当于mvc模式下的一次请求,便于理解):

 1、定制模板(新建模板里放值的地方先随便写个汉字站位,另存为xml文件类型,最后改为.ftl后缀的文件)。(相当于jsp页面)

 2、后台方法查询要导出的数据,所有的数据都保存到一个map中。(相当于Contrller中获取数据的方法)

 3、将map中的数据填充到模板中的站位的汉字处。(相当于jsp中用el表达式、jstl等赋值变量)

 4、调用freemarker相关的类的方法及下载的方法,实现导出下载。(相当于controller中的方法带着数据响应到jsp页面的过程)

下来图文介绍每一步:

1、定制模板:

汉字"站位"进行站位;保存为xml

2、后台方法查询要导出的数据,所有的数据都保存到一个map中。

创建Map将要展示的集合,变量,对象等保存进去,如图:

3、将map中的数据填充到模板中的站位的汉字处。

将xml后缀的文件放入的开发工具中(一般放到web-info下新建的文件夹中),如下进行赋值,赋值完成后修改后缀为ftl;

扩充:

一.变量后的感叹号是如果变量不存在就给默认值,语法:variable!default_variable,不写默认值就取单元格类型的默认值。

二.<#list listAll as qingAll中取序号:${qingAll_index+1},qingAll是集合中的每一个元素的别名(as后面跟的)

三.if判断如下:s93和s95是单元格字体颜色(可以在<style>中设置)。

四。还有“??”判空的可以在网上搜索使

操作Java组件使用Freemarker操作Word模板写入数据库数据并输出PDF,可以分为以下几个步骤: 1. 准备Word模板 首先需要准备一个Word模板文件,其包含需要填充数据的占位符。 2. 使用Freemarker填充数据 使用Freemarker读取Word模板文件,并将需要填充的数据替换到占位符。 3. 将填充后的Word文件保存到服务器 将填充后的Word文件保存到服务器的指定路径。 4. 使用Apache POI将Word文件转换为PDF文件 使用Apache POI将填充后的Word文件转换为PDF文件。 5. 将PDF文件保存到服务器指定路径 将生成的PDF文件保存到服务器的指定路径。 6. 实现在线下载 在前端页面上实现在线下载功能,使用户可以直接下载生成的PDF文件。 以下是一个简单的Java代码示例,演示如何使用Freemarker填充数据并输出PDF文件: ```java public void generatePdf(String templatePath, String targetPath, Map<String, Object> data) { try { // 创建Configuration对象 Configuration configuration = new Configuration(Configuration.VERSION_2_3_28); // 设置模板文件所在的路径 configuration.setDirectoryForTemplateLoading(new File(templatePath)); // 加载模板文件 Template template = configuration.getTemplate("template.ftl"); // 创建Word文档 File targetFile = new File(targetPath); Writer writer = new FileWriter(targetFile); template.process(data, writer); writer.flush(); writer.close(); // 将Word文档转换为PDF文档 FileInputStream inputStream = new FileInputStream(targetFile); XWPFDocument document = new XWPFDocument(inputStream); PdfOptions options = PdfOptions.create(); PdfConverter.getInstance().convert(document, new FileOutputStream("target.pdf"), options); // 关闭输入流 inputStream.close(); } catch (Exception e) { e.printStackTrace(); } } ``` 在以上示例,`templatePath` 表示模板文件所在的路径,`targetPath` 表示生成的PDF文件路径,`data` 则是需要填充的数据。通过 `Freemarker` 将数据填充到模板文件,然后将填充后的 `Word` 文件转换为 `PDF` 文件并保存到指定路径,最后实现在线下载功能即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值