2011-12-05 94 views
2

我已經遇到了兩種情況,感覺就像他們可以解決,如果JasperReports有某種JRDesignElementGroup。我已經檢查了net.sf.jasperreports.engine.design.包裝的高低,但找不到像這樣的東西,雖然我能找到一個JRDesignGroup它看起來像完成我在找什麼,但我不是很確定那個。JasperReports:分組報告元素

這裏是siutations在我的問題是此起彼伏:

(1)分組多個文本字段一起:
我想有一個報告,我可以打印出名字和值一堆指標;一些看起來像:

Name: John Smith 
Email: [email protected] 

我希望通過創建1 JRDesignElement子類的實例來實現這一點,在我的JasperDesign對象將它添加到一個樂隊。但是,仔細考慮後,該設置需要3個單獨的JRDesignElement s:2 JRDesignTextField s(用於度量標準名稱和值)和1 JRDesignStaticText(冒號(「:」))和它們之間的空格。

有沒有辦法將這3個項目追加到一個組中,然後只將該組添加到樂隊?

(2)組的圖像和它的標題/字幕
我還要做與上述相同,不同的是使用JRDesignImageJRDesignStaticText元件,其中,所述圖像將被顯示在我的報告的圖像,而靜態文本將成爲放置在圖像上方的標題或標題。

是否有任何方法可以將這兩個項目添加到一個組中,然後將該組添加到樂隊?

如果是這樣,任何人都可以提供JRXML,或者甚至更優選的是,如何做這個附加的一些Java示例?如果不是,解決方案/解決方法是什麼?

在此先感謝!

+0

我不習慣使用JR api,但是在JRXML文件中,您可以將以下表達式分配給文本字段:$ F {name} +「:」+ $ F {value}。 –

+0

謝謝JB!但是,那麼TextField的表達式(如您提供的示例)和TextField的文本之間有什麼區別? (JRDesignTextField同時具有setExpression和setText方法。) – IAmYourFaja

+1

在http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/design/JRDesignTextField.html中,沒有setText方法。 –

回答

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); 
+0

再一次,非常感謝你的非常有幫助和深思熟慮的答案! – IAmYourFaja

+0

@zharvey歡迎)) –