Установка фонового изображения в ячейку заголовка - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь установить фоновое изображение для своей таблицы ячеек заголовка, используя этот код:

Image esq = new Image(ImageDataFactory.create(IMG1));
Cell cellh = new Cell();
cellh.setBorder(Border.NO_BORDER);
cellh.setNextRenderer(new ImageBackgroundCellRenderer(cellh, esq)); 
table.addHeaderCell(cellh);

Проблема в том, что фоновая картинка отображается только на первой странице;остальные пустые.Как я могу решить это?

1 Ответ

0 голосов
/ 28 ноября 2018

В качестве общего правила прояснения вопросов, пожалуйста, приложите код всех используемых вами классов, например 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...