Reputation: 159
I am using OpenPDF to generate PDF document with header and footer images added to PDF. A paragraph needs to be added to center of the PDF with some of the text content is dynamic based on input request and everything needs surrounded by border. I am able to generate the PDf with header and footer added to it but having problems adding paragraph to center of the pdf and border. Any help is appreciated.
I tried different ways by adding table or using canvas but could not solve it.
public void generatePDF(String firstName, String lastName){
try {
Document doc = new Document();
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(DEST));
//setting font family, color
Font font = new Font(Font.HELVETICA, 16, Font.BOLDITALIC, Color.RED);
doc.open();
addHeaderImageToPDF(doc,writer);
Paragraph para = new Paragraph("Hello! This PDF is created for "+firstName+" "+lastName, font);
para.setAlignment(Element.ALIGN_MIDDLE);
doc.add(para);
addFooterImageToPDF(doc,writer);
addBorderToPDF(doc);
doc.close();
writer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void addBorderToPDF(Document document){
Rectangle rect= new Rectangle(531.5f,820,38.5f,0); // you can resize rectangle
rect.enableBorderSide(1);
rect.enableBorderSide(2);
rect.enableBorderSide(4);
rect.enableBorderSide(8);
rect.setBorderColor(Color.BLACK);
rect.setBorderWidth(2);
document.add(rect);
}
private void addHeaderImageToPDF(Document document, PdfWriter writer){
try {
Image image = Image.getInstance(HEADER_IMAGE_PATH);
//image = Image.getInstance(IMAGE_PATH);
image.scalePercent(50f);
//image.setAbsolutePosition(0, (float) (PageSize.A4.getHeight() - 20.0));
image.setAbsolutePosition(40, 675);
System.out.println(image.getScaledHeight());
document.add(image);
image.scaleToFit(100f, 100f);
//document.add(image);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void addFooterImageToPDF(Document document, PdfWriter writer){
try {
Image image = Image.getInstance(FOOTER_IMAGE_PATH);
//image = Image.getInstance(IMAGE_PATH);
image.scalePercent(50f);
//image.setAbsolutePosition(0, (float) (PageSize.A4.getHeight() - 20.0));
image.setAbsolutePosition(40, 450);
System.out.println(image.getScaledHeight());
document.add(image);
image.scaleToFit(100f, 100f);
//document.add(image);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Wanted to add paragraph at the center and whole content of PDF should be surrounded by border with dark blue color. Any help is appreciated.
Upvotes: 1
Views: 3453
Reputation: 95918
As the given tags itext, pdfbox, and openpdf imply some freedom of choice of PDF library, here an example for creating a centered paragraph with a dark blue border using iText 7 (v7.1.7):
String firstName = "Mister";
String lastName = "Nine";
try ( PdfWriter pdfWriter = new PdfWriter(new File("CenterParagraph.pdf"));
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
Document document = new Document(pdfDocument) ) {
Paragraph paragraph = new Paragraph("Hello! This PDF is created for "+firstName+" "+lastName);
paragraph.setWidth(100).setBorder(new SolidBorder(new DeviceRgb(0f, 0f, 0.6f), 3));
PageSize box = pdfDocument.getDefaultPageSize();
document.showTextAligned(paragraph, (box.getLeft() + box.getRight()) / 2, (box.getTop() + box.getBottom()) / 2,
TextAlignment.CENTER, VerticalAlignment.MIDDLE);
}
(ShowTextAtPosition test testShowCenteredBorderedParagraph
)
resulting in a
in the middle of the page.
String firstName = "Mister";
String lastName = "Nine";
Image img = null;
try ( InputStream imageResource = IMAGE_INPUT_STREAM ) {
ImageData data = ImageDataFactory.create(StreamUtil.inputStreamToArray(imageResource));
img = new Image(data);
img.scaleToFit(100f, 100f);
}
try ( PdfWriter pdfWriter = new PdfWriter(new File("CenterParagraphWithExtras.pdf"));
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
Document document = new Document(pdfDocument) ) {
PageSize box = pdfDocument.getDefaultPageSize();
Paragraph paragraph = new Paragraph("Hello! This PDF is created for "+firstName+" "+lastName);
paragraph.setWidth(100);
document.showTextAligned(paragraph, (box.getLeft() + box.getRight()) / 2, (box.getTop() + box.getBottom()) / 2,
TextAlignment.CENTER, VerticalAlignment.MIDDLE);
PdfCanvas pdfCanvas = new PdfCanvas(pdfDocument.getLastPage());
Rectangle borderRectangle = new Rectangle(box.getLeft() + 5, box.getBottom() + 5, box.getWidth() - 10, box.getHeight() - 10);
pdfCanvas.setColor(new DeviceRgb(0f, 0f, 0.6f), false);
pdfCanvas.setLineWidth(3);
pdfCanvas.rectangle(borderRectangle);
pdfCanvas.stroke();
img.setFixedPosition(box.getLeft() + 40, box.getTop() - 150);
document.add(img);
img.setFixedPosition(box.getLeft() + 40, box.getBottom() + 50);
document.add(img);
}
resulting in
Upvotes: 2