Jasperreport ApI学习

**

1,JRDesignImage不能直接重复复制给不同的band,要用clone()方法

JRDesignImage image=new JRDesignImage(design);
        JRDesignExpression exp=new JRDesignExpression();
        exp.setText("$P{imagepath}+"cherry.jpg"");
        image.setExpression(exp);
        image.setHeight(135);
        image.setWidth(99);
        image.setX(0);
        image.setY(30);
        band1.addElement(image);
        band1.setHeight(170);

        band3.addElement((JRDesignElement) image.clone());

 2,groupmaps即使获取后,如果design后来移除了一些group,该map也会相应变化,所以自己手动创建map会较好,

此处用于group调换位置,如果group是有可能要上下调换位置的,则尽量用不同的group,不要同一个group多个band,这样很难具体定位

添加group时,要确保groupname是唯一的,否则异常

List<JRGroup> grouplist=design.getGroupsList();
            System.out.println(design.getGroupsList().size());
            Map<String, JRGroup>  groupmaps=new HashMap<String,JRGroup>();
            for (JRGroup jrGroup : grouplist) {
                groupmaps.put(jrGroup.getName(), jrGroup);
                //design.removeGroup(jrGroup);
            }
            System.out.println(design.getGroupsList().size());
            if(groupmaps.containsKey("group2")){
                //design.addGroup((JRDesignGroup) groupmaps.get("group2"));
            }
            if(groupmaps.containsKey("group1")){
                
                //design.addGroup((JRDesignGroup) groupmaps.get("group1"));
            }

 3,ireport设置的key可以不唯一,但唯一可能会好一些,便于查找

 4,TextField才有stretch when overflow, 静态文本没有

5,根据Key查找元素,并且修改

InputStream input = new FileInputStream(new File(dir + reportName +"_new.jrxml"));
         JasperDesign design = JRXmlLoader.load(input);
         //design=editJasperDesign(design);
         JRBand[] bands=design.getGroupsMap().get("group1").getGroupHeaderSection().getBands();
         JRBand band =bands[0];
         JRDesignStaticText element=(JRDesignStaticText) band.getElementByKey("txt1");
         element.setX(20);
         element.setWidth(element.getWidth()-20);
         element.setFontSize(14);
         element.setBold(true);
         element.setVerticalAlignment(VerticalAlignEnum.MIDDLE);
         element.setForecolor(Color.red);
         
         JasperReport report = JasperCompileManager.compileReport(design);

 6,JRDesignBand好像只能为动态增加的内容自动stretch,所以静态加了一些元素,band一定要>=他们的高度,否则编译不通过;

所以当动态加元素时,要触发一个动作,去检查最高的元素,然后设置band的高度,注意要加上该元素的y轴坐标

JRDesignBand band1=new JRDesignBand();
        band1.setSplitType(SplitTypeEnum.STRETCH);

 7,bootstrap栅格系统,可视化布局系统

文档

https://yq.aliyun.com/articles/20503

在线可视化布局系统

http://www.bootcss.com/p/layoutit/#

 8,引用ireport的样式文件(.jrtx)

点击某个jrxml文件,打开Report Inspector窗口,在style中添加引用

 9,給report动态加parameter

InputStream input = new FileInputStream(new File(dir + reportName +".jrxml"));
         JasperDesign design = JRXmlLoader.load(input);
        
         
         JRDesignParameter p=new JRDesignParameter();
         p.setName("aaaa");
         p.setValueClass(String.class);
         JRDesignExpression exp=new JRDesignExpression();
         exp.setText("1234");
         p.setDefaultValueExpression(exp);
         design.addParameter(p);

 10,主报表传了一个空的arraylist做数据源,结果就不显示了,打印时候是空白,

另外,一些子报表的数据源,如果不需要数据源,都好像不可以选"Don't pass data"

要写空数据源,如new net.sf.jasperreports.engine.JREmptyDataSource()

**

有问题在公众号【清汤袭人】找我,时常冒出各种傻问题,然一通百通,其乐无穷,一起探讨


原文地址:https://www.cnblogs.com/qingmaple/p/5641232.html