I am creating jasper pdf using java. I wan to add subreports dynamically to main report.
Main reported is created using below code :
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));
//create subreport
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;
}
Then after compling and filling main report, subreport is printing as blank.But individually subreport works.
Even I have tried by passing dataSourceExpression as new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{notes}) still its printing blank.
I am not getting where I am wrong, Please help
Compile your design.
JasperReport subReport = JasperCompileManager.compileReport(subJasperDesign);
Then add it as param to your main report.
parameters.put("SUB_TEMPLATE", subReport);
Get this param in jrxml template:
<parameter name="SUB_TEMPLATE" class="net.sf.jasperreports.engine.JasperReport"/>
And finally jrxml usage example of this param:
<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>