diff --git a/jasperreports/demo/samples/list/reports/ListReportWithFill.jrxml b/jasperreports/demo/samples/list/reports/ListReportWithFill.jrxml
new file mode 100755
index 0000000000..e8feb64bf5
--- /dev/null
+++ b/jasperreports/demo/samples/list/reports/ListReportWithFill.jrxml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jasperreports/demo/samples/table/reports/TableReportRowsToFill.jrxml b/jasperreports/demo/samples/table/reports/TableReportRowsToFill.jrxml
new file mode 100755
index 0000000000..9cb098ec56
--- /dev/null
+++ b/jasperreports/demo/samples/table/reports/TableReportRowsToFill.jrxml
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jasperreports/demo/samples/table/src/TableApp.java b/jasperreports/demo/samples/table/src/TableApp.java
index 46ec72723c..fcf2c2ea0e 100755
--- a/jasperreports/demo/samples/table/src/TableApp.java
+++ b/jasperreports/demo/samples/table/src/TableApp.java
@@ -89,11 +89,19 @@ public void test() throws JRException
*/
public void fill() throws JRException
{
- long start = System.currentTimeMillis();
- Map params = new HashMap();
- params.put("TableDataSource", new JREmptyDataSource(50));
- JasperFillManager.fillReportToFile("build/reports/TableReport.jasper", params);
- System.err.println("Filling time : " + (System.currentTimeMillis() - start));
+ File[] files = getFiles(new File("build/reports"), "jasper");
+ for(int i = 0; i < files.length; i++)
+ {
+ File reportFile = files[i];
+ long start = System.currentTimeMillis();
+ Map params = new HashMap();
+ params.put("TableDataSource", new JREmptyDataSource(50));
+ JasperFillManager.fillReportToFile(
+ reportFile.getAbsolutePath(),
+ params
+ );
+ System.err.println("Report : " + reportFile + ". Filling time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -102,9 +110,17 @@ public void fill() throws JRException
*/
public void print() throws JRException
{
- long start = System.currentTimeMillis();
- JasperPrintManager.printReport("build/reports/TableReport.jrprint", true);
- System.err.println("Printing time : " + (System.currentTimeMillis() - start));
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ File reportFile = files[i];
+ long start = System.currentTimeMillis();
+ JasperPrintManager.printReport(
+ reportFile.getAbsolutePath(),
+ true
+ );
+ System.err.println("Report : " + reportFile + ". Printing time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -113,9 +129,16 @@ public void print() throws JRException
*/
public void pdf() throws JRException
{
- long start = System.currentTimeMillis();
- JasperExportManager.exportReportToPdfFile("build/reports/TableReport.jrprint");
- System.err.println("PDF creation time : " + (System.currentTimeMillis() - start));
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ File reportFile = files[i];
+ long start = System.currentTimeMillis();
+ JasperExportManager.exportReportToPdfFile(
+ reportFile.getAbsolutePath()
+ );
+ System.err.println("Report : " + reportFile + ". PDF creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -124,21 +147,25 @@ public void pdf() throws JRException
*/
public void rtf() throws JRException
{
- long start = System.currentTimeMillis();
- File sourceFile = new File("build/reports/TableReport.jrprint");
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ long start = System.currentTimeMillis();
+ File sourceFile = files[i];
- JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
+ JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
- File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".rtf");
+ File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".rtf");
- JRRtfExporter exporter = new JRRtfExporter();
+ JRRtfExporter exporter = new JRRtfExporter();
- exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
- exporter.setExporterOutput(new SimpleWriterExporterOutput(destFile));
+ exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+ exporter.setExporterOutput(new SimpleWriterExporterOutput(destFile));
- exporter.exportReport();
+ exporter.exportReport();
- System.err.println("RTF creation time : " + (System.currentTimeMillis() - start));
+ System.err.println("Report : " + sourceFile + ". RTF creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -147,9 +174,17 @@ public void rtf() throws JRException
*/
public void xml() throws JRException
{
- long start = System.currentTimeMillis();
- JasperExportManager.exportReportToXmlFile("build/reports/TableReport.jrprint", false);
- System.err.println("XML creation time : " + (System.currentTimeMillis() - start));
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ File reportFile = files[i];
+ long start = System.currentTimeMillis();
+ JasperExportManager.exportReportToXmlFile(
+ reportFile.getAbsolutePath(),
+ false
+ );
+ System.err.println("Report : " + reportFile + ". XML creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -158,9 +193,17 @@ public void xml() throws JRException
*/
public void xmlEmbed() throws JRException
{
- long start = System.currentTimeMillis();
- JasperExportManager.exportReportToXmlFile("build/reports/TableReport.jrprint", true);
- System.err.println("XML creation time : " + (System.currentTimeMillis() - start));
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ File reportFile = files[i];
+ long start = System.currentTimeMillis();
+ JasperExportManager.exportReportToXmlFile(
+ reportFile.getAbsolutePath(),
+ true
+ );
+ System.err.println("Report : " + reportFile + ". XML creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -169,9 +212,16 @@ public void xmlEmbed() throws JRException
*/
public void html() throws JRException
{
- long start = System.currentTimeMillis();
- JasperExportManager.exportReportToHtmlFile("build/reports/TableReport.jrprint");
- System.err.println("HTML creation time : " + (System.currentTimeMillis() - start));
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ File reportFile = files[i];
+ long start = System.currentTimeMillis();
+ JasperExportManager.exportReportToHtmlFile(
+ reportFile.getAbsolutePath()
+ );
+ System.err.println("Report : " + reportFile + ". HTML creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -180,24 +230,28 @@ public void html() throws JRException
*/
public void xls() throws JRException
{
- long start = System.currentTimeMillis();
- File sourceFile = new File("build/reports/TableReport.jrprint");
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ long start = System.currentTimeMillis();
+ File sourceFile = files[i];
- JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
+ JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
- File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".xls");
+ File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".xls");
- JRXlsExporter exporter = new JRXlsExporter();
+ JRXlsExporter exporter = new JRXlsExporter();
- exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
- exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
- SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
- configuration.setOnePagePerSheet(false);
- exporter.setConfiguration(configuration);
+ exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+ exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
+ SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
+ configuration.setOnePagePerSheet(false);
+ exporter.setConfiguration(configuration);
- exporter.exportReport();
+ exporter.exportReport();
- System.err.println("XLS creation time : " + (System.currentTimeMillis() - start));
+ System.err.println("Report : " + sourceFile + ". XLS creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -206,21 +260,25 @@ public void xls() throws JRException
*/
public void csv() throws JRException
{
- long start = System.currentTimeMillis();
- File sourceFile = new File("build/reports/TableReport.jrprint");
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ long start = System.currentTimeMillis();
+ File sourceFile = files[i];
- JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
+ JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
- File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".csv");
+ File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".csv");
- JRCsvExporter exporter = new JRCsvExporter();
+ JRCsvExporter exporter = new JRCsvExporter();
- exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
- exporter.setExporterOutput(new SimpleWriterExporterOutput(destFile));
+ exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+ exporter.setExporterOutput(new SimpleWriterExporterOutput(destFile));
- exporter.exportReport();
+ exporter.exportReport();
- System.err.println("CSV creation time : " + (System.currentTimeMillis() - start));
+ System.err.println("Report : " + sourceFile + ". CSV creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -229,21 +287,25 @@ public void csv() throws JRException
*/
public void odt() throws JRException
{
- long start = System.currentTimeMillis();
- File sourceFile = new File("build/reports/TableReport.jrprint");
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ long start = System.currentTimeMillis();
+ File sourceFile = files[i];
- JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
+ JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
- File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".odt");
+ File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".odt");
- JROdtExporter exporter = new JROdtExporter();
+ JROdtExporter exporter = new JROdtExporter();
- exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
- exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
+ exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+ exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
- exporter.exportReport();
+ exporter.exportReport();
- System.err.println("ODT creation time : " + (System.currentTimeMillis() - start));
+ System.err.println("Report : " + sourceFile + ". ODT creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -252,24 +314,28 @@ public void odt() throws JRException
*/
public void ods() throws JRException
{
- long start = System.currentTimeMillis();
- File sourceFile = new File("build/reports/TableReport.jrprint");
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ long start = System.currentTimeMillis();
+ File sourceFile = files[i];
- JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
+ JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
- File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".ods");
+ File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".ods");
- JROdsExporter exporter = new JROdsExporter();
+ JROdsExporter exporter = new JROdsExporter();
- exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
- exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
- SimpleOdsReportConfiguration configuration = new SimpleOdsReportConfiguration();
- configuration.setOnePagePerSheet(true);
- exporter.setConfiguration(configuration);
+ exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+ exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
+ SimpleOdsReportConfiguration configuration = new SimpleOdsReportConfiguration();
+ configuration.setOnePagePerSheet(true);
+ exporter.setConfiguration(configuration);
- exporter.exportReport();
+ exporter.exportReport();
- System.err.println("ODS creation time : " + (System.currentTimeMillis() - start));
+ System.err.println("Report : " + sourceFile + ". ODT creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -278,21 +344,25 @@ public void ods() throws JRException
*/
public void docx() throws JRException
{
- long start = System.currentTimeMillis();
- File sourceFile = new File("build/reports/TableReport.jrprint");
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ long start = System.currentTimeMillis();
+ File sourceFile = files[i];
- JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
+ JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
- File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".docx");
+ File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".docx");
- JRDocxExporter exporter = new JRDocxExporter();
+ JRDocxExporter exporter = new JRDocxExporter();
- exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
- exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
+ exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+ exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
- exporter.exportReport();
+ exporter.exportReport();
- System.err.println("DOCX creation time : " + (System.currentTimeMillis() - start));
+ System.err.println("Report : " + sourceFile + ". DOCX creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -301,24 +371,28 @@ public void docx() throws JRException
*/
public void xlsx() throws JRException
{
- long start = System.currentTimeMillis();
- File sourceFile = new File("build/reports/TableReport.jrprint");
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ long start = System.currentTimeMillis();
+ File sourceFile = files[i];
- JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
+ JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
- File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".xlsx");
+ File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".xlsx");
- JRXlsxExporter exporter = new JRXlsxExporter();
+ JRXlsxExporter exporter = new JRXlsxExporter();
- exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
- exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
- SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
- configuration.setOnePagePerSheet(false);
- exporter.setConfiguration(configuration);
+ exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+ exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
+ SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
+ configuration.setOnePagePerSheet(true);
+ exporter.setConfiguration(configuration);
- exporter.exportReport();
+ exporter.exportReport();
- System.err.println("XLSX creation time : " + (System.currentTimeMillis() - start));
+ System.err.println("Report : " + sourceFile + ". XLSX creation time : " + (System.currentTimeMillis() - start));
+ }
}
@@ -327,21 +401,25 @@ public void xlsx() throws JRException
*/
public void pptx() throws JRException
{
- long start = System.currentTimeMillis();
- File sourceFile = new File("build/reports/TableReport.jrprint");
+ File[] files = getFiles(new File("build/reports"), "jrprint");
+ for(int i = 0; i < files.length; i++)
+ {
+ long start = System.currentTimeMillis();
+ File sourceFile = files[i];
- JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
+ JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
- File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".pptx");
+ File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".pptx");
- JRPptxExporter exporter = new JRPptxExporter();
+ JRPptxExporter exporter = new JRPptxExporter();
- exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
- exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
-
- exporter.exportReport();
+ exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+ exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
+
+ exporter.exportReport();
- System.err.println("PPTX creation time : " + (System.currentTimeMillis() - start));
+ System.err.println("Report : " + sourceFile + ". PPTX creation time : " + (System.currentTimeMillis() - start));
+ }
}
diff --git a/jasperreports/src/net/sf/jasperreports/components/list/BaseFillList.java b/jasperreports/src/net/sf/jasperreports/components/list/BaseFillList.java
index 09f49d904f..f81963b6ba 100644
--- a/jasperreports/src/net/sf/jasperreports/components/list/BaseFillList.java
+++ b/jasperreports/src/net/sf/jasperreports/components/list/BaseFillList.java
@@ -62,6 +62,7 @@ public abstract class BaseFillList extends BaseFillComponent implements JRFillCl
protected JRTemplatePrintFrame printFrame;
protected boolean filling;
protected boolean fillStarted;
+ protected int counter;
public BaseFillList(ListComponent component, JRFillObjectFactory factory) throws JRException
{
@@ -111,6 +112,7 @@ public void evaluate(byte evaluation) throws JRException
filling = false;
fillStarted = false;
+ counter = 0;
datasetRun.evaluate(evaluation);
}
diff --git a/jasperreports/src/net/sf/jasperreports/components/list/ListComponent.java b/jasperreports/src/net/sf/jasperreports/components/list/ListComponent.java
index c398d6bf25..2cfb17ffb3 100644
--- a/jasperreports/src/net/sf/jasperreports/components/list/ListComponent.java
+++ b/jasperreports/src/net/sf/jasperreports/components/list/ListComponent.java
@@ -27,6 +27,7 @@
import net.sf.jasperreports.engine.DatasetRunHolder;
import net.sf.jasperreports.engine.JRCloneable;
import net.sf.jasperreports.engine.JRDatasetRun;
+import net.sf.jasperreports.engine.JRPropertiesUtil;
import net.sf.jasperreports.engine.JRVisitable;
import net.sf.jasperreports.engine.component.Component;
import net.sf.jasperreports.engine.type.PrintOrderEnum;
@@ -102,4 +103,6 @@ public interface ListComponent extends Component, JRCloneable, JRVisitable, Data
*/
public Boolean getIgnoreWidth();
-}
\ No newline at end of file
+ public static final String PROPERTY_ROWS_TO_FILL = JRPropertiesUtil.PROPERTY_PREFIX + "components.list.rows.to.fill";
+
+}
diff --git a/jasperreports/src/net/sf/jasperreports/components/list/VerticalFillList.java b/jasperreports/src/net/sf/jasperreports/components/list/VerticalFillList.java
index f160107a81..75fde8b3d4 100644
--- a/jasperreports/src/net/sf/jasperreports/components/list/VerticalFillList.java
+++ b/jasperreports/src/net/sf/jasperreports/components/list/VerticalFillList.java
@@ -24,6 +24,8 @@
package net.sf.jasperreports.components.list;
import net.sf.jasperreports.engine.JRException;
+import net.sf.jasperreports.engine.JRPropertiesMap;
+import net.sf.jasperreports.engine.JRPropertiesUtil;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.component.FillPrepareResult;
import net.sf.jasperreports.engine.fill.JRFillCloneFactory;
@@ -64,6 +66,17 @@ protected VerticalFillList(VerticalFillList list, JRFillCloneFactory factory)
@Override
public FillPrepareResult prepare(int availableHeight)
{
+ int rowsToFill = 0;
+ try
+ {
+ JRPropertiesMap propMap = fillContext.getComponentElement().getPropertiesMap();
+ JRPropertiesUtil util = JRPropertiesUtil.getInstance(fillContext.getFiller().getJasperReportsContext());
+ rowsToFill = util.getIntegerProperty(propMap, ListComponent.PROPERTY_ROWS_TO_FILL, 0);
+ }
+ catch (NumberFormatException e)
+ {
+ }
+
createPrintFrame();
try
{
@@ -109,6 +122,12 @@ public FillPrepareResult prepare(int availableHeight)
listContents.evaluateContents();
overflow = fillContents(availableHeight);
+ counter++;
+ }
+ while(!overflow && counter < rowsToFill)
+ {
+ overflow = fillContents(availableHeight);
+ counter++;
}
if (overflow)
diff --git a/jasperreports/src/net/sf/jasperreports/components/table/fill/TableReport.java b/jasperreports/src/net/sf/jasperreports/components/table/fill/TableReport.java
index 1b7504e993..b607b78d57 100644
--- a/jasperreports/src/net/sf/jasperreports/components/table/fill/TableReport.java
+++ b/jasperreports/src/net/sf/jasperreports/components/table/fill/TableReport.java
@@ -344,6 +344,14 @@ public class TableReport implements JRReport
)
public static final String PROPERTY_TABLE_NAME = JRPropertiesUtil.PROPERTY_PREFIX + "components.table.name";
+ @Property(
+ category = PropertyConstants.CATEGORY_TABLE,
+ scopes = {PropertyScope.COMPONENT},
+ scopeQualifications = {METADATA_KEY_QUALIFICATION},
+ sinceVersion = PropertyConstants.VERSION_6_8_0
+ )
+ public static final String PROPERTY_ROWS_TO_FILL = JRPropertiesUtil.PROPERTY_PREFIX + "components.table.rows.to.fill";
+
protected static final String SUMMARY_GROUP_NAME = "__SummaryGroup";
@@ -373,6 +381,7 @@ public class TableReport implements JRReport
private final JRPropertiesUtil propertiesUtil;
private String tableName;
+ private String rowsToFill;
private boolean isInteractiveTable;
private boolean hasFloatingHeader;
private boolean isGeneratePdfTags;
@@ -397,6 +406,8 @@ public TableReport(
this.tableName = JRPropertiesUtil.getOwnProperty(fillContext.getComponentElement(), PROPERTY_TABLE_NAME);
+ this.rowsToFill = JRPropertiesUtil.getOwnProperty(fillContext.getComponentElement(), PROPERTY_ROWS_TO_FILL);
+
this.propertiesUtil = JRPropertiesUtil.getInstance(fillContext.getFiller().getJasperReportsContext());
// begin: table interactivity
diff --git a/jasperreports/src/net/sf/jasperreports/engine/JRParameter.java b/jasperreports/src/net/sf/jasperreports/engine/JRParameter.java
index 9628eb3497..44cb5bc49c 100644
--- a/jasperreports/src/net/sf/jasperreports/engine/JRParameter.java
+++ b/jasperreports/src/net/sf/jasperreports/engine/JRParameter.java
@@ -313,6 +313,13 @@ public interface JRParameter extends JRPropertiesHolder, JRCloneable
*/
public static final String FILTER = "FILTER";
+ /**
+ * A int of number of rows to fill report/list/table. Empty row insertion will stop when there is a page break.
+ * That is, specifying a number larger that the number of rows that can fit in the page will fill rows till the end of
+ * page.
+ */
+ public static final String ROWS_TO_FILL = "ROWS_TO_FILL";
+
/**
*
*/
diff --git a/jasperreports/src/net/sf/jasperreports/engine/fill/BaseReportFiller.java b/jasperreports/src/net/sf/jasperreports/engine/fill/BaseReportFiller.java
index 948e683e8b..06c1678862 100644
--- a/jasperreports/src/net/sf/jasperreports/engine/fill/BaseReportFiller.java
+++ b/jasperreports/src/net/sf/jasperreports/engine/fill/BaseReportFiller.java
@@ -403,6 +403,13 @@ protected void setVirtualPageSize(Map parameterValues)
@Override
@continuable
public JasperPrint fill(Map parameterValues, Connection conn) throws JRException
+ {
+ return fill(parameterValues, conn, 0);
+ }
+
+ @Override
+ @continuable
+ public JasperPrint fill(Map parameterValues, Connection conn, int rowsToFill) throws JRException
{
if (parameterValues == null)
{
@@ -411,7 +418,7 @@ public JasperPrint fill(Map parameterValues, Connection conn) thr
setConnectionParameterValue(parameterValues, conn);
- return fill(parameterValues);
+ return fill(parameterValues, rowsToFill);
}
protected void setConnectionParameterValue(Map parameterValues, Connection conn)
@@ -422,6 +429,13 @@ protected void setConnectionParameterValue(Map parameterValues, C
@Override
@continuable
public JasperPrint fill(Map parameterValues, JRDataSource ds) throws JRException
+ {
+ return fill(parameterValues, ds, 0);
+ }
+
+ @Override
+ @continuable
+ public JasperPrint fill(Map parameterValues, JRDataSource ds, int rowsToFill) throws JRException
{
if (parameterValues == null)
{
@@ -430,7 +444,7 @@ public JasperPrint fill(Map parameterValues, JRDataSource ds) thr
setDatasourceParameterValue(parameterValues, ds);
- return fill(parameterValues);
+ return fill(parameterValues, rowsToFill);
}
protected void setDatasourceParameterValue(Map parameterValues, JRDataSource ds)
@@ -820,4 +834,4 @@ public int getUsedPageWidth()
return usedPageWidth;
}
-}
\ No newline at end of file
+}
diff --git a/jasperreports/src/net/sf/jasperreports/engine/fill/JRBaseFiller.java b/jasperreports/src/net/sf/jasperreports/engine/fill/JRBaseFiller.java
index b8a4a47845..5981b1657b 100644
--- a/jasperreports/src/net/sf/jasperreports/engine/fill/JRBaseFiller.java
+++ b/jasperreports/src/net/sf/jasperreports/engine/fill/JRBaseFiller.java
@@ -72,6 +72,7 @@
import net.sf.jasperreports.engine.JasperReportsContext;
import net.sf.jasperreports.engine.base.JRBasePrintPage;
import net.sf.jasperreports.engine.base.JRVirtualPrintPage;
+import net.sf.jasperreports.engine.fill.JRTemplatePrintFrame;
import net.sf.jasperreports.engine.type.BandTypeEnum;
import net.sf.jasperreports.engine.type.EvaluationTimeEnum;
import net.sf.jasperreports.engine.type.OrientationEnum;
@@ -261,6 +262,8 @@ public abstract class JRBaseFiller extends BaseReportFiller implements JRDefault
protected int usedPageHeight = 0;
+ protected boolean fillingEmptyRows = false;
+
/**
*
*/
@@ -543,10 +546,16 @@ protected JRPrintPage getCurrentPage()
*/
protected abstract void setPageHeight(int pageHeight);
-
@Override
@continuable
public JasperPrint fill(Map parameterValues) throws JRException
+ {
+ return fill(parameterValues, 0);
+ }
+
+ @Override
+ @continuable
+ public JasperPrint fill(Map parameterValues, int rowsToFill) throws JRException
{
if (parameterValues == null)
{
@@ -612,7 +621,7 @@ public JasperPrint fill(Map parameterValues) throws JRException
mainDataset.start();
/* */
- fillReport();
+ fillReport(rowsToFill);
mainDataset.evaluateProperties(PropertyEvaluationTimeEnum.REPORT);
@@ -977,6 +986,9 @@ private void abortSubfillers()
@continuable
protected abstract void fillReport() throws JRException;
+ @continuable
+ protected abstract void fillReport(int rowsToFill) throws JRException;
+
@Override
protected void ignorePaginationSet(Map parameterValues)
{
@@ -1314,6 +1326,10 @@ protected void fillBand(JRPrintBand band)
element.setX(element.getX() + offsetX);
element.setY(element.getY() + offsetY);
elements.add(element);
+ if (fillingEmptyRows)
+ {
+ setRowCellToEmpty(element);
+ }
}
Collections.sort(elements, new JRYXComparator());//FIXME make singleton comparator; same for older comparator
for (JRPrintElement element : elements)
@@ -1331,10 +1347,29 @@ protected void fillBand(JRPrintBand band)
element.setY(element.getY() + offsetY);
printPage.addElement(element);
recordUsedWidth(element);
+ if (fillingEmptyRows)
+ {
+ setRowCellToEmpty(element);
+ }
}
}
}
+ private void setRowCellToEmpty(JRPrintElement element) {
+ if (element instanceof JRTemplatePrintText)
+ {
+ ((JRTemplatePrintText)element).setText("");
+ }
+ else if (element instanceof JRTemplatePrintFrame)
+ {
+ List list = ((JRTemplatePrintFrame)element).getElements();
+ for (JRPrintElement item : list)
+ {
+ setRowCellToEmpty(item);
+ }
+ }
+ }
+
protected void recordUsedWidth(JRPrintElement element)
{
recordUsedPageWidth(element.getX() + element.getWidth() + rightMargin);
diff --git a/jasperreports/src/net/sf/jasperreports/engine/fill/JRFillSubreport.java b/jasperreports/src/net/sf/jasperreports/engine/fill/JRFillSubreport.java
index 36473b7210..8c932668e1 100644
--- a/jasperreports/src/net/sf/jasperreports/engine/fill/JRFillSubreport.java
+++ b/jasperreports/src/net/sf/jasperreports/engine/fill/JRFillSubreport.java
@@ -41,6 +41,8 @@
import net.sf.jasperreports.annotations.properties.Property;
import net.sf.jasperreports.annotations.properties.PropertyScope;
+import net.sf.jasperreports.components.table.fill.TableReport;
+import net.sf.jasperreports.components.table.fill.TableSubreport;
import net.sf.jasperreports.data.cache.DataCacheHandler;
import net.sf.jasperreports.engine.CommonReturnValue;
import net.sf.jasperreports.engine.JRDataSource;
@@ -128,6 +130,8 @@ public class JRFillSubreport extends JRFillElement implements JRSubreport
private Map loadedEvaluators;
+ private int rowsToFill = 0;
+
/**
* Values to be copied from the subreport.
*/
@@ -189,6 +193,20 @@ protected JRFillSubreport(
this.defaultGenerateRectangle = filler.getPropertiesUtil().getProperty(
PROPERTY_SUBREPORT_GENERATE_RECTANGLE, subreport, filler.getMainDataset());
this.dynamicGenerateRectangle = hasDynamicProperty(PROPERTY_SUBREPORT_GENERATE_RECTANGLE);
+
+ if (subreport instanceof TableSubreport)
+ {
+ String strRowsToFill = ((TableSubreport)subreport).getPropertiesMap().getProperty(TableReport.PROPERTY_ROWS_TO_FILL);
+ if (strRowsToFill != null) {
+ try
+ {
+ rowsToFill = Integer.parseInt(strRowsToFill);
+ }
+ catch(NumberFormatException e)
+ {
+ }
+ }
+ }
}
protected JRFillSubreport(JRFillSubreport subreport, JRFillCloneFactory factory)
@@ -811,15 +829,15 @@ protected void fillSubreport() throws JRException
{
if (getConnectionExpression() != null)
{
- subreportFiller.fill(parameterValues, connection);
+ subreportFiller.fill(parameterValues, connection, rowsToFill);
}
else if (getDataSourceExpression() != null)
{
- subreportFiller.fill(parameterValues, dataSource);
+ subreportFiller.fill(parameterValues, dataSource, rowsToFill);
}
else
{
- subreportFiller.fill(parameterValues);
+ subreportFiller.fill(parameterValues, rowsToFill);
}
}
diff --git a/jasperreports/src/net/sf/jasperreports/engine/fill/JRFiller.java b/jasperreports/src/net/sf/jasperreports/engine/fill/JRFiller.java
index c115353d63..13751a6cec 100644
--- a/jasperreports/src/net/sf/jasperreports/engine/fill/JRFiller.java
+++ b/jasperreports/src/net/sf/jasperreports/engine/fill/JRFiller.java
@@ -90,6 +90,21 @@ public final class JRFiller
)
public static final String PROPERTY_DEFAULT_TIMEZONE = JRPropertiesUtil.PROPERTY_PREFIX + "default.timezone";
+ /**
+ * Number of rows to fill the report/list/table rows with.
+ * It will stop filling rows if there is a page break. That is, to fill to the end of the report, specify a large value.
+ *
+ * @see JRParameter#ROWS_TO_FILL
+ */
+ @Property(
+ category = PropertyConstants.CATEGORY_FILL,
+ valueType = Locale.class,
+ defaultValue = "0",
+ scopes = {PropertyScope.CONTEXT, PropertyScope.REPORT},
+ sinceVersion = PropertyConstants.VERSION_6_8_0
+ )
+ public static final String PROPERTY_ROWS_TO_FILL = JRPropertiesUtil.PROPERTY_PREFIX + "rows.to.fill";
+
/**
*
*/
@@ -142,8 +157,15 @@ public static JasperPrint fill(
JRDataSource dataSource
) throws JRException
{
+ int rowsToFill = 0;
+ try
+ {
+ rowsToFill = JRPropertiesUtil.getInstance(jasperReportsContext).getIntegerProperty(jasperReport, JRFiller.PROPERTY_ROWS_TO_FILL, 0);
+ }
+ catch (NumberFormatException e) {
+ }
return fill(jasperReportsContext, SimpleJasperReportSource.from(jasperReport),
- parameters, dataSource);
+ parameters, dataSource, rowsToFill);
}
public static JasperPrint fill(
@@ -152,6 +174,18 @@ public static JasperPrint fill(
Map parameters,
JRDataSource dataSource
) throws JRException
+ {
+ return fill(jasperReportsContext, reportSource,
+ parameters, dataSource, 0);
+ }
+
+ public static JasperPrint fill(
+ JasperReportsContext jasperReportsContext,
+ JasperReportSource reportSource,
+ Map parameters,
+ JRDataSource dataSource,
+ int rowsToFill
+ ) throws JRException
{
ReportFiller filler = createReportFiller(jasperReportsContext, reportSource);
@@ -159,7 +193,7 @@ public static JasperPrint fill(
try
{
- jasperPrint = filler.fill(parameters, dataSource);
+ jasperPrint = filler.fill(parameters, dataSource, rowsToFill);
}
catch(JRFillInterruptedException e)
{
diff --git a/jasperreports/src/net/sf/jasperreports/engine/fill/JRHorizontalFiller.java b/jasperreports/src/net/sf/jasperreports/engine/fill/JRHorizontalFiller.java
index e89e4eaff5..699ff83731 100644
--- a/jasperreports/src/net/sf/jasperreports/engine/fill/JRHorizontalFiller.java
+++ b/jasperreports/src/net/sf/jasperreports/engine/fill/JRHorizontalFiller.java
@@ -104,10 +104,16 @@ protected void setPageHeight(int pageHeight)
}
}
-
@Override
@continuable
protected synchronized void fillReport() throws JRException
+ {
+ fillReport(0);
+ }
+
+ @Override
+ @continuable
+ protected synchronized void fillReport(int rowsToFill) throws JRException
{
setLastPageFooter(false);
diff --git a/jasperreports/src/net/sf/jasperreports/engine/fill/JRVerticalFiller.java b/jasperreports/src/net/sf/jasperreports/engine/fill/JRVerticalFiller.java
index 75a76fe455..e107c3623a 100644
--- a/jasperreports/src/net/sf/jasperreports/engine/fill/JRVerticalFiller.java
+++ b/jasperreports/src/net/sf/jasperreports/engine/fill/JRVerticalFiller.java
@@ -30,6 +30,7 @@
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExpression;
import net.sf.jasperreports.engine.JRGroup;
+import net.sf.jasperreports.engine.JRPropertiesUtil;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperReportsContext;
@@ -98,10 +99,16 @@ protected void setPageHeight(int pageHeight)
}
}
-
@Override
@continuable
protected synchronized void fillReport() throws JRException
+ {
+ fillReport(0);
+ }
+
+ @Override
+ @continuable
+ protected synchronized void fillReport(int rowsToFill) throws JRException
{
setLastPageFooter(false);
@@ -113,6 +120,16 @@ protected synchronized void fillReport() throws JRException
{
fillReportContent();
}
+ if (rowsToFill > 0)
+ {
+ int curRow = (Integer)getVariable("PAGE_COUNT").getValue();
+ fillingEmptyRows = true;
+ for (int row = 0; row < (rowsToFill - curRow); row++)
+ {
+ fillReportContent();
+ }
+ }
+ fillingEmptyRows = false;
fillReportEnd();
}
@@ -775,6 +792,10 @@ private void fillDetail() throws JRException
detailBand.getBreakHeight() > columnFooterOffsetY - offsetY
)
{
+ if (fillingEmptyRows)
+ {
+ return;
+ }
fillColumnBreak(
isCrtRecordOnColumn ? JRExpression.EVALUATION_DEFAULT : JRExpression.EVALUATION_OLD,
JRExpression.EVALUATION_DEFAULT
diff --git a/jasperreports/src/net/sf/jasperreports/engine/fill/PartReportFiller.java b/jasperreports/src/net/sf/jasperreports/engine/fill/PartReportFiller.java
index ef0e04be40..1f7fe093db 100644
--- a/jasperreports/src/net/sf/jasperreports/engine/fill/PartReportFiller.java
+++ b/jasperreports/src/net/sf/jasperreports/engine/fill/PartReportFiller.java
@@ -157,6 +157,12 @@ protected JRFillObjectFactory initFillFactory()
@Override
public JasperPrint fill(Map parameterValues) throws JRException
+ {
+ return fill(parameterValues, 0);
+ }
+
+ @Override
+ public JasperPrint fill(Map parameterValues, int rowsToFill) throws JRException
{
//FIXMEBOOK copied from JRBaseFiller
if (parameterValues == null)
diff --git a/jasperreports/src/net/sf/jasperreports/engine/fill/ReportFiller.java b/jasperreports/src/net/sf/jasperreports/engine/fill/ReportFiller.java
index b0f0de58a4..5d4ca71015 100644
--- a/jasperreports/src/net/sf/jasperreports/engine/fill/ReportFiller.java
+++ b/jasperreports/src/net/sf/jasperreports/engine/fill/ReportFiller.java
@@ -41,12 +41,21 @@ public interface ReportFiller
@continuable
JasperPrint fill(Map parameters, Connection connection) throws JRException;
+ @continuable
+ JasperPrint fill(Map parameters, Connection connection, int rowsToFill) throws JRException;
+
@continuable
JasperPrint fill(Map parameters, JRDataSource dataSource) throws JRException;
+ @continuable
+ JasperPrint fill(Map parameters, JRDataSource dataSource, int rowsToFill) throws JRException;
+
@continuable
JasperPrint fill(Map parameters) throws JRException;
+ @continuable
+ JasperPrint fill(Map parameters, int rowsToFill) throws JRException;
+
void addFillListener(FillListener listener);
void cancelFill() throws JRException;
diff --git a/jasperreports/src/net/sf/jasperreports/properties/PropertyConstants.java b/jasperreports/src/net/sf/jasperreports/properties/PropertyConstants.java
index 7f5f548083..e71b0b4779 100644
--- a/jasperreports/src/net/sf/jasperreports/properties/PropertyConstants.java
+++ b/jasperreports/src/net/sf/jasperreports/properties/PropertyConstants.java
@@ -50,6 +50,8 @@ public interface PropertyConstants
String CATEGORY_MAP = PREFIX_CATEGORY + "map";
+ String CATEGORY_LIST = PREFIX_CATEGORY + "list";
+
String CATEGORY_TABLE = PREFIX_CATEGORY + "table";
String CATEGORY_CHART_THEME = PREFIX_CATEGORY + "chart.theme";