code: protected void concatenateReports() {
  
          if (!concatenatedReports.isEmpty()) { // dummy group for page break if needed
              DJGroup globalGroup = createDummyGroup();
              report.getColumnsGroups().add(0, globalGroup);
          }
  
          for (Subreport subreport : concatenatedReports) {
              DJGroup globalGroup = createDummyGroup();
              globalGroup.getFooterSubreports().add(subreport);
              report.getColumnsGroups().add(0, globalGroup);
          }
      }
docs: Create dummy groups for each concatenated report, and in the footer of
  each group adds the subreport.