`
dellsoft
  • 浏览: 113339 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

jasperreports中如何填补细节区域中的空白行

阅读更多
最近一直在学习jasperreports,看过 jasperreport  ultimate guide 1.2.5后,会了一般的使用,不过,还是碰到不少问题
1)在detail中画线,大家应该都用过,不过会出现下图中的问题
通过阅读代码,找到了一个解决办法
JRHorizontalFiller,水平添加实现
1)修改fillDetail
java 代码
 
  1. private void fillDetail() throws JRException {  
  2.      JRFillBand tmp = detail;  
  3.      if (log.isDebugEnabled() && !detail.isEmpty()) {  
  4.          log.debug("Fill " + fillerId + ": detail");  
  5.      }  
  6.   
  7.      if (!detail.isPrintWhenExpressionNull()) {  
  8.          calculator.estimateVariables();  
  9.          detail.evaluatePrintWhenExpression(JRExpression.EVALUATION_ESTIMATED);  
  10.      }  
  11.   
  12.      if (detail.isToPrint()) {  
  13.          while (  
  14.                  (columnIndex == columnCount - 1 || isNewGroup)  
  15.                          && detail.getHeight() > columnFooterOffsetY - offsetY  
  16.                  ) {判断什么时间断页  
  17.              //在断页前,填充细节区域中的空白行  
  18.              fillDetailBlankBand(tmp, JRExpression.EVALUATION_DEFAULT, false, columnFooterOffsetY - offsetY,offsetY);  
  19.              byte evalPrevPage = (isNewGroup ? JRExpression.EVALUATION_DEFAULT : JRExpression.EVALUATION_OLD);  
  20.   
  21.              fillPageBreak(  
  22.                      false,  
  23.                      evalPrevPage,  
  24.                      JRExpression.EVALUATION_DEFAULT,  
  25.                      true  
  26.              );  
  27.          }  
  28.      }  
  29.   
  30.      scriptlet.callBeforeDetailEval();  
  31.      calculator.calculateVariables();  
  32.      scriptlet.callAfterDetailEval();  
  33.   
  34.      if (!detail.isPrintWhenExpressionNull()) {  
  35.          detail.evaluatePrintWhenExpression(JRExpression.EVALUATION_DEFAULT);  
  36.      }  
  37.   
  38.      if (detail.isToPrint()) {  
  39.          if (  
  40.                  offsetX == lastDetailOffsetX  
  41.                          && offsetY == lastDetailOffsetY  
  42.                  ) {  
  43.              if (columnIndex == columnCount - 1) {  
  44.                  setFirstColumn();  
  45.              } else {  
  46.                  columnIndex++;  
  47.                  offsetX += columnWidth + columnSpacing;  
  48.                  offsetY -= detail.getHeight();  
  49.   
  50.                  setColumnNumberVariable();  
  51.              }  
  52.          }  
  53.   
  54.          fillFixedBand(detail, JRExpression.EVALUATION_DEFAULT, false);  
  55.   
  56.          lastDetailOffsetX = offsetX;  
  57.          lastDetailOffsetY = offsetY;  
  58.      }  
  59.   
  60.      isNewPage = false;  
  61.      isNewColumn = false;  
  62.      isNewGroup = false;  
  63.  }  

2)修改fillPageFooter
java 代码
 
  1. private void fillPageFooter(byte evaluation) throws JRException {  
  2.        JRFillBand crtPageFooter = getCurrentPageFooter();  
  3.   
  4.        if (log.isDebugEnabled() && !crtPageFooter.isEmpty()) {  
  5.            log.debug("Fill " + fillerId + ": " + (isLastPageFooter ? "last " : "") + "page footer");  
  6.        }  
  7.   
  8.        offsetX = leftMargin;  
  9.   
  10.        if (!isSubreport() && !fillContext.isIgnorePagination()) {  
  11.            offsetY = pageHeight - crtPageFooter.getHeight() - bottomMargin;  
  12.        }  
  13.   
  14.        crtPageFooter.evaluatePrintWhenExpression(evaluation);  
  15.   
  16.        if (crtPageFooter.isToPrint()) {  
  17.            //填充细节区域中的空白行  
  18.           fillDetailBlankBand(detail, evaluation, true, columnFooterOffsetY - lastDetailOffsetY,lastDetailOffsetY);  
  19.            fillFixedBand(crtPageFooter, evaluation);  
  20.        }  
  21.    }  

3)添加 fillDetailBlankBand
java 代码
 
  1. protected void fillDetailBlankBand(JRFillBand band, byte evaluation, boolean allowShrinking, int stretchHeight, int _offsetY) throws JRException {  
  2.        JRPrintBand printBand = band.fill(stretchHeight);  
  3.        printBand.setHeight(stretchHeight);  
  4.        JRPrintElement printElement = null;  
  5.        JRElement[] fillElements = band.getElements();  
  6.        for (int i = 0; i < fillElements.length; i++) {  
  7.            JRFillElement fillElement = (JRFillElement) fillElements[i];  
  8.            if (fillElement instanceof JRFillTextField) {  
  9.                JRFillTextField fillFieldElement = (JRFillTextField) fillElement;  
  10.                fillFieldElement.rewind();  
  11.                fillFieldElement.setRawText("");  
  12.                printElement = fillFieldElement.fill();  
  13.                printElement.setHeight(stretchHeight);  
  14.                printElement.setX(printElement.getX() + offsetX);  
  15.                printElement.setY(printElement.getY() + _offsetY);  
  16.                printPage.addElement(printElement);  
  17.                //  printBand.addElement(printElement);  
  18.            }  
  19.        }  
  20.        resolveBandBoundElements(band, evaluation);  
  21.    }  

通过以上步骤就解决了这个问题
  • 大小: 37.2 KB
  • 描述: 修改后填充的的图片
  • 大小: 37.9 KB
分享到:
评论

相关推荐

    jasperreports实例+中文文档+资料

    JasperReports是一款强大的开源报表工具,广泛应用于Java应用程序中,用于生成复杂的数据报告。这个资源包“jasperreports实例+中文文档+资料”提供了全面的学习材料,包括实例、文档以及相关资料,帮助开发者深入...

    解决jasperReports中文无法显示问题.rar

    标题中的“解决jasperReports中文无法显示问题.rar”指出,这是一个关于jasperReports库在处理中文字符时遇到问题,并提供了解决方案的压缩文件。jasperReports是一个强大的开源报告生成库,广泛用于Java应用程序中...

    iReport+jasperReports中文教程.rar

    4. **表达式和变量**:理解JasperReports中的表达式语言JasperReports Expression Language (JEXL),以及如何使用变量和计算字段来处理动态数据。 5. ** JasperReports API**:了解JasperReports的核心类,如...

    jasperReports支持Table中文的解决

    中文支持的完美解决, 1、通过设置默认样式的方式不能解决table和subReport中的中文显示。...2、jasperreports-fonts-6.9.0.jar增加了【宋体】的支持。 3、在SpringMvc中测试导出PDF没有问题,包括Table和subReport。

    jasperreports-fonts.zip

    标题“jasperreports-fonts.zip”暗示这是一份与JasperReports相关的字体资源包,而描述中的“jasperreport支持中文jar包”则指出这个压缩文件包含的是为了使JasperReports能够正确显示中文字符的特殊组件。...

    在struts2中使用JasperReports

    将JasperReports与Struts2整合,可以帮助我们在Web应用中轻松创建复杂的报表。 首先,JasperReports是用Java编写的开源报表库,能够设计和生成多种格式的报表,如PDF、HTML、Excel、CSV等。它的强大之处在于能够...

    jasperreports 3.7.5

    jasperreports,jasperreports,jasperreports,jasperreports,jasperreports,jasperreports,jasperreports,jasperreports,jasperreports

    JasperReports iReport中文教程.pdf

    ### JasperReports与iReport中文教程知识点总结 #### 1. JasperReport与iReport简介 - **JasperReport**: 开源的报表打印组件,适合于Web应用程序与Java Application的报表打印需求,可在sf.net获取,截至文章撰写...

    JasperReports+iReport在eclipse中的使用

    ### JasperReports+iReport在Eclipse中的使用详解 #### 一、JasperReports简介与特性 JasperReports是一款开源的报表工具,它能够根据预定义的模板生成多种格式的报表,如PDF、HTML、XML等,并且支持CSV、XLS、RTF...

    JasperReports 3.6 Development Cookbook

    1. **JasperReports基础**:首先,你需要了解JasperReports的基本概念,包括报表设计、数据源、字段、细节段、汇总等元素。这些是构建任何报表的基础。 2. **iReport集成**:JasperReports通常与iReport(报表设计...

    Jasperreports教程

    `JasperReport_JasperFillManager_fillReportToFile.mht`可能详细解释了`JasperFillManager.fillReportToFile()`方法,它是JasperReports库中用于将填充后的报表保存到文件的重要方法,这对于批量生成报表或后续处理...

    jasperreports-3.5.3.jar

    jasperreports-3.5.3.jar jasperreports-3.5.3.jar jasperreports-3.5.3.jar

    iReport+Jasperreports中文教程集合

    iReport和JasperReports是两个在Java开发领域中广泛使用的报表工具,主要用于设计和生成复杂的业务报告。这个“iReport+Jasperreports中文教程集合”提供了丰富的学习资源,旨在帮助初学者快速掌握这两个工具的使用...

    jasperreports-applet-5.1.0.jar

    在JasperReports中,用户可以利用JasperDesign进行报表设计,然后使用JasperFillManager填充数据,最后通过JasperExportManager导出报表。 二、Applet技术 Applet是Java小程序,可以在Web浏览器中运行。在...

    jasperreports所有的jar包

    在JasperReports中,Groovy脚本可用于报表的计算、过滤数据或者自定义报表行为。 3. **gwt-benchmark-viewer-1.5.1.jar**:Google Web Toolkit (GWT) 的组件,用于展示性能基准测试结果。虽然GWT主要用于开发客户端...

    jasperreports

    JasperReports是一款功能强大的开源报表工具,尤其在Java环境中被广泛应用。本文将详细探讨JasperReports 4.7.0版本的核心特性、设计原理及其实现方法,旨在帮助开发者深入理解并充分利用这一强大的报告生成库。 1....

Global site tag (gtag.js) - Google Analytics