iText7相对iText5做了比较大的改动,网上找的一些文章有些参考价值。
大部分建议使用图片插入方式解决。但图片大小不合适会造成斜线和表格边框粗细不一致、颜色不一致、锯齿等问题。
参考官网例子:
public class DiagonalCellRenderer extends CellRenderer {
private final String textTopRight;
private final String textBottomLeft;
public DiagonalCellRenderer(Cell modelElement, String textTopRight, String textBottomLeft) {
super(modelElement);
this.textTopRight = textTopRight;
this.textBottomLeft = textBottomLeft;
}
// If a renderer overflows on the next area, iText uses #getNextRenderer() method to create a new renderer for the overflow part.
// If #getNextRenderer() isn't overridden, the default method will be used and thus the default rather than the custom
// renderer will be created
@Override
public IRenderer getNextRenderer() {
return new DiagonalCellRenderer((Cell) modelElement, textTopRight, textBottomLeft);
}
@Override
public void drawBorder(DrawContext drawContext) {
PdfCanvas canvas = drawContext.getCanvas();
Rectangle rect = getOccupiedAreaBBox();
canvas
.saveState()
.moveTo(rect.getLeft(), rect.getTop())
.lineTo(rect.getRight(), rect.getBottom())
.stroke()
.restoreState();
new Canvas(canvas, getOccupiedAreaBBox())
.showTextAligned(textTopRight, rect.getRight() - 2, rect.getTop() - 2,
TextAlignment.RIGHT, VerticalAlignment.TOP, 0)
.showTextAligned(textBottomLeft, rect.getLeft() + 2, rect.getBottom() + 2, TextAlignment.LEFT);
}
}
}
使用时在要画线的单元格上设置此renderer实例
Cell cell = new Cell();
// Draws cell content with top right text 'Gravity' and bottom left text 'Occ'
cell.setNextRenderer(new DiagonalCellRenderer(cell, "Gravity", "Occ"));
例子无法输出显示中文,针对于此,本人做了些改进。
效果如下:
修改后的类上传为资源了(本人下资料比较猛,弄得很穷,没有积分了,见谅。锁定积分:2分)。