gpt4 book ai didi

java - 碧 Jade 报告 : Grouping Report Elements

转载 作者:行者123 更新时间:2023-11-30 11:49:26 25 4
gpt4 key购买 nike

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

以下是我的问题突然出现的情况:

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

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

我希望通过创建 1 个 JRDesignElement 子类实例并将其添加到我的 JasperDesign 对象中的带区来实现此目的。然而,经过深思熟虑,该设置需要 3 个单独的 JRDesignElement:2 个 JRDesignTextField(用于指标名称和值)和 1 个 JRDesignStaticText用于冒号 (":") 和它们之间的空格。

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

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

有什么方法可以将这 2 个项目附加到一个组中,然后将该组添加到一个 band 中吗?

如果是这样,任何人都可以提供 JRXML,或者更好的是,提供一些 Java 示例来说明如何进行此附加操作?如果没有,解决方案/解决方法是什么?

提前致谢!

最佳答案

(1) Grouping multiple text fields together:

  • 第一个解决方案 - 使用单个 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) Group an image and its title/caption

使用三个 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);

关于java - 碧 Jade 报告 : Grouping Report Elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8390393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com