Динамический отчет занимает слишком много времени для экспорта отчета в формате PDF / Excel

Я выбрал 26000 записей из базы данных и занес их в список, а экспорт этого списка в PDF или Excel занял слишком много времени.

report.toXlsx(new FileOutputStream(fileForXls));

выполнение над строкой занимает от 30 до 40 секунд. Как сократить время его выполнения?

Код

 public synchronized String execute(){
            JasperReportBuilder report = DynamicReports.report();//a new report
            StyleBuilder boldStyle  = DynamicReports.stl.style().bold();
            StyleBuilder boldCenteredStyle = DynamicReports.stl.style(boldStyle)
                    .setHorizontalAlignment(HorizontalAlignment.CENTER);

            StyleBuilder columnTitleStyle  = DynamicReports.stl.style(boldCenteredStyle)
                    .setBorder(DynamicReports.stl.pen1Point())
                    .setBackgroundColor(Color.LIGHT_GRAY);


            report
              .columns(
                  Columns.column("Sr #", "srNumber",DataTypes.integerType()).setWidth(40).setHorizontalAlignment(HorizontalAlignment.LEFT),
                  Columns.column("IR No", "irNo", DataTypes.stringType()).setWidth(130),
                  Columns.column("Status", "state", DataTypes.stringType()));

            report.columnGrid()
                    .setIgnorePageWidth(true)
                    .title( // title of the report
                    Components
                            .text("IR Report")
                            .setStyle(boldCenteredStyle)
                            .setHorizontalAlignment(
                                    HorizontalAlignment.CENTER))
                    .setColumnTitleStyle(columnTitleStyle)
                    .highlightDetailEvenRows()
                    .pageFooter(
                            Components.pageXofY().setStyle(
                                    boldCenteredStyle))
                    .setDataSource(createDataSource());

            String fileForXls="D:/IRReport.xlsx";

            report.toXlsx(new FileOutputStream(fileForXls)); //time consuming code

return SUCCESS;
}

private JRDataSource createDataSource() {
    DRDataSource dataSource = new DRDataSource("srNumber","irNo", "state");
    List<ResultHeaderBean> data1= irdao.getAllRecords(); //returns List of 26000 records
    int count=0;
    for(ResultHeaderBean data:data1 ){
        count=++count;
        dataSource.add(count,crdata.getIrNumber(), crdata.getStatus());
    }
    return dataSource;
}

0 ответов

Другие вопросы по тегам