Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to add columns to the new page in JasperReports report when exceed the width of page?
    text
    copied!<p>I create dynamically report as <em>JasperDesign</em> which every time has different number of columns. <br/> Sometimes number of columns is so much that is not possible to display on one page. I want to put this extra columns plus first two columns to the new page at the print time.</p> <p>I have tried this by <code>columnHeaderband.setSplitType(JRBand.SPLIT_TYPE_IMMEDIATE);</code></p> <p>I use <em>JasperReports 5.4.5</em> and <em>Java 1.7</em></p> <p><strong>Dose any one know how to do it?</strong></p> <pre><code>public class CarPlanDynamicReportCreator { private static JRDataSource dataSource; private static List&lt;Map&lt;String, String&gt;&gt; listOfExtractedMap; private static final Boolean EMPTY_BAND = true; private static List&lt;String&gt; fieldNameList; private static List&lt;String&gt; remarkList; public static void compile(DefaultTableModel tableModel, String title, String name, String id) throws JRException { dataSource = createReportDataSource(tableModel); JasperDesign jasperDesign = getJasperDesign(tableModel); Map&lt;String, Object&gt; parameters = retrieveParameter(title, name, id); JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource); Report report = new Report(jasperPrint); report.viewWithMaximumWindowSize(); } public static JasperDesign getJasperDesign(DefaultTableModel tableModel) throws JRException { //JasperDesign JasperDesign jasperDesign = new JasperDesign(); jasperDesign.setName("The dynamically generated report"); jasperDesign.setPageWidth(842); jasperDesign.setPageHeight(595); jasperDesign.setOrientation(JRReport.ORIENTATION_LANDSCAPE); jasperDesign.setColumnWidth(802); jasperDesign.setColumnSpacing(2); jasperDesign.setLeftMargin(20); jasperDesign.setRightMargin(20); jasperDesign.setTopMargin(20); jasperDesign.setBottomMargin(20); jasperDesign.setTitleNewPage(false); jasperDesign.setFloatColumnFooter(true); jasperDesign.setSummaryNewPage(false); jasperDesign.addStyle(JasperDesignUtil.retrieveNormalStyle()); jasperDesign.addStyle(JasperDesignUtil.retrieveBoldStyle()); jasperDesign.addStyle(JasperDesignUtil.retrieveItalicStyle()); //Parameters JasperDesignUtil.addParameters(jasperDesign, tableModel); //Fields JasperDesignUtil.addFields(jasperDesign, tableModel, fieldNameList); //Variables JasperDesignUtil.addVariables(jasperDesign, tableModel); //Page header JasperDesignUtil.addPageHeader(jasperDesign, tableModel, !EMPTY_BAND); //Column header JasperDesignUtil.addColumnHeader(jasperDesign, tableModel, !EMPTY_BAND); //Detail band JasperDesignUtil.addDetail(jasperDesign, tableModel, listOfExtractedMap, !EMPTY_BAND); //Page footer JasperDesignUtil.addPageFooter(jasperDesign, tableModel, !EMPTY_BAND); //Summary JasperDesignUtil.addSummary(jasperDesign, tableModel, remarkList, !EMPTY_BAND); return jasperDesign; } private static JRDataSource createReportDataSource(DefaultTableModel tableModel) { Map[] reportRows = initializeMapArray(tableModel); return new JRMapArrayDataSource(reportRows); } public static Map&lt;String, Object&gt; retrieveParameter(String title, String name, String id) { Map&lt;String, Object&gt; parameterMap = GenericsUtil.makeMap(); parameterMap.put("TITLE", title); parameterMap.put("NAME", patient); parameterMap.put("ID", patientId); return parameterMap; } } </code></pre> <p><em>My util class:</em></p> <pre><code>public class JasperDesignUtil { private static JRDesignBand band; private static JRDesignField field; private static JRDesignTextField textField; private static JRDesignStaticText staticText; private static JRDesignExpression expression; // add Parameters public static void addParameters(JasperDesign jasperDesign, DefaultTableModel tableModel) throws JRException { JRDesignParameter parameter = new JRDesignParameter(); parameter.setName("TITLE"); parameter.setValueClass(java.lang.String.class); JRDesignExpression expression = new JRDesignExpression(); expression.setText(""); expression.setValueClass(java.lang.String.class); parameter.setDefaultValueExpression(expression); jasperDesign.addParameter(parameter); parameter = new JRDesignParameter(); parameter.setName("NAME"); parameter.setValueClass(java.lang.String.class); expression = new JRDesignExpression(); expression.setText(""); expression.setValueClass(java.lang.String.class); parameter.setDefaultValueExpression(expression); jasperDesign.addParameter(parameter); parameter = new JRDesignParameter(); parameter.setName("ID"); parameter.setValueClass(java.lang.String.class); expression = new JRDesignExpression(); expression.setText(""); expression.setValueClass(java.lang.String.class); parameter.setDefaultValueExpression(expression); jasperDesign.addParameter(parameter); } // Add Fields public static void addFields(JasperDesign jasperDesign, DefaultTableModel tableModel, List&lt;String&gt; fieldsName) throws JRException { if (!fieldsName.isEmpty()) { for (String name : fieldsName) { field = new JRDesignField(); field.setName(name.replaceAll("\n", " ")); field.setValueClass(String.class); jasperDesign.addField(field); } } } // Add Variables public static void addVariables(JasperDesign jasperDesign, DefaultTableModel tableModel) throws JRException { variable = new JRDesignVariable(); variable.setName("COLUMNS"); variable.setValueClass(java.lang.Integer.class); variable.setCalculation(JRVariable.CALCULATION_COUNT); expression = new JRDesignExpression(); expression.setValueClass(java.lang.Integer.class); expression.setText("$V{COLUMN_COUNT}+1"); variable.setInitialValueExpression(expression); variable.setResetType(JRVariable.RESET_TYPE_PAGE); jasperDesign.addVariable(variable); } // Add ColumnHeader public static void addColumnHeader(JasperDesign jasperDesign, DefaultTableModel tableModel, Boolean emptyBand) throws JRException { if (emptyBand) jasperDesign.setColumnHeader(retrieveEmptyBand(jasperDesign, 5)); else { band = new JRDesignBand(); band.setHeight(25); band.setSplitType(JRBand.SPLIT_TYPE_STRETCH); int headerPosition = 0; int columnCounter = 0; for (JRField field : jasperDesign.getFields()) { String fieldValue = field.getName(); String[] values = fieldValue.split(" "); if (values.length != 1) { String date = values[0]; String time = values[1]; fieldValue = "&lt;html&gt;".concat(date).concat("&lt;BR&gt;").concat(time).concat("&lt;/html&gt;"); } else fieldValue = "&lt;html&gt;".concat(fieldValue).concat("&lt;/html&gt;"); int fieldLength = fieldValue.length(); headerPosition = columnCounter == 0 ? headerPosition : (columnCounter == 1 ? headerPosition + 100 : headerPosition + fieldLength); JRDesignStaticText headerStaticText = new JRDesignStaticText(); headerStaticText.setX(headerPosition); headerStaticText.setY(0); headerStaticText.setWidth(columnCounter == 0 ? 100 : (columnCounter == 1 ? 34 : fieldLength + 7)); headerStaticText.setHeight(band.getHeight()); headerStaticText.setMode(JRElement.MODE_TRANSPARENT); headerStaticText.setText(fieldValue); headerStaticText.setPrintRepeatedValues(true); headerStaticText.setPositionType(JRElement.POSITION_TYPE_FIX_RELATIVE_TO_TOP); headerStaticText.setFontSize(8); headerStaticText.setBold(true); headerStaticText.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_CENTER); headerStaticText.setVerticalAlignment(JRAlignment.VERTICAL_ALIGN_MIDDLE); headerStaticText.setMarkup("html"); headerStaticText.getLineBox().setLeftPadding(2); headerStaticText.getLineBox().setRightPadding(2); columnCounter++; band.addElement(headerStaticText); } jasperDesign.setColumnHeader(band); } } // Add Detail public static void addDetail(JasperDesign jasperDesign, DefaultTableModel tableModel, List&lt;Map&lt;String, String&gt;&gt; maps, Boolean emptyBand) throws JRException { if (emptyBand) ((JRDesignSection) jasperDesign.getDetailSection()).addBand(retrieveEmptyBand(jasperDesign, 5)); else { band = new JRDesignBand(); band.setHeight(16); int position = 0; Map&lt;String, String&gt; headerMap = maps.get(0); int columnCounter = 0; for (Map.Entry&lt;String, String&gt; entry : headerMap.entrySet()) { //creating cell field on the detail band String cellValue = "$F{".concat(entry.getKey().replaceAll("\n", " ")).concat("}"); int cellLength = cellValue.length(); position = columnCounter == 0 ? position : (columnCounter == 1 ? position + 100 : position + 27); JRDesignTextField cellTextField = new JRDesignTextField(); cellTextField.setX(position); cellTextField.setY(0); cellTextField.setWidth(columnCounter == 0 ? 100 : (columnCounter == 1 ? 34 : 27)); cellTextField.setHeight(band.getHeight()); cellTextField.setPrintRepeatedValues(true); cellTextField.setPositionType(JRElement.POSITION_TYPE_FIX_RELATIVE_TO_TOP); cellTextField.setFontSize(8); cellTextField.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_CENTER); cellTextField.setHorizontalAlignment(columnCounter == 0 ? JRAlignment.HORIZONTAL_ALIGN_LEFT : JRAlignment.HORIZONTAL_ALIGN_CENTER); cellTextField.setVerticalAlignment(JRAlignment.VERTICAL_ALIGN_MIDDLE); cellTextField.setStretchType(JRElement.STRETCH_TYPE_RELATIVE_TO_TALLEST_OBJECT); cellTextField.setStretchWithOverflow(true); cellTextField.setPositionType(JRElement.POSITION_TYPE_FLOAT); JRDesignExpression cellExpression = new JRDesignExpression(); cellExpression.setValueClass(String.class); cellExpression.setText(cellValue); cellTextField.setExpression(cellExpression); if (columnCounter == 0) cellTextField.getLineBox().getRightPen().setLineWidth(1); if (columnCounter != 0) { cellTextField.setBold(true); if (columnCounter % 2 != 0) { cellTextField.setBackcolor(UIWebLook.secondary_4); cellTextField.setMode(JRElement.MODE_OPAQUE); } } band.addElement(cellTextField); columnCounter++; } band.addElement(retrieveLine(0, 0, jasperDesign.getColumnWidth(), 0, JRGraphicElement.FILL_SOLID)); ((JRDesignSection) jasperDesign.getDetailSection()).addBand(band); } } private static JRDesignBand retrieveEmptyBand(JasperDesign jasperDesign, int height) { band = new JRDesignBand(); band.setHeight(height); band.addElement(retrieveLine(0, 0, jasperDesign.getColumnWidth(), 0, JRGraphicElement.FILL_SOLID)); return band; } public static JRDesignElement retrieveLine(int positionX, int positionY, int width, int height, @Nullable Byte fill) { JRDesignLine line = new JRDesignLine(); line.setX(positionX); line.setY(positionY); line.setWidth(width); line.setHeight(height); line.setBackcolor(Color.white); line.setForecolor(Color.black); line.setPositionType(JRElement.POSITION_TYPE_FLOAT); line.setFill(fill == null ? JRGraphicElement.PEN_NONE : fill); return line; } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload