added alignment right to tablecontent
removed obsolete variables from add content to PDF method
This commit is contained in:
@ -12,6 +12,7 @@ import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
|||||||
public abstract class Content {
|
public abstract class Content {
|
||||||
|
|
||||||
protected PDFDocument document;
|
protected PDFDocument document;
|
||||||
|
protected PDRectangle rect;
|
||||||
|
|
||||||
@Expose
|
@Expose
|
||||||
protected Integer x;
|
protected Integer x;
|
||||||
@ -26,7 +27,7 @@ public abstract class Content {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Content(PDFDocument doc, int x, int y) {
|
public Content(PDFDocument doc, int x, int y) {
|
||||||
this.document = doc;
|
this(doc);
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
}
|
}
|
||||||
@ -44,7 +45,7 @@ public abstract class Content {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract Coordinate addContentToPdf(PDRectangle rect, PDPageContentStream cos) throws IOException, ConfigurationException;
|
protected abstract Coordinate addContentToPdf(PDPageContentStream cos) throws IOException, ConfigurationException;
|
||||||
|
|
||||||
/* *** getter / setter *** */
|
/* *** getter / setter *** */
|
||||||
public int getX() {
|
public int getX() {
|
||||||
@ -63,4 +64,11 @@ public abstract class Content {
|
|||||||
this.y = y;
|
this.y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected PDRectangle getRectangle() {
|
||||||
|
return rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setRect(PDRectangle rect) {
|
||||||
|
this.rect = rect;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentLinkedDeque;
|
import java.util.concurrent.ConcurrentLinkedDeque;
|
||||||
import org.apache.commons.lang3.text.StrBuilder;
|
|
||||||
import org.apache.pdfbox.pdmodel.font.PDFont;
|
import org.apache.pdfbox.pdmodel.font.PDFont;
|
||||||
import org.apache.pdfbox.pdmodel.font.PDType1Font;
|
import org.apache.pdfbox.pdmodel.font.PDType1Font;
|
||||||
|
|
||||||
|
|||||||
@ -64,13 +64,13 @@ public class PDFTemplate {
|
|||||||
}
|
}
|
||||||
doc.addPage(page);
|
doc.addPage(page);
|
||||||
|
|
||||||
PDRectangle rect = page.getMediaBox();
|
|
||||||
PDPageContentStream cos = new PDPageContentStream(doc, page, AppendMode.APPEND, false);
|
PDPageContentStream cos = new PDPageContentStream(doc, page, AppendMode.APPEND, false);
|
||||||
Coordinate coord = null;
|
Coordinate coord = null;
|
||||||
for (Content content : pdfDoc.getContentList()) {
|
for (Content content : pdfDoc.getContentList()) {
|
||||||
content.setDocument(pdfDoc); // FIXME move to serialization
|
content.setDocument(pdfDoc); // FIXME move to serialization
|
||||||
|
content.setRect (page.getMediaBox());
|
||||||
content.setCoordinate(coord);
|
content.setCoordinate(coord);
|
||||||
coord = content.addContentToPdf(rect, cos);
|
coord = content.addContentToPdf(cos);
|
||||||
}
|
}
|
||||||
cos.close();
|
cos.close();
|
||||||
doc.save(filenName);
|
doc.save(filenName);
|
||||||
|
|||||||
@ -6,8 +6,9 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
||||||
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
|
||||||
import org.apache.pdfbox.pdmodel.font.PDFont;
|
import org.apache.pdfbox.pdmodel.font.PDFont;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -15,6 +16,8 @@ import org.apache.pdfbox.pdmodel.font.PDFont;
|
|||||||
*/
|
*/
|
||||||
public class TableContent extends Content {
|
public class TableContent extends Content {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(TableContent.class);
|
||||||
|
|
||||||
@Expose
|
@Expose
|
||||||
private final Font headerFont;
|
private final Font headerFont;
|
||||||
|
|
||||||
@ -52,6 +55,19 @@ public class TableContent extends Content {
|
|||||||
return newLine;
|
return newLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DefaultTableRow addTextLine(Text... values) {
|
||||||
|
return addTextLine(Arrays.asList(values));
|
||||||
|
}
|
||||||
|
|
||||||
|
public DefaultTableRow addTextLine(List<Text> values) {
|
||||||
|
DefaultTableRow newLine = new DefaultTableRow();
|
||||||
|
values.stream().forEach((text) -> {
|
||||||
|
newLine.add(text);
|
||||||
|
});
|
||||||
|
data.add(newLine);
|
||||||
|
return newLine;
|
||||||
|
}
|
||||||
|
|
||||||
protected TableRow getRow(int no) {
|
protected TableRow getRow(int no) {
|
||||||
return data.get(no);
|
return data.get(no);
|
||||||
}
|
}
|
||||||
@ -61,7 +77,8 @@ public class TableContent extends Content {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Coordinate addContentToPdf(PDRectangle rect, PDPageContentStream cos) throws IOException, ConfigurationException {
|
protected Coordinate addContentToPdf(PDPageContentStream cos) throws IOException, ConfigurationException {
|
||||||
|
float margin = 0F;
|
||||||
cos.beginText();
|
cos.beginText();
|
||||||
|
|
||||||
PDFont hFont = document.getFont(headerFont.getFontName());
|
PDFont hFont = document.getFont(headerFont.getFontName());
|
||||||
@ -78,8 +95,10 @@ public class TableContent extends Content {
|
|||||||
cos.newLineAtOffset(x, y);
|
cos.newLineAtOffset(x, y);
|
||||||
for (int i = 0; i < header.size(); i++) {
|
for (int i = 0; i < header.size(); i++) {
|
||||||
cos.showText(header.getHeader(i).getText());
|
cos.showText(header.getHeader(i).getText());
|
||||||
cos.newLineAtOffset(header.getColumnSize(i), 0);
|
float textWdith = (standardFont.getStringWidth(header.getHeader(i).getText()) / 1000F) * document.getStandardFont().getFontSize();
|
||||||
}
|
LOGGER.info ("Text width for {} = {}", header.getHeader(i).getText(), textWdith);
|
||||||
|
cos.newLineAtOffset(header.getColumnSize(i), 0);
|
||||||
|
}
|
||||||
if (data.isEmpty()) {
|
if (data.isEmpty()) {
|
||||||
currentY -= headerFont.getFontSize() - headerFont.getPadding();
|
currentY -= headerFont.getFontSize() - headerFont.getPadding();
|
||||||
}
|
}
|
||||||
@ -90,8 +109,21 @@ public class TableContent extends Content {
|
|||||||
cos.newLineAtOffset(xOffSet, yOffset);
|
cos.newLineAtOffset(xOffSet, yOffset);
|
||||||
currentY += yOffset;
|
currentY += yOffset;
|
||||||
for (int colNo = 0; colNo < currentRow.getColumnCount(); colNo++) {
|
for (int colNo = 0; colNo < currentRow.getColumnCount(); colNo++) {
|
||||||
cos.showText(currentRow.getColumnValue(colNo).getText());
|
Text currentColText = currentRow.getColumnValue(colNo);
|
||||||
cos.newLineAtOffset(header.getColumnSize(colNo), 0);
|
float startX;
|
||||||
|
if (currentColText.getAlign() == TextAlignment.RIGHT) {
|
||||||
|
|
||||||
|
float textWdith = (standardFont.getStringWidth(currentColText.getText()) / 1000F) * document.getStandardFont().getFontSize();
|
||||||
|
float width = header.getColumnSize(colNo) - 2 * margin;
|
||||||
|
startX = width - textWdith;
|
||||||
|
LOGGER.info ("Text width for {} = {}", currentColText.getText(), textWdith);
|
||||||
|
cos.newLineAtOffset(startX, 0);
|
||||||
|
} else {
|
||||||
|
startX = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cos.showText(currentColText.getText());
|
||||||
|
cos.newLineAtOffset(header.getColumnSize(colNo) - startX, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
currentY += yOffset;
|
currentY += yOffset;
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import java.io.IOException;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
||||||
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
|
||||||
import org.apache.pdfbox.pdmodel.font.PDFont;
|
import org.apache.pdfbox.pdmodel.font.PDFont;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,7 +54,7 @@ public class TextContent extends Content {
|
|||||||
|
|
||||||
/* *** getter / setter */
|
/* *** getter / setter */
|
||||||
@Override
|
@Override
|
||||||
protected Coordinate addContentToPdf(PDRectangle rect, PDPageContentStream cos) throws IOException, ConfigurationException {
|
protected Coordinate addContentToPdf(PDPageContentStream cos) throws IOException, ConfigurationException {
|
||||||
float margin = 40F;
|
float margin = 40F;
|
||||||
cos.beginText();
|
cos.beginText();
|
||||||
cos.newLineAtOffset(x, y);
|
cos.newLineAtOffset(x, y);
|
||||||
|
|||||||
@ -42,13 +42,13 @@ public class PDFDocumentTest {
|
|||||||
informationContent.addLine("Hövelhof, den ${invoiceDate?date}", "bold");
|
informationContent.addLine("Hövelhof, den ${invoiceDate?date}", "bold");
|
||||||
doc.addContent(informationContent);
|
doc.addContent(informationContent);
|
||||||
|
|
||||||
TableContent informationContent2 = new TableContent (doc, doc.getStandardFont());
|
TableContent informationContent2 = new TableContent(doc, doc.getStandardFont());
|
||||||
informationContent2.getHeaders()
|
informationContent2.getHeaders()
|
||||||
.add("Kunden-Nr", 100)
|
.add("Kunden-Nr", 100)
|
||||||
.add("${customerNumber}", 100);
|
.add("${customerNumber}", 100);
|
||||||
informationContent2.addLine ("Rechnungs-Nr.:", "${invoiceNumber}");
|
informationContent2.addLine("Rechnungs-Nr.:", "${invoiceNumber}");
|
||||||
informationContent2.addLine ("Ausgabe: ", "Dezember");
|
informationContent2.addLine("Ausgabe: ", "Dezember");
|
||||||
informationContent2.addLine ("Rechnungsdatum:", "${invoiceDate?date}");
|
informationContent2.addLine("Rechnungsdatum:", "${invoiceDate?date}");
|
||||||
doc.addContent(informationContent2);
|
doc.addContent(informationContent2);
|
||||||
|
|
||||||
TextContent invoiceInfoInformation = new TextContent(doc, 40, 442, "Sehr geehrter Anzeigenkunde, ")
|
TextContent invoiceInfoInformation = new TextContent(doc, 40, 442, "Sehr geehrter Anzeigenkunde, ")
|
||||||
@ -60,18 +60,30 @@ public class PDFDocumentTest {
|
|||||||
|
|
||||||
TableContent invoiceLines = new TableContent(doc, doc.getFontByAlias("bold"));
|
TableContent invoiceLines = new TableContent(doc, doc.getFontByAlias("bold"));
|
||||||
invoiceLines.getHeaders()
|
invoiceLines.getHeaders()
|
||||||
.add ("Menge", 100)
|
.add("Menge", 60)
|
||||||
.add ("Beschreibung", 300)
|
.add("Beschreibung", 300)
|
||||||
.add ("Einzelpreis", 100)
|
.add(new Text("Einzelpreis", TextAlignment.RIGHT), 80)
|
||||||
.add ("Summe", 100, TextAlignment.RIGHT);
|
.add(new Text("Summe", TextAlignment.RIGHT), 80);
|
||||||
invoiceLines.addLine("1","Anzeige Hövelhofer Rundschau", "10", "10");
|
invoiceLines.addTextLine(
|
||||||
invoiceLines.addLine ("${invoiceline.amount}", "${invoiceline.description}", "${invoiceline.price}", "${invoiceline.total}").createList("invoiceLines", "invoiceline");
|
new Text("1000", TextAlignment.RIGHT),
|
||||||
invoiceLines.addLine("2","Anzeige Hövelhofer Rundschau", "10", "20");
|
new Text("Anzeige Hövelhofer Rundschau"),
|
||||||
|
new Text("10,00 €", TextAlignment.RIGHT),
|
||||||
|
new Text("10,00 €", TextAlignment.RIGHT));
|
||||||
|
invoiceLines.addTextLine(
|
||||||
|
new Text("${invoiceline.amount}", TextAlignment.RIGHT),
|
||||||
|
new Text("${invoiceline.description}"),
|
||||||
|
new Text("${invoiceline.price}", TextAlignment.RIGHT),
|
||||||
|
new Text("${invoiceline.total}", TextAlignment.RIGHT)).createList("invoiceLines", "invoiceline");
|
||||||
|
invoiceLines.addTextLine(
|
||||||
|
new Text("2", TextAlignment.RIGHT),
|
||||||
|
new Text("Anzeige Hövelhofer Rundschau"),
|
||||||
|
new Text("10,00 €", TextAlignment.RIGHT),
|
||||||
|
new Text("20,00 €", TextAlignment.RIGHT));
|
||||||
doc.addContent(invoiceLines);
|
doc.addContent(invoiceLines);
|
||||||
|
|
||||||
TextContent test = new TextContent (doc)
|
TextContent test = new TextContent(doc)
|
||||||
.addLine("Das ist ein Test");
|
.addLine("Das ist ein Test");
|
||||||
doc.addContent (test);
|
doc.addContent(test);
|
||||||
|
|
||||||
jsonString = doc.getTemplateString();
|
jsonString = doc.getTemplateString();
|
||||||
|
|
||||||
@ -89,9 +101,9 @@ public class PDFDocumentTest {
|
|||||||
PDFTemplate pdfDoc = new PDFTemplate(template);
|
PDFTemplate pdfDoc = new PDFTemplate(template);
|
||||||
|
|
||||||
Invoice invoice = new Invoice();
|
Invoice invoice = new Invoice();
|
||||||
invoice.addInvoiceLine(new InvoiceLine ("Product 1", "10", "1", "10"));
|
invoice.addInvoiceLine(new InvoiceLine("Product 1", "10,00 €", "1", "10,00 €"));
|
||||||
invoice.addInvoiceLine(new InvoiceLine ("Product 2", "5", "10", "50"));
|
invoice.addInvoiceLine(new InvoiceLine("Product 2", "5,00 €", "10", "50,00 €"));
|
||||||
invoice.addInvoiceLine(new InvoiceLine ("Product 3", "100", "20", "2000"));
|
invoice.addInvoiceLine(new InvoiceLine("Product 3", "100,00 €", "20", "2000,00 €"));
|
||||||
|
|
||||||
pdfDoc.addToDatamodel("invoiceDate", new Date());
|
pdfDoc.addToDatamodel("invoiceDate", new Date());
|
||||||
pdfDoc.addToDatamodel("customerNumber", "8755");
|
pdfDoc.addToDatamodel("customerNumber", "8755");
|
||||||
|
|||||||
Reference in New Issue
Block a user