У меня Div определенной высоты:
Div div = new Div();
div.setHeight(100);
Если в Div я добавляю параграф из нескольких строк, занимающий область выше Div, я получаю следующее предупреждение:
WARN com.itextpdf.layout.renderer.BlockRenderer - Element content was clipped because some height properties are set.
Кроме того, опускаются строки абзаца. Хотя абзац может выходить за нижнюю границу Div, он заканчивается над рамкой.
Но, несмотря на предупреждение, мне все равно, и мне даже нужно, чтобы абзац скрытно переполнялся под нижней границей Div.
Как мне добиться такого поведения?
(CSS-эквивалент нужного мне поведения может быть достигнут установкой overflow: hidden на HTML <div>.)
Пользователь, вероятно, ожидал, что он будет доступен для поиска. Но это не самое главное: главная цель - чтобы пользователь увидел, что абзац находится слишком высоко. Они могут увидеть это только с первого взгляда, если абзац не усечен до целых строк. Пользователь должен видеть, что абзац пересекает нижнюю границу и продолжается ниже этой границы, хотя и незаметно. Div должен «обрезать» абзац так же, как я бы обрезал изображение в графическом редакторе. Я добавил к своему вопросу эквивалент CSS (overflow: hidden). Это то поведение, которое мне нужно.




Можно ли наложить градиент с альфой на нижнюю часть div? Тогда, даже если текст обрезается на целой строке, ясно, что текст обрезается, а не только заканчивается. 
Возможно, есть способ для этого, но может быть проще просто сохранить изображение для этой цели и выровнять его по нижней части div, поскольку кажется, что размер div фиксирован. Как то так (но с альфой) 
Если он не исправлен, его должно быть достаточно легко для динамического создания.
Хотя это и не технический ответ, мне действительно нравится это предложение. (И да: технически возможно создать такую реализацию DivRenderer.)
Вы можете рассмотреть возможность использования специального DivRenderer для этих DIV.
Доказательство концепции:
public class OverflowHiddenDivRenderer extends DivRenderer {
public OverflowHiddenDivRenderer(Div modelElement) {
super(modelElement);
}
@Override
public Rectangle getOccupiedAreaBBox() {
Rectangle rectangle = super.getOccupiedAreaBBox();
if (height != null) {
if (rectangle.getHeight() > height.getValue()) {
rectangle.moveUp(rectangle.getHeight() - height.getValue()).setHeight(height.getValue());
}
}
return rectangle;
}
@Override
public LayoutResult layout(LayoutContext layoutContext) {
height = getPropertyAsUnitValue(Property.HEIGHT);
deleteProperty(Property.HEIGHT);
LayoutResult layoutResult = super.layout(layoutContext);
LayoutArea layoutArea = layoutResult.getOccupiedArea();
if (layoutArea != null) {
layoutArea.setBBox(getOccupiedAreaBBox());
}
return layoutResult;
}
UnitValue height;
}
Используя это так:
for (int height = 100; height < 150; height += 5) {
Div div = new Div();
div.setProperty(Property.OVERFLOW_Y, OverflowPropertyValue.HIDDEN);
div.add(new Paragraph(height + " Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."));
div.setHeight(height);
div.setNextRenderer(new OverflowHiddenDivRenderer(div));
document.add(div);
}
(RenderDivOverflowHidden тест testOverflowHiddenDivRenderer)
для Document document вы получаете
Будьте осторожны, хотя я уже довольно давно пользуюсь iText 7, это моя первая попытка создать собственный DivRenderer, и я, возможно, забыл о некоторых особых случаях. Я думаю, в частности, о проблемах в контексте повернутого контента (который в super.getOccupiedAreaBBox() имеет влияние) или разрывов областей (я не устанавливаю следующий рендерер в OverflowHiddenDivRenderer с адаптированной высотой).
Некоторые люди, более опытные в этом деле, могут предложить некоторые улучшения ...