本生成文件仅仅是处理基本列表和分组报表过程
先看效果图

1 全局常量

public class JRptConstant {public static final String STYLE_DEFAULT = "STYLE_DEFAULT";// 默认public static final String STYLE_PAGEHEADER = "STYLE_PAGEHEADER";// 页眉页尾public static final String STYLE_PAGETITLE = "STYLE_PAGETITLE"; // 报表 标题public static final String STYLE_PAGESUBTITLE = "STYLE_PAGESUBTITLE"; // 副标题public static final String STYLE_COLHEADER = "STYLE_COLHEADER"; // 表 栏头, 小计,合计,分组头等public static final String STYLE_COLCONTEXT = "STYLE_COLCONTEXT"; // 正文public static final String RPTGRP_NAME = "rptGrp"; // 分组BAND名称public static final String DFT_FONTNAME ="宋体";public static final int DFT_FONTSIZE =10;public static final String DFT_FONTCOLOR ="#000000";public static final String FLAG_YES ="Y";public static final String FLAG_NO ="";public static final String FLAG_TOTAL ="总计:";public static final String FLAG_SUBTOTAL ="小计:";public static final String VAR_SUBTL_PRE ="var_subtl_";public static final String VAR_TL_PRE ="var_tl_";public static final String COLHEADER_BACKCOLOR="#E1E1E1";//public static final String RPT_DATASOURCE_NAME = "Datasource_RPT";public static final double LINE_WIDTH =0.5; // 标题高度public static final int HEIGHT_UINT =25; // 基本行高public static final int HEIGHT_PAGEHEADERBAND = 25; // 页眉页脚高度public static final int WIDTH_GRPTEXT = 60; // 分组标题4个汉字宽度默认public enum RptDataSourceType {JRDS_JavaBean ,JRDS_JsonFile ,JRDS_JsonString,JRDS_ListMap ;}public enum RptExportType {JRET_FileType ,JRET_OutputStream,}}

2 输入参数类


public class JRptInputInfo implements Serializable {/*** 网格ID标识 或报表ID 标识*/private String rptId;/** 哪个用户要取报表*/private String userKey; /*** 语言类型*/private String langType; private RptDataSourceType dataSourceType ;private String queryConditionText;  //打印查询条件文本private String  dataOfJsonString;private String    dataOfJsonFile;private List<?>  dataOfBeanList;private  List<HashMap<String, Object>> dataOfMapList;/*** 要获取的文件类型:pdf,excels,excel,text,html,word,image,*/private Enum_FileType exportFileType =Enum_FileType.FILETYPE_HTML;....省去get set

3 生成XML文件时保存的报表信息类


public class JRptReportInfo {private String rptKey;   //对应关键字唯一性private DftViewMaster dftViewMaster; // 表格主表private DftRptMaster dftRptMaster; // 报表 设置private List<DftViewCol> lstViewCols; // 栏位设置信息private List<DftViewCol> lstGrpCols = new ArrayList<DftViewCol>();private List<DftViewCol> lstSumCols = new ArrayList<DftViewCol>();private int pageRealWidth ; //页面实际可显示区宽度private int totalColsWidth=0 ; //所有列排列后总显示数据宽度private Boolean beColUseAvgWidth = false;private int avgColsWidth=0 ; //表平均宽度private int firstColStartX =0; //第一列显示起始位置,private int lastColEndX =0; //最后一列显示结束位置,private int pageHeaderHeight =0 ; //标题高度private int titleHeight =0 ; //标题高度private int sumarryHeight=0 ; //标题高度private int colHeaderHeight=0 ; //标题栏高度private int colDetailHeight=0 ; //明细栏高度private Element bandOfTitle;  //TITLE = title 或pageHeaderprivate Element bandOfGrpHeader;  //表分组头栏private Element bandOfGrpFooter;  //表分组头栏//分组KEY字段private DftViewCol  grpKeyField;private int colFontWidth ; //明细栏字段宽度private String rptWorkFilePath =""; //工作目录

4 初始化报表所需要数据(初始化JRptReportInfo类)

/*** 初始化报表的一些参数和数据* @param jrInputInfo*/private void setRptInfoInitVariableValue(JRptInputInfo jrInputInfo) {lstRptProvider = new JRptListRptProvider() ;JRptReportInfo jrRptInfo = new JRptReportInfo();jrRptInfo.setRptKey(jrInputInfo.getUserKey() + '_' + jrInputInfo.getRptId());lstRptProvider.setRptInfo( App.initJasperReportDataSettting(jrRptInfo,jrInputInfo));DftRptMaster  dftRptMaster = lstRptProvider.getRptInfo().getDftRptMaster();DftViewMaster dftViewMaster  = lstRptProvider.getRptInfo().getDftViewMaster();//实际内容宽int calcHeight =  dftRptMaster.getPageWidth() - dftRptMaster.getPageLeft()- dftRptMaster.getPageRight();if ( dftRptMaster.getPageColumns()>1) {calcHeight = calcHeight /dftRptMaster.getPageColumns() - dftViewMaster.getColSpace() /2;}  jrRptInfo.setPageRealWidth( calcHeight); //计算平均列宽度,用于列不按实际宽度,平均宽度jrRptInfo.setBeColUseAvgWidth(dftViewMaster.getColStretch().equalsIgnoreCase("all"));if (jrRptInfo.getLstViewCols().size()>0) {jrRptInfo.setAvgColsWidth(jrRptInfo.getPageRealWidth()/jrRptInfo.getLstViewCols().size());} //计算总宽度和起始位置,放在注册字段中处理calcHeight = JRptConstant.HEIGHT_UINT;//栏头高度calcHeight = dftViewMaster.getRowHeaderHeight() + dftViewMaster.getRowSpace();if (calcHeight <=0 ) calcHeight = JRptConstant.HEIGHT_UINT;jrRptInfo.setColHeaderHeight(dftViewMaster.getBeHasTopTitle()==1?(calcHeight+calcHeight):calcHeight);//计算标题高度------//有副标题calcHeight = JRptConstant.HEIGHT_UINT;if (!StringUtils.isEmpty(dftRptMaster.getRptSubheadLangno())) {calcHeight = calcHeight +JRptConstant.HEIGHT_UINT;}//如果打印查询条件 if (dftRptMaster.getBePrintDataFilter()==1 && !StringUtils.isEmpty(jrInputInfo.getQueryConditionText())) {calcHeight = calcHeight +JRptConstant.HEIGHT_UINT;}//如果打印表头条文 if (dftRptMaster.getBePrintRptBegin()==1 && !StringUtils.isEmpty(dftRptMaster.getRptBegin())) {calcHeight = calcHeight +JRptConstant.HEIGHT_UINT;}//如果栏头不每页显示,则栏头需要打印在title区中if (dftRptMaster.getBePrintHeaderPerPage()!=1) {calcHeight = calcHeight + jrRptInfo.getColHeaderHeight();}jrRptInfo.setTitleHeight(calcHeight);//计算页眉高度if  ((dftRptMaster.getBePrintTitlePerPage()==1)|| (dftRptMaster.getBePrintPageHeader()==1)) {calcHeight = JRptConstant.HEIGHT_PAGEHEADERBAND;if  (dftRptMaster.getBePrintTitlePerPage()==1) {//每页都打印标题,则高度加上TITLE 高度calcHeight = calcHeight +  jrRptInfo.getTitleHeight();}jrRptInfo.setPageHeaderHeight(calcHeight);}//明细行高calcHeight = dftViewMaster.getRowHeight() + dftViewMaster.getRowSpace();if (calcHeight <=0 ) calcHeight = JRptConstant.HEIGHT_UINT;jrRptInfo.setColDetailHeight(calcHeight);// 计算合计高度//如果打印总计,或要打印表尾条文,或合计后打印图表calcHeight  = dftViewMaster.getRowHeaderHeight() + dftViewMaster.getRowSpace();if (dftRptMaster.getBePrintPageSummary()==1||(dftRptMaster.getBePrintRptEnd()==1)    ) {if  (dftRptMaster.getBePrintRptEnd()==1) { calcHeight = calcHeight+calcHeight;}jrRptInfo.setSumarryHeight(calcHeight);}}

5 编译报表文件并输出相应文件

private boolean exportReportToFile(JRptInputInfo jrInputInfo ) {// 12 编译 文件//加载jrxml模板 try {JasperDesign jdesign = JRXmlLoader.load(new File(lstRptProvider.getRptInfo().getRptWorkFilePath()+lstRptProvider.getRptInfo().getRptKey()+".jrxml"));//编译模板 JasperReport jasperReport = JasperCompileManager.compileReport(jdesign);  JRDataSource jrDs = null;switch ( jrInputInfo.getDataSourceType()) {case JRDS_JavaBean:jrDs =  new  JRBeanCollectionDataSource(jrInputInfo.getDataOfBeanList());break;case JRDS_JsonString:String jsonStr = jrInputInfo.getDataOfJsonString();InputStream inputStrem = new ByteArrayInputStream(jsonStr.getBytes());jrDs = new JsonDataSource(inputStrem);break;case JRDS_JsonFile:FileInputStream jsonInStream = null;try {jsonInStream = new FileInputStream(jrInputInfo.getDataOfJsonFile());} catch (Exception e){e.printStackTrace();}jrDs = new JsonDataSource(jsonInStream);break;case JRDS_ListMap://List<HashMap<String, Object>> lst = rptInitModel.getDataOfMapList();//Collection clt = rptInitModel.getDataOfMapList();;jrDs =  new JRMapCollectionDataSource((Collection) jrInputInfo.getDataOfMapList() );break;default:return false;}/*数组HashMap[] resportRows  = new HashMap[rptInitModel.getDataOfMapList().size()];HashMap<String, Object> hp = null;List<HashMap<String, Object>> lst = rptInitModel.getDataOfMapList();for(int i=0;i<resportRows.length; i++) { //HashMap hp:rptInitModel.getDataOfMapList()) {hp = lst.get(i) ;resportRows[i] = hp;}JRMapArrayDataSource   jrDs = new JRMapArrayDataSource(resportRows);*/JasperPrint jrPrint = JasperFillManager.fillReport(jasperReport, null, jrDs);String expFileName = lstRptProvider.getRptInfo().getRptWorkFilePath()+lstRptProvider.getRptInfo().getRptKey()+ "." +jrInputInfo.getExportFileType().getFileTypeStr(); //14 导出文件 switch (jrInputInfo.getExportFileType()) {case FILETYPE_EXCEL:break;case FILETYPE_EXCELXS:break;case FILETYPE_WORD:break;case FILETYPE_WORDXS:break;case FILETYPE_TEXT:break;case FILETYPE_HTML:JasperExportManager.exportReportToHtmlFile( jrPrint,expFileName);break;case FILETYPE_JPG:break;case FILETYPE_PNG:break;default:JasperExportManager.exportReportToPdfFile( jrPrint,expFileName);break;}} catch (JRException e) {e.printStackTrace();}return true;}

6 入口调用 方法

/*** 本类是根据设置生成XML文件 方式 来生成报表* @author Jason**/
public class JRptServiceImpl implements JRptService {private JRptListRptProvider  lstRptProvider;@Overridepublic Boolean showDynamicListReport(JRptInputInfo jrInputInfo)   {setRptInfoInitVariableValue(jrInputInfo);//先取到报表所有设定信息if (lstRptProvider.createListReportXMLFile(jrInputInfo))return exportReportToFile(jrInputInfo);return true;}

后期再慢慢贴出生成XML文件过程

Jasper Report 6.8 根据后台数据生成动态报表(JRXML文件实现)(二)生成XML文件(支持json,bean,map list数据源)相关推荐

  1. Jasper Report 6.8 根据后台数据生成动态报表(JRXML文件实现)(三)JRXML文件生成过程(支持json,bean,map list数据源)

    1.生成头信息及页面 protected Element createPageXmlFileRoot( ) {DftRptMaster dftRptMaster = rptInfo.getDftRpt ...

  2. jasper生成动态报表

    jasper生成动态报表 业务:客户点击链接(get请求),在页面显示报表.根据请求信息动态获取报表. 环境/工具:springboot ,IDEA编译器, TIBCO JasperSoft TIBC ...

  3. 基于jquery框架,用gvChart处理后台数据制作图形报表

    首先,介绍下gvChart: gvChart是一个利用Google Chart Tools来创建交互式图表(Charts)的jQuery插件.可创建的图表类型有Area.Line.Bar.Column ...

  4. 利用freemarker 在模板里面写入动态数据,动态表格,图片插入并生成word文档

    利用freemarker 在模板里面写入动态数据,动态表格,图片插入. 以下测试代码图片(image.jpg)和模板(template.xml)是直接放到src目录下面的,可以根据自己需求调整 废话不 ...

  5. 生成XML文件的步骤 解析XML文件

    ##生成XML文件的步骤 1.初始化一个xml的序列化器 XmlSerializer serializer = Xml.newSerializer(); 2.设置序列化器的参数 serializer. ...

  6. 随机生成游戏角色昵称(使用Excel配置XML文件)上

    在游戏开发中,基本上每一个游戏都有 随机生成游戏角色昵称的模块儿,游戏昵称这个东西是由策划来进行完成的,而策划一般情况下是不会写代码的,如果他写的不好还行,如果写好了咱们就失业了,so 咱们都是让策划 ...

  7. tinyxml2 数组_7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml...

     数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...

  8. 借助Android Studio生成图标(图片)drawable文件夹下的xml文件

    目录 一.准备图标或者图片 二.AS新建Vector Asset 如标题所示,借助Android Studio生成图标(图片)的xml文件,存放在drawable文件夹下. 一.准备图标或者图片 本人 ...

  9. python将数据写入xml文件_python读取/创建XML文件

    Python中定义了很多处理XML的函数,如xml.dom,它会在处理文件之前,将根据xml文件构建的树状数据存在内存.还有xml.sax,它实现了SAX API,这个模块牺牲了便捷性,换取了速度和减 ...

最新文章

  1. Memcached, Redis, MongoDB区别
  2. ASP.net MVC基础
  3. [CF1082G]Petya and Graph
  4. php将soap返回的xml转成数组,PHP – 在PHP中将XML转换为数组 – 在php中解析soap xml并将其存储在数据库中...
  5. fenby C语言 P30
  6. 当HTTP状态代码不足时:处理Web API错误报告
  7. PC介绍之PCIE、总线、内存、电源
  8. 43个实例xHTML+CSS(DIV+CSS)网页及导航布局教程
  9. nodejs之querystring模块
  10. 总线通信协议-PCIe
  11. steam安裝位置linux,「Linux」- 安装 Steam 客户端 @20210219
  12. U盘做成系统盘后如何恢复成普通U盘?
  13. 主成分之综合竞争力案例分析
  14. outlook邮件撤回失败
  15. 海豚湾--纪录日本人如何杀戮海豚的
  16. 《程序设计基础》 第十章 函数与程序结构 6-5 递归求简单交错幂级数的部分和 (15 分)
  17. Http详解,2021年是做Android开发人员的绝佳时机
  18. PHP初级【10天小积累-第三天】
  19. javaweb JAVA JSP药品销售管理系统JSP医药销售管理系统JSP购物商城系统JSP电子商务系统JSP购物系统
  20. c++ gdal 矢量转栅格_GDAL矢量转栅格

热门文章

  1. 在Windows中安装一些python的第三方库
  2. 旗舰版ndows7bios设置,戴尔成铭 3988台式机装win7系统的方法(intel 9代BIOS设置方法和USB驱动)...
  3. 跨平台实现基础(二)JavascriptInterface原理和Js和Java交互实践
  4. 身份证号码校验(JavaScript)
  5. java openmap_地图编辑定位Java OpenStreetMap Editor 10786 免费版
  6. python 表格查询,Python实现数据表查找
  7. 每周一学EXCEL函数公式:EXCEL中数值转文本公式TEXT
  8. 从零开始写一个小米便签
  9. IO到NIO的前因后果,以及NIO的用法(2)——Selector、Channel
  10. java 调用博思得条码打印机