我正在尝试使用以下代码在Header Cell表中设置背景图像:
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);
问题在于,只有第一页显示背景图片;其他的是空白的。我该怎么解决?
答案 0 :(得分:1)
作为明确说明问题的一般规则,请附上您正在使用的所有类的代码,例如您所引用的ImageBackgroundCellRenderer
。此类不是标准iText7 API的一部分。
我假设您正在使用与以下类似的实现:
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);
}
}