jasperreport 追加新报表(2)

 

用ireport做好模版后,如果要新加一个打印页,如果是新手,直接修改模版应该是理想情况,

可是什么数据源 feild,parameter,var,subreport ,还有路径,

真的可以让一个人疯掉,(关键这些东西组织在一起跑不了,主要是要动态的出现这些新页,就是说要动态控制这些新页的数量以及要不要出现),

还好,想到如果直接用java在外部控制,就可以易如反掌了,毕竟java的东西自己熟,

幸运的看到一篇关于 ireport追加新页的文章

(是英文的,有时候不得不承认啊,谷歌是比度娘给力,关键是公司网络的各种墙,连个CSDN 、ITEYE都不给上,逼我学英文...)

写怎么添加时候绕来绕去,读完理解最关键的一个方法或思路:

主要是往已有的 JasperPrint 对象中addPage()。

  private JasperPrint multipageLinking(JasperPrint page1, JasperPrint page2) {

    List pages = page2.getPages();

    for (int count = 0; count <pages.size(); count++) {

      page1.addPage((JRPrintPage) pages.get(count));

    }

    return page1;

  }

如果你有更多的页要添加,或者有更复杂的逻辑要执行,你可以在外部来调用这个方法

最后制作得到  JasperPrint 对象 jp  然后用下面方法做打印显示

JasperViewer.viewReport(jp,false);

 

最后给出完整的一个例子,xml文件没提供,DOM4J所需的包有三个自己下载,

dom4j-1.5.1.jar
jaxen-1.1.1.jar
saxpath-1.0-FCS.jar

(findjar.com是个好地方),关于org.w3c.dom.Document 与org.dom4j.Document互转可以自己找,我的另一个文章中有:

 

  1 package ec.export.checksheet;

  2 

  3 import java.io.File;

  4 import java.io.IOException;

  5 import java.io.InputStream;

  6 import java.util.ArrayList;

  7 import java.util.HashMap;

  8 import java.util.List;

  9 import java.util.Map;

 10 

 11 import net.sf.jasperreports.engine.JREmptyDataSource;

 12 import net.sf.jasperreports.engine.JRException;

 13 import net.sf.jasperreports.engine.JRPrintPage;

 14 import net.sf.jasperreports.engine.JasperFillManager;

 15 import net.sf.jasperreports.engine.JasperPrint;

 16 import net.sf.jasperreports.engine.JasperReport;

 17 import net.sf.jasperreports.engine.util.JRLoader;

 18 import net.sf.jasperreports.view.JasperViewer;

 19 

 20 import org.dom4j.Document;

 21 import org.dom4j.DocumentException;

 22 import org.dom4j.io.SAXReader;

 23 

 24 import ec.export.ECReportHelper;

 25 import ec.utils.Dom4jXml;

 26 

 27 public class AddCheckSheet {

 28     

 29     public  Dom4jXml dj = new Dom4jXml();

 30     

 31     public JasperPrint FormTotalPage(JasperPrint jp,org.w3c.dom.Document document,Map mSelectCheckSheet){

 32         List l=new ArrayList();

 33         try {

 34             l=CheckSheetReadXml(document);

 35         } catch (Exception e1) {

 36             // TODO Auto-generated catch block

 37             e1.printStackTrace();

 38         }

 39         

 40         //jasper template put to this class dir path  

 41         String jasperpatha=getClass().getResource("")+"checksheeta.jasper";

 42         jasperpatha=jasperpatha.replaceAll("file:/", ""); 

 43         String jasperpathb=getClass().getResource("")+"checksheetb.jasper";

 44         jasperpathb=jasperpathb.replaceAll("file:/", "");  

 45         for(int i=0;i<l.size();i++){

 46             

 47             if(mSelectCheckSheet.containsKey(((Map)l.get(i)).get("cs_Model")))

 48             {

 49                     // ========for checksheeta.jasper=======

 50                     JasperPrint jasperprint = new JasperPrint();

 51                     try {

 52                         jasperprint = JasperFillManager.fillReport(jasperpatha, (Map)l.get(i), new JREmptyDataSource());

 53                     } catch (Exception e) {

 54                         e.printStackTrace();

 55                     } 

 56                      //System.out.println(" before jp: "+jp.getPages().size()); 

 57                      multipageLinking(jp,jasperprint);

 58                      //System.out.println(" after jp: "+jp.getPages().size()); 

 59                 

 60                     // =======for checksheetb.jasper======= 

 61                     jasperprint = new JasperPrint();

 62                     try {

 63                         jasperprint = JasperFillManager.fillReport(jasperpathb, (Map)l.get(i), new JREmptyDataSource());

 64                     } catch (Exception e) {

 65                         e.printStackTrace();

 66                     } 

 67                     //System.out.println(" before jp: "+jp.getPages().size()); 

 68                     multipageLinking(jp,jasperprint);

 69                     //System.out.println(" after jp: "+jp.getPages().size());

 70             }

 71         }

 72         return jp;

 73     }

 74     

 75    private JasperPrint multipageLinking(JasperPrint page1, JasperPrint page2) {

 76         List pages = page2.getPages();

 77         for (int count = 0; count <pages.size(); count++) {

 78           page1.addPage((JRPrintPage) pages.get(count));

 79         }

 80         return page1;

 81     }

 82         

 83     public static void main(String[] args) throws Exception {

 84         Dom4jXml dj = new Dom4jXml();

 85         AddCheckSheet acs=new AddCheckSheet();

 86         SAXReader saxReader = new SAXReader();

 87         Document document;

 88         try {

 89             document = saxReader.read(new File("D:/Task/draw_cs3/20141218/wcfx36_more.xml"));

 90             JasperPrint jp=null;

 91              // acs.CheckSheetReadXml(dj.parse(document));

 92              Map mSelectCheckSheet=new HashMap();              

 93              jp=acs.FormTotalPage(jp,dj.parse(document),mSelectCheckSheet);

 94              JasperViewer.viewReport(jp,false);

 95         } catch (DocumentException e) {

 96             // TODO Auto-generated catch block

 97             e.printStackTrace();

 98         }

 99     }

100 }
public List CheckSheetReadXml(org.w3c.dom.Document doc) throws Exception{

        Document document=dj.parse(doc);

        List pl=new ArrayList();

         

            //count product num

            List list = document.selectNodes("/report/job/product"); 

            int num = list.size();

            

            for(int i=1;i<=num;i++)

            {

                Map mproduct=new HashMap();

                //0 select_date

                String xpathstr="/report/job/@select_date";

                    mproduct.put("cs_Date", dj.getContentString(document,xpathstr));

                //model  1 AT3ARF1R AT5CRF4R

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Screw Compressor Water Cooled Package Chiller']/row/field[name='Model #']/value";

                    String s1=dj.getContentString(document,xpathstr);

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Screw Compressor Water Cooled Package Chiller']/row/field[name='Component code']/value";

                    String tmep=dj.getContentString(document,xpathstr);

                    tmep=tmep.substring(2);

                    String tempbefore=tmep.substring(3);

                    String tempafter=tmep.substring(0,3);

                    tmep=tempbefore+tempafter;

                mproduct.put("cs_Model", s1+tmep);

                

                xpathstr="/report/job/product["+i+"]/qty";

                    mproduct.put("cs_Qty", dj.getContentString(document,xpathstr));

                

                    

                    

                //evap  2

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col1/field[contains(name,'Entering fluid temp')]/value";

                    mproduct.put("cs_Evap_Entering_fluid_temp", dj.getContentString(document,xpathstr));

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col1/field[contains(name,'Fluid flow rate')]/value";

                    mproduct.put("cs_Evap_Fluid_flow_rate", dj.getContentString(document,xpathstr));

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col1/field[contains(name,'Fouling factor')]/value";

                    mproduct.put("cs_Evap_Fouling_factor", dj.getContentString(document,xpathstr));

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col1/field[contains(name,'Leaving fluid temp')]/value";

                    mproduct.put("cs_Evap_Leaving_fluid_temp", dj.getContentString(document,xpathstr));

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col1/field[contains(name,'Fluid')]/value";

                    mproduct.put("cs_Evap_Fluid", dj.getContentString(document,xpathstr));

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col1/field[contains(name,'Number of passes')]/value";

                    mproduct.put("cs_Evap_Number_of_passes", dj.getContentString(document,xpathstr));

            

                //cond  3

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col2/field[contains(name,'Entering fluid temp')]/value";

                    mproduct.put("cs_Cond_Entering_fluid_temp", dj.getContentString(document,xpathstr));

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col2/field[contains(name,'Fluid flow rate')]/value";

                    mproduct.put("cs_Cond_Fluid_flow_rate", dj.getContentString(document,xpathstr));

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col2/field[contains(name,'Fouling factor')]/value";

                    mproduct.put("cs_Cond_Fouling_factor", dj.getContentString(document,xpathstr));

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col2/field[contains(name,'Leaving fluid temp')]/value";

                    mproduct.put("cs_Cond_Leaving_fluid_temp", dj.getContentString(document,xpathstr));

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col2/field[contains(name,'Fluid')]/value";

                    mproduct.put("cs_Cond_Fluid", dj.getContentString(document,xpathstr));

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Evaporator_Condenser']/col2/field[contains(name,'Number of passes')]/value";

                    mproduct.put("cs_Cond_Number_of_passes", dj.getContentString(document,xpathstr));

               

                //4  Cooling Conditions of service 

                //<name>Capacity (Tons)</name>

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Cooling Conditions of service']/col1/field[contains(name,'Capacity')]/value";

                    mproduct.put("cs_Capacity", dj.getContentString(document,xpathstr));

                //<name>Energy efficiency (kW/Ton)</name>

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Cooling Conditions of service']/col2/field[contains(name,'Energy efficiency')]/value";

                    mproduct.put("cs_Energy_efficiency", dj.getContentString(document,xpathstr));

                

                //5<name>Unit power supply</name>

                xpathstr="/report/job/product["+i+"]/performanceData/group[name='Electrical characteristics']/col1/field[contains(name,'Unit power supply')]/value";

                    mproduct.put("cs_Unit_power_supply", dj.getContentString(document,xpathstr));

                

                //6<name>Refrigerant</name>//<value>R134a</value>

                 xpathstr="/report/job/product["+i+"]/performanceData/group[name='Physical Specifications']/col2/field[contains(name,'Refrigerant')]/value";

                     mproduct.put("cs_Refrigerant", dj.getContentString(document,xpathstr));

                 

                 //getContent(document,xpathstr);

             

                 pl.add(mproduct);

            }

        return pl;

    }

 

 

完结

本着共享的精神,减少别人重复弯路,减少重复别人的弯路

你可能感兴趣的:(jasperReport)