Ознакомьтесь с руководством по iText 7: Building Blocks.
В разделе прежде чем мы начнем мы видим, что каждый стандартный блок является производным от класса с именем ElementPropertyContainer
. Этот класс является контейнером свойств.
В случае класса Cell
существует набор свойств, определяющих заполнение. Вы можете получить эти свойства общим способом (используя метод класса AbstractElement
) следующим образом:
System.out.println(cell.getProperty(Property.PADDING_LEFT));
System.out.println(cell.getProperty(Property.PADDING_RIGHT));
System.out.println(cell.getProperty(Property.PADDING_TOP));
System.out.println(cell.getProperty(Property.PADDING_BOTTOM));
Но зачем усложнять, если можно просто использовать удобные методы, доступные в классе BlockElement
:
System.out.println(cell.getPaddingLeft());
System.out.println(cell.getPaddingRight());
System.out.println(cell.getPaddingTop());
System.out.println(cell.getPaddingBottom());
Как вы можете видеть в учебнике, класс Cell
является подклассом класса BlockElement
. BlockElement
является подклассом класса AbstractElement
. Класс AbstractElement
является подклассом класса ElementPropertyContainer
.
Если вы хотите изменить отступы (или поля, если хотите), прочтите глава 5 этого руководства. В нем есть пример с именем CellMarginPadding. а>:
public void createPdf(String dest) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
Document document = new Document(pdf);
Table table = new Table(new float[]{2, 1, 1});
table.setBackgroundColor(Color.ORANGE);
table.setWidthPercent(80);
table.setHorizontalAlignment(HorizontalAlignment.CENTER);
table.addCell(
new Cell(1, 3).add("Cell with colspan 3")
.setPadding(10).setMargin(5).setBackgroundColor(Color.GREEN));
table.addCell(new Cell(2, 1).add("Cell with rowspan 2")
.setMarginTop(5).setMarginBottom(5).setPaddingLeft(30)
.setFontColor(Color.WHITE).setBackgroundColor(Color.BLUE));
table.addCell(new Cell().add("row 1; cell 1")
.setFontColor(Color.WHITE).setBackgroundColor(Color.RED));
table.addCell(new Cell().add("row 1; cell 2"));
table.addCell(new Cell().add("row 2; cell 1").setMargin(10)
.setFontColor(Color.WHITE).setBackgroundColor(Color.RED));
table.addCell(new Cell().add("row 2; cell 2").setPadding(10)
.setFontColor(Color.WHITE).setBackgroundColor(Color.RED));
document.add(table);
document.close();
}
Вот как это выглядит:
Извините, если это немного режет глаза, но использование этих цветов показалось мне лучшим способом объяснить разницу между полем и отступом.
Большинство свойств передается по наследству. Например: если вы установите шрифт для Div
, этот шрифт будет шрифтом по умолчанию для всех элементов, добавленных к этому Div
. Однако есть некоторые исключения. Прокладка — одна из них. Вот как были определены значения по умолчанию для свойств, специфичных для класса Cell
:
@Override
public <T1> T1 getDefaultProperty(int property) {
switch (property) {
case Property.BORDER:
return (T1) (Object) DEFAULT_BORDER;
case Property.PADDING_BOTTOM:
case Property.PADDING_LEFT:
case Property.PADDING_RIGHT:
case Property.PADDING_TOP:
return (T1) (Object) 2f;
default:
return super.<T1>getDefaultProperty(property);
}
}
Как видите, для всей ячейки нет значения заполнения; заполнение состоит из четырех значений, которые, кстати, идентичны по умолчанию.
Если вы не хотите определять заполнение, отличное от значения по умолчанию для каждого Cell
, просто создайте подкласс Cell
и назовите его MyCustomCell
. Сделайте его настраиваемым в том смысле, что он использует заполнение по вашему выбору, переопределив класс getDefaultProperty()
.
В руководстве вы найдете пример подкласса, который рисует ячейки с границами, имеющими закругленные углы, поэтому нам не нужно устанавливать декларацию средства визуализации каждый раз, когда мы хотим ввести более закругленные углы.
Я являюсь автором этой документации. Надеюсь, вам будет полезно ответить на эти и другие вопросы о Cell
и других объектах в iText 7.
person
Bruno Lowagie
schedule
17.08.2016