From 36de01c8dbb33b0efb2fe068db9f3f98010ca795 Mon Sep 17 00:00:00 2001 From: jomu Date: Thu, 19 May 2016 23:12:52 +0000 Subject: [PATCH] completed first version of table based content --- .../muehlencord/shared/pdf/TableContent.java | 72 ++++++++++++------- .../shared/pdf/PDFDocumentTest.java | 13 ++-- 2 files changed, 55 insertions(+), 30 deletions(-) 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 745214d..f83399e 100644 --- a/pdf/src/main/java/de/muehlencord/shared/pdf/TableContent.java +++ b/pdf/src/main/java/de/muehlencord/shared/pdf/TableContent.java @@ -3,6 +3,7 @@ package de.muehlencord.shared.pdf; import com.google.gson.annotations.Expose; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.common.PDRectangle; @@ -24,49 +25,68 @@ public class TableContent extends Content { @Expose private List> data = null; - public TableContent(PDFDocument doc, Font hf, int x, int y) { super(doc, x, y); this.headerFont = hf; } - - public void setHeader (List headers, List cols) { + + public void setHeader(List headers, List cols) { header = new ArrayList<>(); headers.stream().forEach((cellText) -> { - header.add (new Text (cellText)); + header.add(new Text(cellText)); }); colSizes = new ArrayList<>(); cols.stream().forEach((col) -> { - colSizes.add (col); - }); - } - - public void addLine (List values) { - if (data == null) { - data = new ArrayList<>(); - } - values.stream().forEach((cellText) -> { - header.add (new Text (cellText)); + 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)); + }); + data.add(newLine); + } + @Override - protected void addContentToPdf(PDRectangle rect, PDPageContentStream cos) throws IOException, ConfigurationException { + protected void addContentToPdf(PDRectangle rect, PDPageContentStream cos) throws IOException, ConfigurationException { cos.beginText(); - + 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); + } + int yOffset = document.getStandardFont().getFontSize() * -1 - document.getStandardFont().getPadding(); + + 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.setFont(standardFont, document.getStandardFont().getFontSize()); + for (int lineNo = 0; lineNo < data.size(); lineNo++) { + List currentRow = data.get(lineNo); + cos.newLineAtOffset(xOffSet, yOffset); + for (int colNo = 0; colNo < currentRow.size(); colNo++) { + cos.showText(currentRow.get(colNo).getText()); + cos.newLineAtOffset(colSizes.get(colNo), 0); + } + } cos.endText(); -// cos.showText("Telefon:"); -// cos.newLineAtOffset(tabSize, 0); -// cos.showText("05257 / 1234567"); -// cos.newLineAtOffset(tabSize * -1, -14); // leading -// cos.showText("Fax:"); -// cos.newLineAtOffset(tabSize, 0); -// cos.showText("05257 / 1234567"); -// cos.newLineAtOffset(tabSize * -1, -14); // leading - } /* *** getter / setter *** */ 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 17785a9..899c9cd 100644 --- a/pdf/src/test/java/de/muehlencord/shared/pdf/PDFDocumentTest.java +++ b/pdf/src/test/java/de/muehlencord/shared/pdf/PDFDocumentTest.java @@ -60,22 +60,25 @@ public class PDFDocumentTest { doc.addContent(informationContent); - TableContent informationContent2 = new TableContent (doc, doc.getStandardFont(), 400, 500); + TableContent informationContent2 = new TableContent (doc, doc.getStandardFont(), 400, 580); List headers = new ArrayList<>(); headers.add("Kunden-Nr"); - headers.add("${customer.customerNumber}"); + headers.add("${customerNumber}"); List colSize = new ArrayList<>(); colSize.add (100); colSize.add (100); informationContent2.setHeader(headers, colSize); + informationContent2.addLine ("Rechnungs-Nr.:", "${invoiceNumber}"); + informationContent2.addLine ("Ausgabe: ", "Dezember"); + informationContent2.addLine ("Rechnungsdatum:", "${invoiceDate?date}"); + doc.addContent(informationContent2); jsonString = gson.toJson(doc); System.out.println(jsonString); File file = new File("c:/temp/test.ftlh"); FileUtils.writeStringToFile(file, jsonString, "UTF-8"); - - + // create pdf Configuration cfg = new Configuration(Configuration.VERSION_2_3_24); cfg.setDirectoryForTemplateLoading(new File("c:/temp")); @@ -86,6 +89,8 @@ public class PDFDocumentTest { Template template = cfg.getTemplate("test.ftlh"); PDFTemplate pdfDoc = new PDFTemplate(template); pdfDoc.addToDatamodel("invoiceDate", new Date()); + pdfDoc.addToDatamodel("customerNumber", "8755"); + pdfDoc.addToDatamodel("invoiceNumber", "1234567"); pdfDoc.create("c:/temp/test.pdf"); }