**
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()
**