iText7 解套 (一) 原生方法输出带斜线表格

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分)。

https://download.csdn.net/download/BigBad/34896789

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值