需求:现有html模板,需动态填充数据,并且包含表格,表格大小不固定,根据数据多少确定表格大小。

解析:两种方案:

1.java代码实现:将模板文件读出为StringBuffer,找到特定位置,循环生成表格的行,并替换指定参数(rowspan)的值以合并单元格。
2.freemarker模板引擎,修改模板文件,使其根据参数生成表格,添加freemarker工具类,调用指定方法,填充数据。
我两种方式都实现了,第一种比较简单,要花点时间,现不再讨论。以下为freemarker实现方式:
FreemarkerUtil代码:
package com.zhengwei.controller;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;public class FreemarkerUtil {public Template getTemplate(String name) {try {// 通过Freemaker的Configuration读取相应的ftlConfiguration cfg = new Configuration();// 设定去哪里读取相应的ftl模板文件cfg.setDirectoryForTemplateLoading(new File("src/main/java/com/zhengwei/ftl"));// 在模板文件目录中找到名称为name的文件Template temp = cfg.getTemplate(name);return temp;} catch (IOException e) {e.printStackTrace();}return null;}/*** 输出HTML文件** @param name* @param root* @param outFile*/public void fprint(String name, Map<String, Object> root, String outFile) {FileWriter out = null;try {// 通过一个文件输出流,就可以写到相应的文件中,此处用的是绝对路径out = new FileWriter(new File("C:/Users/Administrator/Desktop/服务体系/payment/html/" + outFile));Template temp = this.getTemplate(name);// 我这里是输出到文件,如果有其他需求就按照需求做,只要执行temp.process方法就行temp.process(root, out);} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();} finally {try {if (out != null) {out.close();}} catch (IOException e) {e.printStackTrace();}}}
}
修改模板文件index.ftl





写个测试类TreemarkerTest:
 package com.zhengwei.controller;import com.zhengwei.entity.GoodsPackage;
import com.zhengwei.entity.Group;
import com.zhengwei.entity.OrderInfo;
import com.zhengwei.entity.User;
import org.junit.Test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class FreemarkerTest {@Testpublic void test(){FreemarkerUtil util = new FreemarkerUtil();Map<String, Object> map = new HashMap<String, Object>();//构建数据OrderInfo orderInfo = new OrderInfo();orderInfo.setGoodsName("漫途定位服务");List<GoodsPackage> goodsPackageList = new ArrayList<>();long totalTimes = 0;long totalPrice = 0;for( int i =0 ;i < 5; i++){GoodsPackage goodsPackage = new GoodsPackage();goodsPackage.setGoodsPackageName("测试包00" + i);goodsPackage.setTimes(1000);goodsPackage.setPrice(2);goodsPackage.setGoodsPackageDate(12);goodsPackage.setGoodsPackageNo(3);if( i == 0){//只有一个资费包的情况orderInfo.setSingleGoodsPackage(goodsPackage);}else {goodsPackageList.add(goodsPackage);}totalTimes += goodsPackage.getTimes() * goodsPackage.getGoodsPackageNo();totalPrice += goodsPackage.getPrice() * goodsPackage.getGoodsPackageNo();}orderInfo.setTotalTimes(totalTimes);orderInfo.setTotalPrice(totalPrice);long PackageNo = goodsPackageList.size()+1;map.put("PackageNo",PackageNo);map.put("goodsPackageList",goodsPackageList);map.put("orderInfo",orderInfo);util.fprint("index.ftl", map ,"freemarker.html");}}
执行测试案例,得到如图所示的效果:

解析:<#list goodsPackageList as goodsPackage>标签会将存入list的数据依次取出来,如果有数据,就创建一个tr,并放入数据,直到数据取完。如果没数据,就不执行<#list> 标签里的代码。

Freemarker模板引擎学习,生成html里的动态表格,可合并单元格相关推荐

  1. Java项目中利用Freemarker模板引擎导出--生成Word文档

    应邀写的一篇文章:Java项目中利用Freemarker模板引擎导出--生成Word文档 资源下载:https://download.csdn.net/download/weixin_41367523 ...

  2. SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格、合并单元格)

    本编文章继SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格)文章之后 介绍Poi-tl导出word的延伸功能: 所需依赖以及word模板所属位置 见 SpringBoo ...

  3. 如何通过VB合并Excel单元格以及设置Excel行高?VB创建Excel表格,合并单元格,生成图形等操作

    如何通过VB合并Excel单元格以及设置Excel行高? 例如:我想把第一列的第4,5,6,7行合并...我在怎样让合并单元格里的字居中,怎样改变字体. 请不吝赐教... ============== ...

  4. poi根据模板导出word(包含图片、动态生成表格、合并单元格)(亲测有效)

    准备工作: 1.需要的jar(jar包在资源处已上传,可下载) 2.创建docx模板(doc不可以) 第一步:准备好jar(这里面的 ooxml-schemas-1.1.jar 大家可以尝试用poi- ...

  5. jacob 模板生成word文档 表格(合并单元格以及各种表格样式)、图片

    一.将 jacob-1.18-M2-x64.dll 文件 放在jdk bin目录下 二.项目中导入jacob.jar 包 三.设置好模板内容 四.测试代码 /*** 主方法测试* @param arg ...

  6. Java中利用freemarker导出word表格并合并单元格

    1.word表格的模板 另存为xml格式: 将保存的xml改成.ftl 格式化一下xml,看看文件中的带有${}是否正确 如果出现这种情况,手动修改下(可复制上一个正确的改下名字) 2.Java代码 ...

  7. Freemarker模板---引擎学习

    一.简要概述 Freemarker是一款模板引擎,是一种基于模版生成静态文件的通用工具,它是使用纯java编写的,一般用来生成HTML页面. 这段时间学习的主要是嵌套freemarker中的取值表达式 ...

  8. python 生成word表格(合并单元格)

    本人使用pycharm,安装库python-docx 代码: from docx import Document from docx.shared import Inches, Pt from doc ...

  9. jxl生成表格(合并单元格,字体,样式)

    public static String testEx() { // a, 计算路径 SimpleDateFormat sdf = new SimpleDateFormat("/yyyy-M ...

最新文章

  1. HTML中常见的各种位置距离以及dom中的坐标讨论
  2. Python基础05-数据类型:列表list
  3. Oracle中的Union、Union All、Intersect、Minus
  4. DP备份任务失败原因解析
  5. 白话设计模式——Abstract Factory
  6. leetcode - K 站中转内最便宜的航班
  7. 11门满分、10门99分、47门超95分……他却说自己是“学zha”
  8. linux msgctl清除缓存,linux消息队列
  9. 为什么说HTTP协议是无状态的
  10. 游戏建模的常用的软件和建模师的日常是什么?
  11. LCD12864液晶显示屏引脚,功能介绍【160字】【原创】
  12. Linux中磁盘扫描流程描述
  13. js中如何判断一个数是不是素数(三种方法)
  14. android 2d 字体描边,关于ios下字体描边的一个细节
  15. 刘意-java基础视频(API-IO流)笔记(一)
  16. asm.js 和 WebAssembly 有什么区别?
  17. Ubuntu20.04 虚拟显示器配置(解决无显示器远程黑屏问题)
  18. secureCRT思科路由器交换机专用脚本
  19. 软考_2021年5月真题__2020年真题
  20. Glide4实现网络图片加载进度监听

热门文章

  1. android 获取cpu型号_如何查看Android 手机架构
  2. Latex标记通讯作者信封出现type3字体解决办法
  3. 单片机cpu寄存器 c语言,51单片机共有21个特殊功能寄存器
  4. excel 数据格式设置
  5. 关于转正、定职、定级(本科、硕士分别谈)——写给工作不久就辞职的毕业生
  6. Windows系统安装rust以及crates换源方式
  7. 快速将AI转换为PNG,JPG,PSD和PDF!你可以试试它
  8. 动态创建js标签 script标签详细版
  9. NanoPC-T4 上实现pwm风扇自动调速
  10. MATLAB将图片做成视频