• ireport制作小技巧<Reproduce>


    首先ireport中大小写问题:

    1、parameter中如果小写,引用也小写

    2、$F{},一般都大写

    3、子报表中引用父报表中查询出来的值时,只需要小写即可,即在子报表的parameter中只需要小写

    一、iReport 中获取系统当前时间

    1、选择TextField类型为 Java.util.Date,选择TextField的Expression Class(类型)为 java.util.Date

    2、在pattern中选择时间格式

    3、在TextField Expression中写 java.util.Calendar.getInstance().getTime()

    二、避免为空

    方法一、在属性选项中找到blank when null即可

    方法二、$F{ABB614}?$F{ABB614}:""

    三、设置时间格式

    方法一、可以使用内嵌函数截取字符串来显示

    1、利用substring来截取 (针对String类型)

    $F{AAE036}?(($F{AAE036}.toString()).substring(0,4)+"年"+($F{AAE036}.toString()).substring(4,6)+"月"+($F{AAE036}.toString()).substring(6,8)+"日"):""

    2、利用内置的函数来取 (针对date类型)

    "日期"+($F{ABB017}?String.valueOf($F{ABB017}.getYear()+1900)+"年"+String.valueOf($F{ABB017}.getMonth()+1)+"月"+$F{ABB017}.getDate():"")+"日

    方法二、设置 Exception class 为date类型,然后在pattern中设置时间格式,可以自己写,例如××××年××月××日,但是要注意,如果为空无法用$F{ABB614}?$F{ABB614}:"",只能使用blank when null这种方法

    四、在ireport中使用html中的标签

    例如:<br> 

    1、找到属性面板中的markup选择为html

    2、在需要的地方加入<br>

    五、使某个字段中的数据在特定条件下才打印出来

        通过设置字段的PrintWhenExpression,我们可以限定只有在某些特定的条件下字段值才会被打印出来,在PrintWhenExpression 中需要设置Boolean 型的表达式,如:new java.lang.Boolean($F{type}.trim().equals("mod_cook"))

    六、嵌套子报表

    1、在面板属性中找到Subreport,然后拖进你要放入的地方,放开鼠标后,会有一个新建报表。新建完报表之后会有个名为SUBREPORT_DIR 的Parameter,string类型,他会有个默认路径,指的是子报表的路径。由于子报表往往有多条数据,故最好单独放在一个detail中(例如:查询出来有多条数据,那么会循环显示在detail中)。

    2、如果子报表中需要传入数据,那么就先点中子报表,然后在属性栏(不是参数里)中找到“parameters”,新建一个,例如:

         name为abz050  ,Expression为$F{ABZ050},因为这里的值是父报表查询的出来之后的值,所以不是用Parameter,而是Field。

    3、在子报表中引用值,首先在子报表中定义一个变量Parameter,然后引用即可。

    那为什么能找到呢?

    因为:你在创建子报表的时候,也会自动创建一个Parameter,名称默认为SUBREPORT_DIR,它里面有个默认路径(新传入的路径会覆盖该默认路径)。

    同时,可以点中子报表查看他的属性,里面有个Subreport Exception的值为$P{SUBREPORT_DIR} + "子报表名称.jasper",这样系统就能找到了。当然系统还会自动配置一些其他子报表属性,具体的自己新建一个看看吧。

    七、自动换行

        如果不处理一下,有些字段的内容太长了就会显示不全。选中该字段,右击->属性,在Text Field把Stretch with overflow勾上。

        同时把该行所有的字段选上,右击->属性,在Common的Stretch Type选择Relative to tallest object。

    八、内嵌函数的使用

    举例:($F{ABB617}).toString()).substring(0,4)+"年"          把ABB617(Date类型)先转化成String然后截取年

    ireport中使用内嵌函数只要在字段上看看他有哪些方法,然后直接使用即可。

    九、高度根据内容自动变高

    1、选中主键,在属性中找到 Stretch With Overflow并选中。并把他单独放在一个Detial或者其他 里面即可。
    2、还有一个属性叫Stretch type,默认的值是No Stretch,可以改成Relative To Band Height。

    第二个步骤我个人认为可做可不做。

         当然第二个步骤的功能在做表格的时候很有用,例如:表格是2列,那么两边的数据肯定不一样,或者是左边就是静态的,那么如果不选择这个属性,你就会发现,右边的数据很多的时候会扩充,但是左边不会,这个时候,我们就可以设置该属性,并把它们放到一个单独Detial或者其他容器中,那样 左右两边 就会等高了


    十、设置共几页,第几页

    $V{PAGE_NUMBER} 表示当前是第几页 ,在text field 的 选项evaluation time选report是共几页,now表是当前页。页码可在ireport里直接设置。  “共几页 第几页”

    我是写在page footer 中。

    十一、

    ireport处理数值

    § 
    §1.结果显示为NULL: 
    处理方式: 
    1).把数据填充进list前进行处理 
    2). 用条件表达式处理iReport的字段 
    $F{name}==null ? ”---”: $F{name}


    §2.处理日期格式 
    处理方式: 
    1).把数据填充进list前进行处理 
    2).设置iReport字段为 
    new java.text.SimpleDateFormat(“yyyy-MM-dd”).format($F{date})//月一定要用大写M,小写则代表分钟


    §3.要求精度的数据 
    处理方式: 
    1).把数据填充进list前进行处理 
    2).设置iReport字段: 
    new BigDecimal($F{num}).setScale(2,BigDecimal.ROUND_HALF_UP)


    §4.用科学计数法的E 
    处理方式: 
    1).把数据填充进list前进行处理 
    DecimalFormat dfs = new DecimalFormat(“.00");//# 
    dfs.format(num); 
    2).设置iReport字段: new BigDecimal(2.2343434E7).setScale(2,BigDecimal.ROUND_HALF_UP) 或: 
    new DecimalFormat(".00").format(234342232)

  • 相关阅读:
    「Java分享客栈」Nacos配置中心称王称霸,我Apollo一生也不弱于人!
    超详细干货!Docker+PXC+Haproxy搭建高可用强一致性的MySQL集群
    中科大下载android源码
    binder框架核心类关系图
    BinderService模板类
    SpringBoot启动命令行参数【D】和【】的区别
    MySQL快速生成大量数据的SQL存储过程
    【已解决】'sql_server.pyodbc' isn't an available database backend.
    python 常用模块
    hive正则
  • 原文地址:https://www.cnblogs.com/BillLei/p/5594318.html
Copyright © 2020-2023  润新知