使用Apache Velocity生成HTML报表

本文介绍如何使用Velocity模板引擎生成HTML报告。通过配置pom.xml引入Velocity依赖,并定义模板文件及Java代码实现,最终生成包含性能数据的HTML表格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. pom.xml中加入jar依赖

    <dependency>
         <groupId>org.apache.velocity</groupId>
         <artifactId>velocity</artifactId>
         <version> 1.7 </version>
    </dependency>
  2. velocity语法规则见:https://github.com/putaoshu/jdf/blob/master/doc/core_vm.md

  3. 定义自己的vm模板文件

     Collapse source
    < html >
    < head >
         < h1  align  "center" >$title</ h1 >
         < h6  align  "left" >$date</ h6 >
         < h6  align  "left" >$author</ h6 >
    </ head >
    < body >
         < hr  />
         < p >
             详细性能数据记录:
         </ p >
         < table  cellpadding = "2"  cellspacing = "1"  border = "1"  style = "empty-cells:show"  align  "center" >
           < tr  >
             < td  align = "center"  rowspan = "3"  colspan = "1" >性能分组
             < td  align = "center"  rowspan = "3"  colspan = "1" >步骤
             < td  align = "center"  rowspan = "3"  colspan = "1" >机型
             < td  align = "center"  rowspan = "3"  colspan = "1" >ROM
             < td  align = "center"  rowspan = "1"  colspan=$total>性能数据
           </ tr >
             
           < tr >
             < td  align = "center"  rowspan = "1"  colspan=$cpuCol>CPU
             < td  align = "center"  rowspan = "1"  colspan=$memCol>内存
             < td  align = "center"  rowspan = "1"  colspan=$baterryCol>耗电
           </ tr >
           < tr >
           #foreach($cpu in $cpuList)
             < td  align = "center"  rowspan = "1"  colspan = "1" >$cpu
           #end
           
           #foreach($mem in $memList)
             < td  align = "center"  rowspan = "1"  colspan = "1" >$mem
           #end
           
           #foreach($battery in $batteryList)
             < td  align = "center"  rowspan = "1"  colspan = "1" >$battery
           #end
          </ tr >
    </ body >
    < html >
  4. java代码中定义相关类及生成方法

     Collapse source
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    public  static  void  main(String[] args) {
         String path = System.getProperty( "user.dir" );
         Properties p =  new  Properties();
         // p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "");
         p.setProperty(Velocity.ENCODING_DEFAULT,  "UTF-8" );
         p.setProperty(Velocity.INPUT_ENCODING,  "UTF-8" );
         p.setProperty(Velocity.OUTPUT_ENCODING,  "UTF-8" );
         try  {
             Velocity.init(p);
             String res =  "Table.vm" ;
             System.out.println(res);
             Template template = Velocity.getTemplate(res);
             VelocityContext context =  new  VelocityContext();
             String name =  "Test For My" ;
             context.put( "title" "xxx测试报告" );
             context.put( "date" "2015年06月19日" );
             context.put( "author" "lgw" );
             context.put( "cpuCol" "3" );
             context.put( "memCol" "2" );
             context.put( "baterryCol" "1" );
             context.put( "total" "6" );
             ArrayList<String> cpulist =  new  ArrayList<String>();
             cpulist.add( "cpu1sdfsfsdfsdfsdf" );
             cpulist.add( "cpu2sdfasdfdsfsa" );
             cpulist.add( "cpu3" );
             ArrayList<String> memlist =  new  ArrayList<String>();
             cpulist.add( "mem1" );
             cpulist.add( "mem2sdfsfsdfasdf" );
             ArrayList<String> batterylist =  new  ArrayList<String>();
             cpulist.add( "battery1sdfsadfdsf" );
             context.put( "cpuList" , cpulist);
             context.put( "memList" , memlist);
             context.put( "batteryList" , batterylist);
             String out =  "Table.html" ;
             FileOutputStream fos =  new  FileOutputStream(out);
             BufferedWriter writer =  new  BufferedWriter( new  OutputStreamWriter(
                     fos,  "UTF-8" )); // 设置写入的文件编码,解决中文问题
             template.merge(context, writer);
             writer.close();
         catch  (Exception e) {
             e.printStackTrace();
         }
    }
  5. 效果示例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值