zoukankan      html  css  js  c++  java
  • 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()

    **

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


  • 相关阅读:
    《转》python学习(5)--数据类型
    《转》python学习(4)对象
    《转》python学习(3)
    《转》python学习--基础下
    《转》python学习--基础上
    python初学总结(二)
    并发编程学习笔记(9)----AQS的共享模式源码分析及CountDownLatch使用及原理
    并发编程学习笔记(8)----ThreadLocal的使用及源码分析
    并发编程学习笔记(7)----线程之间的通信
    并发编程学习笔记(6)----公平锁和ReentrantReadWriteLock使用及原理
  • 原文地址:https://www.cnblogs.com/qingmaple/p/5641232.html
Copyright © 2011-2022 走看看