You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 18:40:40