利⽤thymeleaf双层模板技术,制作个性化报表需求背景 通常我们会碰到⼀些带表格的报表需求,⼀般是包含⼀些表格和⼀些循环列表的需求,每个表格的样式可以不⼀样。 有些公司会使⽤⼀些专业的报表软件,例如jasperReport,如意报表等,虽然这种软件功能很强⼤,但是需要⼀定的学习门槛,⽽且使⽤中调整样式并没有想象中⽅便,最重要的是此类模板设计、模板导出、模板上传都是跟业务系统分开的,不能嵌⼊系统中使⽤,不能做到在线编辑,在线预览。
为此,我专门研究了thymeleaf来完成此类需求的办法,希望做到报表上的所有表格都可以通过配置配出来,⽀持纯⽂本和动态变量,⽀持图⽚,所有表格的样式可以通过css来随意配置,⽀持循环列表,⽀持横向和纵向合并单元格 超疏水为什么选择thymeleaf⽽不是选择freemark等其他模板技术,主要基于两个原因:
1、spring官⽅推荐⽤thymeleaf,并且springboot有官⽅适配
2、thymeleaf编写的模板能直接打开预览,不会像freemark破坏了html原本的格式。
实现思路
核⼼思路是:设计⼀个根模板(root-template.html),它可以通过设计好的数据库配置⽣成新的具体模板(biz-template.html),并且biz-template.html⾥⾯包含具体的业务数据的变量,这样就可以结合业务数据展⽰出报表。这就是我称之为双层模板的原因。 技术细节包含以下⼏点:
1、根模板(root-template.html)如何设计
2、需要⽤thymeleaf解析html并⽣成html,就必须使⽤API的⽅式去实现,且html的路径可配置,否则线上环境⽆法⽣成html到jar包⾥黎丹
blc
3、⽣成后的html也需要包含thymeleaf的标签,那就需要研究thymeleaf如何⽣成带标签的模板
4、样式和合并单元格如何控制
根管测量仪根模板设计
根页⾯定好10个table区域,每个区域都是⼀样的逻辑,判断table配置的数据集是否为空,为空则整个table不显⽰,不为空,则先循环table配置的tr信息,tr⾥⾯再循环配置的td信息。
根模板如下:
image.png
诡辩论springboot整合thymeleaf,并⽀持api的⽅式⽣成html
image.png ⼦模板2填充数据后:
pppd-298
image.png ⼦模板template3
image.png ⼦模板3填充数据后:
image.png 最终的html如果需要转成pdf,请参考最好的html转pdf⼯具(wkhtmltopdf)常⽤语法
注释
1、静态⽂件打开可以看到,但是thymeleaf⽣成后看不到