2016-09-27 18 views
0

javaを使用してjasper pdfを作成しています。私はサブレポートをメインレポートに動的に追加することにしました。Javaコードを使用してメインレポートにサブレポートを追加する方法

JasperDesign jasperDesign = JRXmlLoader.load("/home/report1.jrxml"); 
    jasperDesign.setName("sampleDynamicJasperDesign"); 
    jasperDesign.setPageWidth(595);jasperDesign.setPageHeight(842);jasperDesign.setColumnWidth(595-40-40);jasperDesign.setColumnSpacing(0); 
    jasperDesign.setLeftMargin(40);jasperDesign.setRightMargin(40);jasperDesign.setTopMargin(20);jasperDesign.setBottomMargin(20); 

    JRDesignStyle normalStyle = new JRDesignStyle(); 
    normalStyle.setName("Noto Sans");normalStyle.setDefault(true); normalStyle.setFontName("Noto Sans");normalStyle.setFontSize(12);normalStyle.setPdfFontName("Helvetica");normalStyle.setPdfEncoding("Cp1252");normalStyle.setPdfEmbedded(false);jasperDesign.addStyle(normalStyle); 
((JRDesignSection) jasperDesign.getDetailSection()).addBand(createHeaderSubreport(parameters)); 

//サブレポート

private JRBand createHeaderSubreport(Map<String, Object> parameters) throws JRException { 

    JasperDesign jasperDesign = new JasperDesign(); 
    jasperDesign.setLanguage("java"); 
    jasperDesign.setPageWidth(595); jasperDesign.setPageHeight(842);jasperDesign.setColumnWidth(595-40-40);jasperDesign.setColumnSpacing(0);jasperDesign.setLeftMargin(40);jasperDesign.setRightMargin(40);jasperDesign.setTopMargin(20); jasperDesign.setBottomMargin(20); 
    jasperDesign.setTitle(null);jasperDesign.setColumnHeader(null); 

    JRDesignParameter designParameter = new JRDesignParameter(); designParameter.setName("LeftText");designParameter.setValueClass(String.class); 
    jasperDesign.addParameter(designParameter); 
    JRDesignStyle normalStyle = new JRDesignStyle(); 
    normalStyle.setName("Noto Sans");normalStyle.setDefault(true);normalStyle.setFontName("Noto Sans");normalStyle.setFontSize(12); normalStyle.setPdfFontName("Helvetica");normalStyle.setPdfEncoding("Cp1252"); normalStyle.setPdfEmbedded(false);jasperDesign.addStyle(normalStyle); 

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

    JRDesignStaticText designStaticText = new JRDesignStaticText(); 
    designStaticText.setText("Header"); 
    designStaticText.setHeight(10); 
    designStaticText.setWidth(100); 
    designStaticText.setX(0);designStaticText.setY(0); 
    band.addElement(designStaticText); 

    JRDesignTextField jrDesignTextField = new JRDesignTextField(); 
    JRDesignExpression jrExpression = new JRDesignExpression(); 
    jrExpression.setText("$P{LeftText}"); 
    jrDesignTextField.setExpression(jrExpression); 
    jrDesignTextField.setY(0); 
    jrDesignTextField.setHeight(20); 
    jrDesignTextField.setWidth((38*515)/100); 
    jrDesignTextField.setMarkup("html"); 
    jrDesignTextField.setHorizontalTextAlign(HorizontalTextAlignEnum.LEFT); 
    jrDesignTextField.setStretchWithOverflow(true); 
    band.addElement(jrDesignTextField); 

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

    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 

    JRDesignSubreport jSubreport = new JRDesignSubreport(jasperDesign); 
    jSubreport.setUsingCache(false); 
    jSubreport.setRemoveLineWhenBlank(true); 
    jSubreport.setPrintRepeatedValues(false); 
    jSubreport.setWidth(500); 
    jSubreport.setHeight(80); 
    jSubreport.setX(0);jSubreport.setY(0); 

    JRDesignExpression expression = new JRDesignExpression(); 
    expression.setText("new net.sf.jasperreports.engine.JREmptyDataSource(1)"); 
    jSubreport.setDataSourceExpression(expression);   
    jSubreport.setExpression(expression); 

    JRDesignSubreportParameter designSubreportParameter = new JRDesignSubreportParameter(); designSubreportParameter.setName("REPORT_CONNECTION");  
    JRDesignExpression exp = new JRDesignExpression("$P{REPORT_CONNECTION}"); designSubreportParameter.setExpression(exp); 
    jSubreport.addParameter(designSubreportParameter); 


    designSubreportParameter = new JRDesignSubreportParameter(); designSubreportParameter.setName("LeftText"); 
    exp = new JRDesignExpression("$P{LeftText}"); designSubreportParameter.setExpression(exp); 
    jSubreport.addParameter(designSubreportParameter); 

    band = new JRDesignBand(); 
    band.setHeight(80); 
    band.addElement(jSubreport); 
    return band; 
} 

を作成するとblank.Butが個別に作品をサブレポートとしてメインレポートをcomplingし、充填した後、サブレポートが印刷されています。

主なコードの下に使用して作成された報告しました

はさえ、私はまだ新しいnet.sf.jasperreports.engine.data.JRBeanCollectionDataSource($ P {}ノート)としてdataSourceExpressionを渡すことで、その印刷を空白にして試してみました。

私は私が間違っている場合は、

答えて

1

は、デザインをコンパイル助けてください取得しておりません。

JasperReport subReport = JasperCompileManager.compileReport(subJasperDesign); 

次に、メインレポートにparamとして追加します。

parameters.put("SUB_TEMPLATE", subReport); 

jrxmlテンプレートでこのPARAMゲット:

<parameter name="SUB_TEMPLATE" class="net.sf.jasperreports.engine.JasperReport"/> 

そして、これのparamの最後にjrxml使用例:私は、Javaを使用してサブレポートを追加することができますどのように

<band height="15"> 
<subreport> 
<reportElement x="0" y="0" width="802" height="15" /> 
<dataSourceExpression><![CDATA[$F{SUB_DATASOURCE_NAME}]]></dataSourceExpression> 
<subreportExpression><![CDATA[$P{SUB_TEMPLATE}]]></subreportExpression> 
/subreport> 
</band> 
+0

を、私はに習慣はありませんレポート要素の高さと幅が実行時に決定されるため、jrxmlで任意の設定を行います。 –

+0

javaを使用してサブレポートの式として 'JasperReport subReport'を渡す方法は? –

関連する問題