Java JasperReports:对报表元素进行分组

Java JasperReports:对报表元素进行分组,java,jasper-reports,Java,Jasper Reports,我已经遇到过两种情况,如果JasperReports有某种JRDesignElementGroup,我觉得它们可以解决。我已经检查了net.sf.jasperreports.engine.design.包的大小,但是没有找到任何类似的东西,虽然我找到了一个看起来像是完成了我要找的东西的包,但我不是很确定 以下是我的问题出现的原因: (1)将多个文本字段分组在一起: 我希望有一份报告,可以打印出一系列指标的名称和值;看起来像: Name: John Smith Email: john.smith@

我已经遇到过两种情况,如果JasperReports有某种
JRDesignElementGroup
,我觉得它们可以解决。我已经检查了
net.sf.jasperreports.engine.design.
包的大小,但是没有找到任何类似的东西,虽然我找到了一个看起来像是完成了我要找的东西的包,但我不是很确定

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

(1)将多个文本字段分组在一起:
我希望有一份报告,可以打印出一系列指标的名称和值;看起来像:

Name: John Smith
Email: john.smith@example.com
我希望通过创建1
JRDesignElement
子类实例并将其添加到我的
JasperDesign
对象中的一个band中来实现这一点。但是,仔细考虑后,该设置需要3个独立的
JRDesignElement
s:2
JRDesignTextField
s(用于度量名称和值)和1
JRDesignStaticText
冒号(“:”)以及它们之间的空格

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

(2)将图像及其标题/标题分组 除使用
JRDesignImage
JRDesignStaticText
元素外,我还希望执行与上面相同的操作,其中图像是要显示在我的报告上的图像,静态文本是要放置在图像上方的标题或标题

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

如果是这样的话,谁能提供JRXML,或者更优选地,提供一些Java示例来说明如何进行这种附加?如果没有,解决方案/解决方法是什么

提前谢谢

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

  • 第一种解决方案-使用单个
    JRDesignTextField
    元素
//详细信息
band=新的JRDesignBand();
波段设置高度(40);
textField=新建JRDesignTextField();
textField.setX(0);
textField.setY(0);
textField.setWidth(200);
textField.setHeight(40);
setHorizontalAlignment(HorizontalAlignEnum.LEFT);
textField.setStyle(normalStyle);
setMarkup(jrcomontext.MARKUP_HTML);
表达式=新的JRDesignExpression();
expression.setText(“\”Name:\”+$F{Name}+\”
Email:\“+$F{Email}”); setExpression(表达式); textField.getLineBox().getLeftPen().setLineWidth(1); textField.getLineBox().getTopPen().setLineWidth(1); textField.getLineBox().getRightPen().setLineWidth(1); textField.getLineBox().setLeftPadding(10); 带.加法元素(textField); ((JRDesignSection)jasperDesign.getDetailSection()).addBand(band);
  • 第二种解决方案-同时使用两个
    JRDesignStaticText
    和两个
    JRDesignTextField
    元素
//详细信息
band=新的JRDesignBand();
波段设置高度(40);
JRDesignStaticText staticText=新的JRDesignStaticText();
staticText.setX(0);
staticText.setY(0);
staticText.setWidth(60);
staticText.setHeight(20);
staticText.setMode(ModeEnum.不透明);
staticText.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
staticText.setStyle(粗体样式);
staticText.setText(“名称:”);
staticText.getLineBox().getLeftPen().setLineWidth(1);
staticText.getLineBox().getTopPen().setLineWidth(1);
staticText.getLineBox().setLeftPadding(10);
带.附加元素(静态文本);
textField=新建JRDesignTextField();
textField.setX(60);
textField.setY(0);
textField.setWidth(200);
textField.setHeight(20);
setHorizontalAlignment(HorizontalAlignEnum.LEFT);
textField.setStyle(normalStyle);
表达式=新的JRDesignExpression();
表达式.setText(“$F{Name}”);
setExpression(表达式);
textField.getLineBox().getTopPen().setLineWidth(1);
textField.getLineBox().getRightPen().setLineWidth(1);
textField.getLineBox().setLeftPadding(10);
带.加法元素(textField);
staticText=新的JRDesignStaticText();
staticText.setX(0);
staticText.setY(20);
staticText.setWidth(60);
staticText.setHeight(20);
staticText.setMode(ModeEnum.不透明);
staticText.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
staticText.setStyle(粗体样式);
staticText.setText(“电子邮件:”);
staticText.getLineBox().getLeftPen().setLineWidth(1);
staticText.getLineBox().getBottomPen().setLineWidth(1);
staticText.getLineBox().setLeftPadding(10);
带.附加元素(静态文本);
textField=新建JRDesignTextField();
textField.setStretchWithOverflow(true);
textField.setX(60);
textField.setY(20);
textField.setWidth(200);
textField.setHeight(20);
textField.setPositionType(PositionTypeEnum.FLOAT);
textField.setStyle(normalStyle);
表达式=新的JRDesignExpression();
表达式.setText(“$F{Email}”);
setExpression(表达式);
textField.getLineBox().getRightPen().setLineWidth(1);
textField.getLineBox().getBottomPen().setLineWidth(1);
textField.getLineBox().setLeftPadding(10);
带.加法元素(textField);
((JRDesignSection)jasperDesign.getDetailSection()).addBand(band);
(2) 将图像及其标题/标题分组

使用三个
JRDesignImage
和单个
JRDesignStaticText
元素

band=newjrdesignband();
波段设置高度(110);
字符串imgPath1=“\”jasperreports.png\”;
字符串imgPath2=“\”js\u logo.png\”;
int img1Width=105;
int IMG2宽度=200;
整数距离=20;
表达式=新的JRDesignExpression();
setText表达式(imgPath1);
JRDesignImage=新的JRDesignImage(jasperDesign);
image.setX(0);
image.setY(0);
image.setWidth(img1Width);
图像。设置高度(26);
image.setScaleImage(ScaleImageEnum.FILL_框架);