JasperReports:分组报告元素

时间:2011-12-05 18:58:54

标签: java jasper-reports

我已经遇到了感觉的两种情况,如果JasperReports有某种JRDesignElementGroup就可以解决它们。我已经检查了net.sf.jasperreports.engine.design.包的高低,但找不到类似的东西,虽然我能找到JRDesignGroup看起来像那种完成了什么我正在寻找,但我不太确定。

以下是我的问题出现的问题:

(1)将多个文本字段组合在一起:
我想要一份报告,我可以打印出一堆指标的名称和价值;看起来像:

Name: John Smith
Email: john.smith@example.com

我希望通过创建1 JRDesignElement子类实例并将其添加到我的JasperDesign对象中的一个band来实现此目的。但是,在考虑之后,该设置需要3个单独的JRDesignElement s:2 JRDesignTextField s(用于度量名称和值)和1 JRDesignStaticText用于冒号(“:”)和他们之间的空间。

有没有办法将这3个项目附加到一个组,然后将该组添加到乐队?

(2)分组图像及其标题/标题
我也想像上面那样做,除了使用JRDesignImageJRDesignStaticText元素,其中图像是要在我的报告上显示的图像,静态文本将是标题或标题放在图像上方。

有没有办法将这两个项目附加到一个组,然后只将该组添加到一个乐队?

如果是这样,任何人都可以提供JRXML,甚至更优选的是,一些Java示例如何进行此追加?如果没有,解决方案/解决方案是什么?

提前致谢!

1 个答案:

答案 0 :(得分:1)

  

(1)将多个文本字段组合在一起:

  • 第一个解决方案 - 使用单个JRDesignTextField元素
    //Detail
    band = new JRDesignBand();
    band.setHeight(40);

    textField = new JRDesignTextField();
    textField.setX(0);
    textField.setY(0);
    textField.setWidth(200);
    textField.setHeight(40);
    textField.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
    textField.setStyle(normalStyle);
    textField.setMarkup(JRCommonText.MARKUP_HTML);
    expression = new JRDesignExpression();
    expression.setText("\"<b>Name:   </b>\" + $F{Name} + \"<br/><b>Email: </b>\" + $F{Email}");
    textField.setExpression(expression);
    textField.getLineBox().getLeftPen().setLineWidth(1);
    textField.getLineBox().getTopPen().setLineWidth(1);
    textField.getLineBox().getRightPen().setLineWidth(1);
    textField.getLineBox().setLeftPadding(10);
    band.addElement(textField);

    ((JRDesignSection) jasperDesign.getDetailSection()).addBand(band);
  • 第二种解决方案 - 一起使用两个JRDesignStaticText和两个JRDesignTextField元素
    //Detail
    band = new JRDesignBand();
    band.setHeight(40);

    JRDesignStaticText staticText = new JRDesignStaticText();
    staticText.setX(0);
    staticText.setY(0);
    staticText.setWidth(60);
    staticText.setHeight(20);
    staticText.setMode(ModeEnum.OPAQUE);
    staticText.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
    staticText.setStyle(boldStyle);
    staticText.setText("Name: ");
    staticText.getLineBox().getLeftPen().setLineWidth(1);
    staticText.getLineBox().getTopPen().setLineWidth(1);
    staticText.getLineBox().setLeftPadding(10);
    band.addElement(staticText);

    textField = new JRDesignTextField();
    textField.setX(60);
    textField.setY(0);
    textField.setWidth(200);
    textField.setHeight(20);
    textField.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
    textField.setStyle(normalStyle);
    expression = new JRDesignExpression();
    expression.setText("$F{Name}");
    textField.setExpression(expression);
    textField.getLineBox().getTopPen().setLineWidth(1);
    textField.getLineBox().getRightPen().setLineWidth(1);
    textField.getLineBox().setLeftPadding(10);
    band.addElement(textField);

    staticText = new JRDesignStaticText();
    staticText.setX(0);
    staticText.setY(20);
    staticText.setWidth(60);
    staticText.setHeight(20);
    staticText.setMode(ModeEnum.OPAQUE);
    staticText.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
    staticText.setStyle(boldStyle);
    staticText.setText("Email: ");
    staticText.getLineBox().getLeftPen().setLineWidth(1);
    staticText.getLineBox().getBottomPen().setLineWidth(1);
    staticText.getLineBox().setLeftPadding(10);
    band.addElement(staticText);

    textField = new JRDesignTextField();
    textField.setStretchWithOverflow(true);
    textField.setX(60);
    textField.setY(20);
    textField.setWidth(200);
    textField.setHeight(20);
    textField.setPositionType(PositionTypeEnum.FLOAT);
    textField.setStyle(normalStyle);
    expression = new JRDesignExpression();
    expression.setText("$F{Email}");
    textField.setExpression(expression);
    textField.getLineBox().getRightPen().setLineWidth(1);
    textField.getLineBox().getBottomPen().setLineWidth(1);
    textField.getLineBox().setLeftPadding(10);
    band.addElement(textField);

    ((JRDesignSection) jasperDesign.getDetailSection()).addBand(band);
  

(2)将图像及其标题/标题分组

使用三个JRDesignImage和单个JRDesignStaticText元素

    band = new JRDesignBand();
    band.setHeight(110);

    String imgPath1 = "\"jasperreports.png\"";
    String imgPath2 = "\"js_logo.png\"";
    int img1Width = 105;
    int img2Width = 200;
    int distance = 20;

    expression = new JRDesignExpression();
    expression.setText(imgPath1);

    JRDesignImage image = new JRDesignImage(jasperDesign);
    image.setX(0);
    image.setY(0);
    image.setWidth(img1Width);
    image.setHeight(26);
    image.setScaleImage(ScaleImageEnum.FILL_FRAME);
    image.setExpression(expression);

    band.addElement(image);

    expression = new JRDesignExpression();
    expression.setText(imgPath2);

    image = new JRDesignImage(jasperDesign);
    image.setX(distance + img1Width);
    image.setY(0);
    image.setWidth(img2Width);
    image.setHeight(87);
    image.setScaleImage(ScaleImageEnum.FILL_FRAME);
    image.setExpression(expression);

    band.addElement(image);

    expression = new JRDesignExpression();
    expression.setText(imgPath1);

    image = new JRDesignImage(jasperDesign);
    image.setX(2*distance + img1Width + img2Width);
    image.setY(0);
    image.setWidth(img1Width);
    image.setHeight(26);
    image.setScaleImage(ScaleImageEnum.FILL_FRAME);
    image.setExpression(expression);

    band.addElement(image);

    JRDesignStaticText staticText = new JRDesignStaticText();
    staticText.setX(200);
    staticText.setY(90);
    staticText.setWidth(60);
    staticText.setHeight(20);
    staticText.setMode(ModeEnum.OPAQUE);
    staticText.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
    staticText.setStyle(boldStyle);
    staticText.setText("The title above images");

    band.addElement(staticText);

    ((JRDesignSection) jasperDesign.getDetailSection()).addBand(band);