How to get rid of the top padding in a PdfPCell?
I have various zones on the label as PdfPCell
s. I need to fit text into these zones with 0 wasted space. But I always seem to have extra space at the top of the cell. This is best illustrated by using setVerticalAlignment(Element.ALIGN_TOP)
which doesn't result in positioning the text near the top border of my cell, even with padding 0. How can I get rid of that top padding?
This is my code so far: PdfPCell companyCell = new PdfPCell(companyPhrase); companyCell.setHorizontalAlignment(Element.ALIGN_CENTER); companyCell.setVerticalAlignment(Element.ALIGN_TOP); companyCell.setBorder(Rectangle.BOX); companyCell.setBorderColor(BaseColor.RED); companyCell.setPadding(0); companyCell.setFixedHeight(10.5f);
companyCell.setBackgroundColor(BaseColor.WHITE);
Posted on StackOverflow on Jul 17, 2015 by Richard Roman
You are very close to the solution. All the properties you're setting are OK, now try adding:
companyCell.setUseAscender(true);
companyCell.setUseDescender(true);
What do these methods do? They take into account metrics that are stored in the font that is being used. You talk about the top padding, but you'll notice that the "descender" will also have a nice effect on the bottom padding.
The top "padding" isn't really a padding. It's the "leading". You are using the default font, which is Helvetica 12pt. The default leading is 1.5 times the font size. That's 18pt. You are working in text mode, which means that you can define the leading at the level of the cell (as opposed to composite mode where you define the leading at the level of the elements). For instance: you can remove 4pt from the top "padding" like this:
companyCell.setLeading(14);
Important: this will also reduce the spacing between the different lines. If that i not an option, you may want to switch to composite mode.