简体   繁体   English

Java:Jasper报告上的空白页问题

[英]Java: blank page issue on jasper report

I have a report that has 2 sub reports in the detail band.I would like to add in a paging parameter in the column footer but when I preview my report it gives me a blank page at the end. 我有一个报告,在明细栏中有2个子报告。我想在页脚中添加一个分页参数,但是当我预览我的报告时,它在末尾给了我一个空白页。 I have set the following for my Sub Report block in the their property window. 我已经在其属性窗口中为“子报表”块设置了以下内容。

Print Repeated Values checked Print Repeated Values选中

Remove Line When Blank checked 选中Remove Line When Blank

The response is at this link http://mattjiang.blogspot.com/2007/05/easy-way-to-remove-blank-page-generated.html 对此链接的回复是http://mattjiang.blogspot.com/2007/05/easy-way-to-remove-blank-page-generation.html

private void removeBlankPage(List<JRPrintPage> pages) {
  for (Iterator<JRPrintPage> i = pages.iterator(); i.hasNext();) {
    JRPrintPage page = i.next();
    if (page.getElements().size() == 0) {
      i.remove();
    }
  }
}

With the usage of this link http://mattjiang.blogspot.com/2007/05/easy-way-to-remove-blank-page-generated.html , I could navigate through the generated jasper and I found "trash elements" in my report: 通过使用此链接http://mattjiang.blogspot.com/2007/05/easy-way-to-remove-blank-page-generation.html ,我可以浏览生成的碧玉,发现“垃圾元素”在我的报告中:

int actualPage = 1;
for (Iterator<JRPrintPage> i=jasperPrint.getPages().iterator(); i.hasNext();) {
  JRPrintPage page = i.next();
  System.out.println(String.format("Page: %s, size: %s", actualPage, page.getElements().size()));
     for (Object element : page.getElements()) {
        System.out.println("Element: " + element);
        if (element instanceof JRTemplatePrintRectangle) {
            JRTemplatePrintRectangle rectangle = (JRTemplatePrintRectangle) element;
            System.out.println(String.format("Rectangle: Key: %s", rectangle.getKey()));
        }
    }
     actualPage++;
}

An easy way to remove blank page generated by JasperReports. 删除JasperReports生成的空白页的简单方法。

If your JasperReports report has one more sub-reports and it was generated as PDF file. 如果您的JasperReports报告还有一个子报告,并且它是作为PDF文件生成的。 In some circumstances, a blank page might be found within PDF file. 在某些情况下,PDF文件中可能会出现空白页。 Here is my solution to easily remove it. 这是我的解决方案,可以轻松删除它。

private void removeBlankPage(List<JRPrintPage> pages) {

      for (Iterator<JRPrintPage> i=pages.iterator(); i.hasNext();) {
          JRPrintPage page = i.next();
          if (page.getElements().size() == 0)
              i.remove();
      }
  }

This method should be called before you flush your JasperPrint instance to PDF. 在将JasperPrint实例刷新为PDF之前,应调用此方法。

Followed with the sample code, it would be better to know the object hierarchy of JasperPrint. 跟随示例代码,最好了解JasperPrint的对象层次结构。

  1. A JasperPrint has one or more JRPrintPage , you can get it via getPages() method of JasperPrint . 一个JasperPrint有一个或多个JRPrintPage ,你可以通过把它getPages()的方法JasperPrint It returns a List of JRPrintPage . 它返回JRPrintPage的列表。 If you have three elements, then your printer will print 3 pages. 如果您有三个元素,则打印机将打印3页。
  2. A JRPrintPage has one ore more JRPrintElement , each element might be a string of text, or a picture, or a rectangle, etc. You can change its position or content dynamically, or even add new JRPrintElement into JRPrintPage . 一个JRPrintPage有一个或多个JRPrintElement ,每个元素可能是文本字符串,图片,矩形等等。您可以动态更改其位置或内容,甚至可以将新的JRPrintElement添加到JRPrintPage

CREDITS : http://mattjiang.blogspot.in/2007/05/easy-way-to-remove-blank-page-generated.html 学分: http : //mattjiang.blogspot.in/2007/05/easy-way-to-remove-blank-page-generation.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM