Как уже упоминалось в комментарии, это не вопрос вертикального выравнивания (ну, не в первую очередь, мы будем использовать вертикальное выравнивание для вертикальной корректировки текста в ячейках внешнего заголовка), но вместо этогоиз повернутый текст .
Вы можете создать таблицу, подобную изображению, например:
ISplitCharacters noSplit = (text, glyphPos) -> false;
Table table = new Table(4);
table.addHeaderCell(new Cell().add(new Paragraph("First Col Header"))
.setVerticalAlignment(VerticalAlignment.BOTTOM));
table.addHeaderCell(new Paragraph("Second Column Header")
.setRotationAngle(Math.PI / 2).setSplitCharacters(noSplit));
table.addHeaderCell(new Cell().add(new Paragraph("Third Column Header").setRotationAngle(Math.PI / 2)
.setSplitCharacters(noSplit)).setVerticalAlignment(VerticalAlignment.BOTTOM));
table.addHeaderCell(new Cell().add(new Paragraph("Fourth Column Header"))
.setVerticalAlignment(VerticalAlignment.BOTTOM));
table.addCell("Row 1 Description");
table.addCell("12");
table.addCell("15");
table.addCell("27");
table.addCell("Row 2 Description");
table.addCell("25");
table.addCell("12");
table.addCell("37");
table.addCell("Sum");
table.addCell("37");
table.addCell("27");
table.addCell("64");
doc.add(table);
( CreateTableWithRotatedHeader test testCreateTableForUser648026
)
Чтобы получить повернутый текст, мы применяем setRotationAngle(Math.PI / 2)
к рассматриваемым абзацам.
Чтобы предотвратить разбиение повернутого текста на несколько строк, мы не рекомендуем применять разбиение.setSplitCharacters(noSplit)
.
Чтобы текст столбцов располагался внизу ячеек заголовка, а не вверху (по умолчанию), мы применяем setVerticalAlignment(VerticalAlignment.BOTTOM)
к ячейкам.
Результат: