diff --git a/pdf/src/main/java/de/muehlencord/shared/pdf/TableContent.java b/pdf/src/main/java/de/muehlencord/shared/pdf/TableContent.java index 7d632ef..207115a 100644 --- a/pdf/src/main/java/de/muehlencord/shared/pdf/TableContent.java +++ b/pdf/src/main/java/de/muehlencord/shared/pdf/TableContent.java @@ -19,42 +19,31 @@ public class TableContent extends Content { private final Font headerFont; @Expose - private List header; - @Expose - private List colSizes = null; - + private TableHeader header; + @Expose private List> data = null; public TableContent (PDFDocument doc, Font hf) { super (doc); + this.header = new TableHeader(); this.headerFont = hf; + this.data = new ArrayList<>(); + } public TableContent(PDFDocument doc, Font hf, int x, int y) { super(doc, x, y); + this.header = new TableHeader(); this.headerFont = hf; + this.data = new ArrayList<>(); } - - public void setHeader(List headers, List cols) { - header = new ArrayList<>(); - headers.stream().forEach((cellText) -> { - header.add(new Text(cellText)); - }); - colSizes = new ArrayList<>(); - cols.stream().forEach((col) -> { - colSizes.add(col); - }); - } - + public void addLine(String... values) { addLine(Arrays.asList(values)); } public void addLine(List values) { - if (data == null) { - data = new ArrayList<>(); - } List newLine = new ArrayList<>(); values.stream().forEach((cellText) -> { newLine.add(new Text(cellText)); @@ -69,8 +58,8 @@ public class TableContent extends Content { PDFont hFont = document.getFont(headerFont.getFontName()); PDFont standardFont = document.getFont(document.getStandardFont().getFontName()); int xOffSet = 0; - for (int i = 0; i < colSizes.size(); i++) { - xOffSet -= colSizes.get(i); + for (int i = 0; i < getHeaders().size(); i++) { + xOffSet -= header.getColumnSize(i); } int yOffset = document.getStandardFont().getFontSize() * -1 - document.getStandardFont().getPadding(); int currentX = x; @@ -79,8 +68,11 @@ public class TableContent extends Content { cos.setFont(hFont, headerFont.getFontSize()); cos.newLineAtOffset(x, y); for (int i = 0; i < header.size(); i++) { - cos.showText(header.get(i).getText()); - cos.newLineAtOffset(colSizes.get(i), 0); + cos.showText(header.getHeader(i).getText()); + cos.newLineAtOffset(header.getColumnSize(i), 0); + } + if (data.size() == 0) { + currentY -= headerFont.getFontSize() - headerFont.getPadding(); } cos.setFont(standardFont, document.getStandardFont().getFontSize()); @@ -90,7 +82,7 @@ public class TableContent extends Content { currentY += yOffset; for (int colNo = 0; colNo < currentRow.size(); colNo++) { cos.showText(currentRow.get(colNo).getText()); - cos.newLineAtOffset(colSizes.get(colNo), 0); + cos.newLineAtOffset(header.getColumnSize(colNo), 0); } } cos.endText(); @@ -103,4 +95,7 @@ public class TableContent extends Content { return headerFont; } + public TableHeader getHeaders() { + return header; + } } diff --git a/pdf/src/main/java/de/muehlencord/shared/pdf/TableHeader.java b/pdf/src/main/java/de/muehlencord/shared/pdf/TableHeader.java new file mode 100644 index 0000000..0fac87f --- /dev/null +++ b/pdf/src/main/java/de/muehlencord/shared/pdf/TableHeader.java @@ -0,0 +1,48 @@ +package de.muehlencord.shared.pdf; + +import com.google.gson.annotations.Expose; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author joern.muehlencord + */ +public class TableHeader { + + @Expose + private final List headers; + + @Expose + private final List colSizes; + + public TableHeader() { + headers = new ArrayList<>(); + colSizes = new ArrayList<>(); + } + + public TableHeader add(Text header, int colSize) { + headers.add(header); + colSizes.add(colSize); + return this; + } + + public TableHeader add(String headerText, int colSize) { + headers.add(new Text(headerText)); + colSizes.add(colSize); + return this; + } + + public int size() { + return headers.size(); + } + + public int getColumnSize(int pos) { + return colSizes.get(pos); + } + + public Text getHeader(int pos) { + return headers.get(pos); + } + +} diff --git a/pdf/src/test/java/de/muehlencord/shared/pdf/PDFDocumentTest.java b/pdf/src/test/java/de/muehlencord/shared/pdf/PDFDocumentTest.java index c799237..96640f5 100644 --- a/pdf/src/test/java/de/muehlencord/shared/pdf/PDFDocumentTest.java +++ b/pdf/src/test/java/de/muehlencord/shared/pdf/PDFDocumentTest.java @@ -54,13 +54,9 @@ public class PDFDocumentTest { doc.addContent(informationContent); TableContent informationContent2 = new TableContent (doc, doc.getStandardFont()); - List headers = new ArrayList<>(); - headers.add("Kunden-Nr"); - headers.add("${customerNumber}"); - List colSize = new ArrayList<>(); - colSize.add (100); - colSize.add (100); - informationContent2.setHeader(headers, colSize); + informationContent2.getHeaders() + .add("Kunden-Nr", 100) + .add("${customerNumber}", 100); informationContent2.addLine ("Rechnungs-Nr.:", "${invoiceNumber}"); informationContent2.addLine ("Ausgabe: ", "Dezember"); informationContent2.addLine ("Rechnungsdatum:", "${invoiceDate?date}"); @@ -69,9 +65,18 @@ public class PDFDocumentTest { TextContent invoiceInfoInformation = new TextContent(doc, 40, 442, "Sehr geehrter Anzeigenkunde, ") .addLine() .addLine() - .addLine("Wir danken für den Auftrag und bitten um Erledigung der folgenden Anzeigenabrechnung"); + .addLine("Wir danken für den Auftrag und bitten um Erledigung der folgenden Anzeigenabrechnung") + .addLine(); doc.addContent(invoiceInfoInformation); + TableContent invoiceLines = new TableContent(doc, doc.getFontByAlias("bold")); + invoiceLines.getHeaders() + .add ("Menge", 100) + .add ("Beschreibung", 100) + .add ("Einzelpreis", 100) + .add ("Summe", 100); + doc.addContent(invoiceLines); + TextContent test = new TextContent (doc) .addLine("Das ist ein Test"); doc.addContent (test);