IReport动态列的实现

本文介绍使用IReport工具实现报表动态列的方法。通过读取包含所有列的模板,并动态修改表头信息来实现列的增删。最终通过重新生成jrxml文件达到动态表头的效果。

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

最近有个客户需要报表实现动态列,我选择的报表工具是Ireport,经过一些资料的研究,基本上实现了动态列,下面是我写的测试代码,还有些需要完善,跟大家分享一下:

写道
public class RptDesign4SD {

public static JasperDesign getJasperDesign(String file)
{
JasperDesign design = null;
try {
design = JRXmlLoader.load(file);
//JRField[] fieldList = design.getFields();
JRElement[] elementList = design.getColumnHeader().getElements();
List<JRElement> arr = new ArrayList<JRElement>();
//不显示密码列
//int index = 0;
for(JRElement element : elementList)
{
String key = element.getKey();
System.out.println(key);
if("static_pwd".equals(key) || "staticText-static".equals(key))
{
continue;
}
arr.add(element);
}
JRDesignBand band = new JRDesignBand();
band.setHeight(30);
int currentX = 0;
for(JRElement element : arr)
{
element.setX(currentX);
currentX += element.getWidth();
band.addElement((JRDesignStaticText)element);
}
design.setColumnHeader(band);

band = new JRDesignBand();
band.setHeight(18);
JRElement[] elementDetailList = design.getDetail().getElements();

arr = new ArrayList<JRElement>();
currentX = 0;
for(JRElement field : elementDetailList)
{
String key = field.getKey();
if("textField_pwd".equals(key) || "textField_status".equals(key))
{
continue;
}
arr.add(field);
}
for(JRElement element : arr)
{
element.setX(currentX);
currentX += element.getWidth();
band.addElement((JRDesignTextField)element);
}
design.setDetail(band);
} catch (JRException e) {

e.printStackTrace();
}
return design;
}

public static void main(String[] args)
{
JasperDesign design = RptDesign4SD.getJasperDesign("E:\\testAutoColumn.jrxml");
try {
//JasperCompileManager.compileReportToFile(design, "E:\\achui.jrxml");
net.sf.jasperreports.engine.xml.JRXmlWriter.writeReport((JRReport)design, "E:\\achui.jrxml", "UTF-8");
} catch (JRException e) {

e.printStackTrace();
}
}

 主要思路是:做好的模版(这个模版包含了所有列)读取出来,然后动态的修改相应区域的表头信息,把需要显示的表头去掉,在将后面的表头迁移,最后再重新生成jrxml文件,从而实现动态表头

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值