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

**


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM