DynamicReports列宽超页宽分页求助:拆分列至不同页面
解决DynamicReports列宽超页的分页问题
针对你遇到的列总宽度超过页面宽度导致的报错,要将列拆分到不同页面显示,可通过在报表中添加新页面并分组列的方式实现。以下是修改后的代码:
package com.consistem.report.service; import static net.sf.dynamicreports.report.builder.DynamicReports.*; import java.math.BigDecimal; import java.util.Date; import net.sf.dynamicreports.jasper.builder.JasperReportBuilder; import net.sf.dynamicreports.report.builder.column.TextColumnBuilder; import net.sf.dynamicreports.report.datasource.DRDataSource; import net.sf.dynamicreports.report.exception.DRException; import net.sf.jasperreports.engine.JRDataSource; public class ColumnDataTypesReport { public ColumnDataTypesReport() { build(); } private void build() { try { int width = 100; JRDataSource dataSource = createDataSource(); JasperReportBuilder objReport = report() .setTemplate(Templates.reportTemplate) .pageFooter(Templates.footerComponent); // 第一页:添加前4列 TextColumnBuilder<?> item = col.column("Item", "item", type.stringType()).setFixedWidth(width); TextColumnBuilder<?> quantity = col.column("Quantity", "quantity", type.integerType()).setFixedWidth(width); TextColumnBuilder<?> unit = col.column("Unit price", "unitprice", type.bigDecimalType()).setFixedWidth(width); TextColumnBuilder<?> date = col.column("Order date", "orderdate", type.dateType()).setFixedWidth(width); objReport.addColumn(item, quantity, unit, date) .setDataSource(dataSource); // 添加新页面,放置后4列 objReport.addPage(); TextColumnBuilder<?> date1 = col.column("Order date", "orderdate", type.dateYearToFractionType()).setFixedWidth(width); TextColumnBuilder<?> date2 = col.column("Order year", "orderdate", type.dateYearType()).setFixedWidth(width); TextColumnBuilder<?> date3 = col.column("Order month", "orderdate", type.dateMonthType()).setFixedWidth(width); TextColumnBuilder<?> date4 = col.column("Order day", "orderdate", type.dateDayType()).setFixedWidth(width); objReport.addColumn(date1, date2, date3, date4) .setDataSource(dataSource); objReport.show(); } catch (DRException e) { e.printStackTrace(); } } private JRDataSource createDataSource() { DRDataSource dataSource = new DRDataSource("item", "orderdate", "quantity", "unitprice"); dataSource.add("Notebook", new Date(), 1, new BigDecimal(500)); return dataSource; } public static void main(String[] args) { new ColumnDataTypesReport(); } }
关键修改说明
- 提前创建共享数据源,避免重复生成数据;
- 先添加第一组列并绑定数据源,调用
addPage()创建新页面; - 在新页面中添加第二组列,再次绑定同一数据源,保证数据对应;
- 每个页面自动继承模板的表头和页脚,保持报表样式统一。
修改后,前4列会显示在第一页,后4列显示在第二页,不会再出现列宽超出页面的报错。
内容的提问来源于stack exchange,提问作者Marcio Jota Coelho
相关产品推荐
相关产品推荐

