В качестве общего правила прояснения вопросов, пожалуйста, приложите код всех используемых вами классов, например ImageBackgroundCellRenderer
, на который вы ссылаетесь.Этот класс не является частью стандартного API iText7.
Я предполагаю, что вы используете реализацию, аналогичную следующей:
private class ImageBackgroundCellRenderer extends CellRenderer {
protected Image img;
public ImageBackgroundCellRenderer(Cell modelElement, Image img) {
super(modelElement);
this.img = img;
}
@Override
public void draw(DrawContext drawContext) {
img.scaleToFit(getOccupiedAreaBBox().getWidth(), getOccupiedAreaBBox().getHeight());
drawContext.getCanvas().addXObject(img.getXObject(), getOccupiedAreaBBox());
super.draw(drawContext);
}
}
Эта реализация может быть найдена в примерах, и онарешает задачу, которую должен решить для этого образца.
В вашем случае вы рассматриваете возможность повторного использования ячейки.Пользовательские средства визуализации для элементов, которые используются повторно или могут быть разделены на несколько страниц, должны переопределить / внедрить метод getNextRenderer()
, который создает аналогичное средство визуализации, которое можно использовать для дальнейшей обработки (средства визуализации нельзя использовать самостоятельно, если они уже нарисованы),Реализация будет выглядеть следующим образом:
@Override
public IRenderer getNextRenderer() {
return new ImageBackgroundCellRenderer((Cell) modelElement, img);
}
В целом, следующий код должен получить желаемый результат:
private class ImageBackgroundCellRenderer extends CellRenderer {
protected Image img;
public ImageBackgroundCellRenderer(Cell modelElement, Image img) {
super(modelElement);
this.img = img;
}
@Override
public void draw(DrawContext drawContext) {
img.scaleToFit(getOccupiedAreaBBox().getWidth(), getOccupiedAreaBBox().getHeight());
drawContext.getCanvas().addXObject(img.getXObject(), getOccupiedAreaBBox());
super.draw(drawContext);
}
@Override
public IRenderer getNextRenderer() {
return new ImageBackgroundCellRenderer((Cell) modelElement, img);
}
}