Важно отметить, что JasperReports не допускает выражения в ширине столбца и разделение информацию в один столбец, используя '|' это нежизнеспособный вариант, так как слишком много информации становится дезорганизованным.
Это источник моего отчета:
Код: Выделить всё
Код: Выделить всё
@RequestMapping(value = "/generate-dynamic-pdf", method = RequestMethod.POST)
public ResponseEntity generateDynamicPdfReport8(@RequestBody Map requestData) {
try {
List data = (List) requestData.get("data");
String nameUserGeneratedReport = (String) requestData.get("username");
if (data == null || data.isEmpty()) {
return ResponseEntity.badRequest().body("No data provided");
}
Map firstRecord = data.get(0);
if (firstRecord.size() > 12) {
return ResponseEntity.badRequest().body("Maximum of 12 columns allowed");
}
// Obtener los nombres de las columnas
List columnNames = firstRecord.keySet().stream()
.map(key -> {
Map map = new HashMap();
map.put("columnName", key);
return map;
})
.collect(Collectors.toList());
// Preparar los parámetros del reporte
Map parameters = new HashMap();
parameters.put("COLUMN_NAMES", columnNames);
parameters.put("DATA_ROWS", data);
parameters.put("nameUserGeneratedReport", nameUserGeneratedReport);
parameters.put("COLUMN_COUNT", columnNames.size());
parameters.put("REPORT_ORIENTATION", "Landscape");
// Cargar y compilar el reporte
ClassPathResource resource = new ClassPathResource("reports/ReportDynamicTable4.jasper");
InputStream inputStream = resource.getInputStream();
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
// Generar el reporte
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
// Exportar a PDF
byte[] pdfBytes = JasperExportManager.exportReportToPdf(jasperPrint);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_PDF);
headers.setContentDispositionFormData("filename", "dynamic_horizontal_report.pdf");
return new ResponseEntity(pdfBytes, headers, HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error generating report: " + e.getMessage());
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... page-width
Мобильная версия