Ответ 1
Согласно Логаджи:
PdfPCell cell = new PdfPCell(new Phrase("blah Blah blah");
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
Это всегда правильно в техническом смысле, но иногда выглядит плохо.
Центрировать, нарисуйте поле вокруг объекта, найдите его середину и выровняйте его с центром окружающего объекта.
iText таким образом находит центр фразы и выравнивает ее. Но человеческие глаза иногда сосредотачиваются на основном тексте, скажем, на части шрифта между базовой линией и высотой шапки. Чтобы он выглядел хорошо, вам нужно сосредоточиться на этом.
Phrase content = new Phrase("Blah blah blah", Font);
Float fontSize = content.getFont().getSize();
Float capHeight = content.getFont().getBaseFont().getFontDescriptor(BaseFont.CAPHEIGHT, fontSize);
Float padding = 5f;
PdfPCell cell = new PdfPCell(content);
cell.setPadding(padding);
cell.setPaddingTop(capHeight - fontSize + padding);
Обратите внимание, что метод PdfPCell setVerticalAlignment (..) не используется.
Кажется, что это не обязательно будет работать для многострочной фразы, но это так.
Проблема будет очевидна, если iText может показывать ограничивающие поля вокруг вещей (ум, вы можете сказать iText, чтобы рисовать ограничивающие поля, это просто больше, чем волшебный переключатель включения/выключения).
Это решение адаптировано из email от Paulo Soares.