diff --git a/pdf/src/main/java/de/muehlencord/shared/pdf/PDFTemplate.java b/pdf/src/main/java/de/muehlencord/shared/pdf/PDFTemplate.java index f1137bb..28d2b73 100644 --- a/pdf/src/main/java/de/muehlencord/shared/pdf/PDFTemplate.java +++ b/pdf/src/main/java/de/muehlencord/shared/pdf/PDFTemplate.java @@ -63,7 +63,7 @@ public class PDFTemplate { throw new ConfigurationException("Papersize " + pdfDoc.getPaperSize().getLabel() + " not supported"); } doc.addPage(page); - + PDRectangle rect = page.getMediaBox(); PDPageContentStream cos = new PDPageContentStream(doc, page, AppendMode.APPEND, false); Coordinate coord = null; 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 d422286..341528a 100644 --- a/pdf/src/main/java/de/muehlencord/shared/pdf/TableContent.java +++ b/pdf/src/main/java/de/muehlencord/shared/pdf/TableContent.java @@ -51,11 +51,11 @@ public class TableContent extends Content { data.add(newLine); return newLine; } - - protected TableRow getRow (int no) { - return data.get(no); + + protected TableRow getRow(int no) { + return data.get(no); } - + protected int getRowCount() { return data.size(); } @@ -78,8 +78,8 @@ public class TableContent extends Content { cos.newLineAtOffset(x, y); for (int i = 0; i < header.size(); i++) { cos.showText(header.getHeader(i).getText()); - cos.newLineAtOffset(header.getColumnSize(i), 0); - } + cos.newLineAtOffset(header.getColumnSize(i), 0); + } if (data.isEmpty()) { currentY -= headerFont.getFontSize() - headerFont.getPadding(); } @@ -95,6 +95,7 @@ public class TableContent extends Content { } } currentY += yOffset; + cos.endText(); return new Coordinate(currentX, currentY); diff --git a/pdf/src/main/java/de/muehlencord/shared/pdf/TableHeader.java b/pdf/src/main/java/de/muehlencord/shared/pdf/TableHeader.java index 0fac87f..946f590 100644 --- a/pdf/src/main/java/de/muehlencord/shared/pdf/TableHeader.java +++ b/pdf/src/main/java/de/muehlencord/shared/pdf/TableHeader.java @@ -12,7 +12,6 @@ public class TableHeader { @Expose private final List headers; - @Expose private final List colSizes; @@ -32,6 +31,14 @@ public class TableHeader { colSizes.add(colSize); return this; } + + public TableHeader add (String headerText, int colSize, TextAlignment align) { + headers.add (new Text (headerText, align)); + colSizes.add (colSize); + return this; + } + + /* *** getter *** */ public int size() { return headers.size(); @@ -44,5 +51,7 @@ public class TableHeader { public Text getHeader(int pos) { return headers.get(pos); } + + } diff --git a/pdf/src/main/java/de/muehlencord/shared/pdf/Text.java b/pdf/src/main/java/de/muehlencord/shared/pdf/Text.java index 59224d2..39c6343 100644 --- a/pdf/src/main/java/de/muehlencord/shared/pdf/Text.java +++ b/pdf/src/main/java/de/muehlencord/shared/pdf/Text.java @@ -12,22 +12,38 @@ public class Text extends PDFElement { private final String text; @Expose private final String fontAlias; + @Expose + private TextAlignment align; public Text() { this.text = ""; this.fontAlias = null; + this.align = null; } - + public Text(String text) { this.text = text; this.fontAlias = null; + this.align = null; } - + + public Text(String text, TextAlignment align) { + this.text = text; + this.fontAlias = null; + this.align = align; + } + public Text(String text, String fontAlias) { this.text = text; this.fontAlias = fontAlias; + this.align = null; + } + + public Text(String text, String fontAlias, TextAlignment align) { + this.text = text; + this.fontAlias = fontAlias; + this.align = align; } - /* *** getter / setter *** */ public String getText() { @@ -36,5 +52,14 @@ public class Text extends PDFElement { public String getFontAlias() { return fontAlias; - } + } + + public TextAlignment getAlign() { + if (align == null) { + return TextAlignment.LEFT; + } else { + return align; + } + } + } diff --git a/pdf/src/main/java/de/muehlencord/shared/pdf/TextAlignment.java b/pdf/src/main/java/de/muehlencord/shared/pdf/TextAlignment.java new file mode 100644 index 0000000..255a072 --- /dev/null +++ b/pdf/src/main/java/de/muehlencord/shared/pdf/TextAlignment.java @@ -0,0 +1,11 @@ +package de.muehlencord.shared.pdf; + +/** + * + * @author joern.muehlencord + */ +public enum TextAlignment { + + LEFT, + RIGHT; +} diff --git a/pdf/src/main/java/de/muehlencord/shared/pdf/TextContent.java b/pdf/src/main/java/de/muehlencord/shared/pdf/TextContent.java index 374af59..9285cfd 100644 --- a/pdf/src/main/java/de/muehlencord/shared/pdf/TextContent.java +++ b/pdf/src/main/java/de/muehlencord/shared/pdf/TextContent.java @@ -43,29 +43,42 @@ public class TextContent extends Content { return this; } + public TextContent addLine(String text, TextAlignment align) { + this.textLines.add(new Text(text, align)); + return this; + } + public TextContent addLine(String text, String fontAlias) { - this.textLines.add (new Text(text, fontAlias)); + this.textLines.add(new Text(text, fontAlias)); return this; } /* *** getter / setter */ @Override protected Coordinate addContentToPdf(PDRectangle rect, PDPageContentStream cos) throws IOException, ConfigurationException { + float margin = 40F; cos.beginText(); cos.newLineAtOffset(x, y); int currentY = y; for (Text textLine : textLines) { - Font font = (textLine.getFontAlias()== null ? document.getStandardFont() : document.getFontByAlias(textLine.getFontAlias())); + Font font = (textLine.getFontAlias() == null ? document.getStandardFont() : document.getFontByAlias(textLine.getFontAlias())); PDFont pdFont = document.getFont(font.getFontName()); cos.setFont(pdFont, font.getFontSize()); int leading = font.getFontSize() + font.getPadding(); + + if (textLine.getAlign() == TextAlignment.RIGHT) { + float textWdith = (pdFont.getStringWidth(textLine.getText()) / 1000F) * font.getFontSize(); + float width = rect.getUpperRightX() - rect.getLowerLeftX() - 2 * margin; + float startX = width - textWdith; + cos.newLineAtOffset(startX, 0); + } currentY -= leading; cos.setLeading(leading); cos.showText(textLine.getText()); cos.newLine(); } cos.endText(); - - return new Coordinate (x, currentY); + + return new Coordinate(x, currentY); } } 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 701e3f5..59b4237 100644 --- a/pdf/src/test/java/de/muehlencord/shared/pdf/PDFDocumentTest.java +++ b/pdf/src/test/java/de/muehlencord/shared/pdf/PDFDocumentTest.java @@ -54,7 +54,7 @@ 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", TextAlignment.RIGHT) .addLine(); doc.addContent(invoiceInfoInformation); @@ -63,7 +63,7 @@ public class PDFDocumentTest { .add ("Menge", 100) .add ("Beschreibung", 300) .add ("Einzelpreis", 100) - .add ("Summe", 100); + .add ("Summe", 100, TextAlignment.RIGHT); invoiceLines.addLine("1","Anzeige Hövelhofer Rundschau", "10", "10"); invoiceLines.addLine ("${invoiceline.amount}", "${invoiceline.description}", "${invoiceline.price}", "${invoiceline.total}").createList("invoiceLines", "invoiceline"); invoiceLines.addLine("2","Anzeige Hövelhofer Rundschau", "10", "20");