/* * Copyright (C) 2022 Alessandro Iezzi * * This file is part of Simply Reports. * * Simply Reports is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Simply Reports is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Simply Reports. If not, see . */ package it.alessandroiezzi.simplyreports.pdf; import com.lowagie.text.DocumentException; import com.lowagie.text.pdf.*; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.function.Supplier; public abstract class PDFTable extends PDFEntity { private final List entities; private final List cells = new ArrayList<>(); private int[] widths = null; private PDFTableHeader header; private PDFTableFooter footer; public PDFTable(List entities, int...widths) { this.entities = entities; this.widths = widths; generateSignature(); } private void generateSignature() { SimpleDateFormat sdfDate = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm"); Date now = new Date(); addFooter(new PDFTableFooter(null, "Generato con Simply Reports il " + sdfDate.format(now) + " alle " + sdfTime.format(now), null, null, 0)); } protected abstract int getNumberOfColumns(); protected abstract void mapRow(E entity); public void addCell(PdfTableCell cell) { cells.add(cell); } public void addCell(Supplier value) { addCell(new PdfTableCell(value)); } public void addHeader(PDFTableHeader header) { this.header = header; } public void addFooter(PDFTableFooter footer) { this.footer = footer; } @Override protected PdfPTable generate(PdfWriter writer) { try { PdfPTable table = new PdfPTable(getNumberOfColumns()); table.setWidthPercentage(100); if (widths != null && widths.length > 0) table.setWidths(widths); for (E entity : this.entities) { mapRow(entity); } if (header != null && writer != null) { if (header.getColspan() == null) { header.setColspan(widths.length); } table.addCell(header.generate(writer)); } for (PdfTableCell cell : cells) { table.addCell(cell.getValue()); } if (footer != null && writer != null) { if (footer.getColspan() == null) { footer.setColspan(widths.length); } table.addCell(footer.generate(writer)); } return table; } catch (DocumentException ex) { throw new RuntimeException(ex); } } }