我已经遇到了感觉的两种情况,如果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)分组图像及其标题/标题
我也想像上面那样做,除了使用JRDesignImage
和JRDesignStaticText
元素,其中图像是要在我的报告上显示的图像,静态文本将是标题或标题放在图像上方。
有没有办法将这两个项目附加到一个组,然后只将该组添加到一个乐队?
如果是这样,任何人都可以提供JRXML,甚至更优选的是,一些Java示例如何进行此追加?如果没有,解决方案/解决方案是什么?
提前致谢!
答案 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);