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

    完结

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

  • 相关阅读:
    再谈CLR:值类型按照引用传递(以及与装箱拆箱的区别)
    Silverlight的跨站策略和跨站策略文件
    再谈CLR:MSCorEE.dll文件的奥秘
    再谈CLR:如何通过代码获取程序集所引用的程序集信息
    再谈方法的动态调用
    Silverlight隔离存储(续)
    支持取消操作和暂停操作的Backgroundworker
    单件模式(Singleton)和锁定(lock)
    在SharePoint服务器中执行备份和还原
    如何:将 TraceSource 和筛选器与跟踪侦听器一起使用(转载)
  • 原文地址:https://www.cnblogs.com/rojas/p/4122756.html
Copyright © 2011-2022 走看看