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;
    }

完结

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

时间: 2024-10-10 21:39:30

jasperreport 追加新报表(2)的相关文章

ireport 追加新报表

ireport  追加新报表 /* To change this template, choose Tools | Templates * and open the template in the editor. */ package com; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.jasperreports.

使用FileStream向txt格式的文本文件 &quot;追加&quot; 新内容并读取

原文:使用FileStream向txt格式的文本文件 "追加" 新内容并读取 1 //得到文件路径. 2 static string filePath = AppDomain.CurrentDomain.BaseDirectory+"\\TxtFile.txt"; 3 static void Main(string[] args) 4 { 5 //调用写入方法. 6 WriteTxtFile(filePath); 7 //调用读取方法. 8 Console.Writ

jasperReport+ireport实现报表导出和数据分析

jasperReport + ireport组合实现报表文件(各种文件格式xsl.pdf,rtf等)的生成导出是目前开源报表中使用的最为广泛的.在平台一期完成之后,而且功能中报表以及数据分析这块是必不可少的,一下展示如何使用JasperReport + ireport导出excel报表. 1.需要.jasper文件作为生成报表的模板,这个文件是由ireport文件编译.jrxml文件之后生成的.这个需要注意的是JasperReport和ireport的版本一定要对应,否则很可能出问题.下面的文件

利用jasperReport制作web报表

作者:54dabang E-mail:[email protected] 一 前言 一直发现在网上寻找资源比较繁琐,前段时间在制作jasperReport报表时候出现了很多问题.特别是在一些细节方面,特别耗费时间.特此写下此文,希望对和我一样在初期阶段学习的同学能少走一些弯路. 二 内容简介 1)给出自己制作的jasperReport的视图效果,方便对报表工具初期学习的选择. 2)自己制作报表的测试源码和所有相关学习资料,对应所有jar包,jasperReport版本. 3)快速开发报表的一些建

python openpyxl模块实现excel的读取,新表创建及原数据表追加新数据

当实际工作需要把excel表的数据读取出来,或者把一些统计数据写入excel表中时,一个设计丰富,文档便于寻找的模块就会显得特别的有吸引力,本文对openpyxl模块的一些常见用法做一些记录,方便工作中查询(好记性不如烂笔头) author:he    qq:760863706    python:3.5    date:2018-9-14 1:安装openpyxl pip install openpyxl 1 2:excel表读取数据(.xlsx) import openpyxlfilepat

JasperReport报表开发之转置交叉表

使用Jasper或BIRT等报表工具时,常会碰到一些非常规的统计,用报表工具本身或SQL都难以处理,比如源数据不符合交叉表的要求,需要转置后再呈现.集算器具有结构化强计算引擎,集成简单,可以协助报表工具方便地实现此类需求.下面通过一个例子来说明转置交叉表的实现过程. 数据库表booking汇总着各年度商品的预定数据,有四个字段,包括年份和三种预定状态,部分数据如下: 报表要求呈现指定年份及上一年的预定情况,其中行组有三项,即三种预定状态,列组是年份,测度是当年的预定数据.此外要汇总出指定年份各预

JasperReport报表开发(一)--原理介绍

1. JasperReport介绍 JasperReport 是一个开源的Java报表引擎,它不像其他的报表工具,例如Crystal报表是基于Java的,没有自己的表达式语法.Jasper Reports有提供丰富的内容到屏幕上,到打印机,或转换成PDF,HTML,XLS,RTF,ODT,CSV,TXT和XML文件的能力.Jasper Reports是一个Java类库,需要嵌入到Java应用程序中.Jasper Report的特点如下: 具有灵活的报表布局: 可以用文字或图形显示数据: 开发人员

报表开发神器!DevExpress Reporting v19.1:WinForms平台新功能

行业领先的.NET界面控件DevExpress Reporting全新发布了v19.1版本,本文主要为大家介绍WinForms.ASP.Net Core平台.Visual Studio报表设计器中发布的新功能. DevExpress Reporting v19.1下载 Visual Studio报表设计器 用于图像属性的Image Picker 现在使用Image Picker对话框在Visual Studio中编辑图像属性(例如XRPictureBox.ImageSource,XRCheckB

【iReport+JasperReport】1.iReport与JasperReport基础

1.什么是iReport与JasperReport 提到iReport,就不得不先说一下JasperReport.JasperReport是一个报表制作程序,用户按照它制定的规则编写一个XML文件,然后得到用户需要输出的格式的文件.它支持输出的文件格式包括PDF.HTML.XML.CSV等等. 而我们使用JasperReport来制作报表时,可以分为以下两种方法: (1)直接用程序定义一个报表 (2)写一个XML文件来描述这个报表,通常需要借助iReport JasperReport做报表时用的