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