How to center a text using PDFBox

SteeveDroz picture SteeveDroz · Jun 28, 2011 · Viewed 25.9k times · Source

My question is very simple: how can I center a text on a PDF, using PDFBox?

I don't know the string in advance, I can't find the middle by trial. The string doesn't always have the same width.

I need either:

  • A method that can center the text, something like addCenteredString(myString)
  • A method that can give me the width of the string in pixels. I can then calculate the center, for I know the dimensions of the PDF.

Any help is welcome!

Answer

SteeveDroz picture SteeveDroz · Jun 30, 2011

Ok, I found the answer myself. Here is how to center some text on a page:

String title = "This is my wonderful title!"; // Or whatever title you want.
int marginTop = 30; // Or whatever margin you want.

PDDocument document = new PDDocument();
PDPage page = new PDPage()
PDPageStreamContent stream = new PDPageContentStream(document, page);
PDFont font = PDType1Font.HELVETICA_BOLD; // Or whatever font you want.

int fontSize = 16; // Or whatever font size you want.
float titleWidth = font.getStringWidth(title) / 1000 * fontSize;
float titleHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize;

stream.beginText();
stream.setFont(font, fontSize);
// Deprecated, only before 2.0:
// stream.moveTextPositionByAmount((page.getMediaBox().getWidth() - titleWidth) / 2, page.getMediaBox().getHeight() - marginTop - titleheight);
// From 2.0 and beyond:
stream.newLineAtOffset((page.getMediaBox().getWidth() - titleWidth) / 2, page.getMediaBox().getHeight() - marginTop - titleheight);
stream.drawString(title);
stream.endText();
stream.close();