微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

生成下划线波形 itext7

如何解决生成下划线波形 itext7

如何在 :

之间绘制特定的下划线
String s = "This text is underlined with a dashed line";
Paragraph paragraph = new Paragraph();
Text text;
for (int i = 0; i <s.length() ; i++) {
    text = new Text(String.valueOf(s.charat(i)));
    paragraph.add(text);
    text.setNextRenderer(new DashedLineTextRenderer(text));
}

doc.add(paragraph);
doc.close();

private static class DashedLineTextRenderer extends TextRenderer {

    public DashedLineTextRenderer(Text textElement) {
        super(textElement);
    }

    // If renderer overflows on the next area,iText uses getNextRender() method to create a renderer for the overflow part.
    // If getNextRenderer isn't overriden,the default method will be used and thus a default rather than custom
    // renderer will be created
    @Override
    public IRenderer getNextRenderer() {

        return new DashedLineTextRenderer((Text) modelElement);
    }

    @Override
    public void draw(DrawContext drawContext) {
        super.draw(drawContext);
        Rectangle rect = this.getoccupiedAreaBBox();
        PdfCanvas canvas = drawContext.getCanvas();
        canvas.moveto(rect.getLeft(),rect.getBottom());

        canvas.curveto(rect.getLeft()+100,rect.getBottom()+5,rect.getLeft()+150,rect.getBottom()-2,rect.getLeft()+200,rect.getBottom()-5);
        canvas.stroke();
    }
}

如果我使用单元素文本,它可以工作: enter image description here

如果有多个文本元素,我如何定义画布的位置

解决方法

问题未详细说明(请参阅澄清评论)。基本上是为了避免屏幕截图上的重叠:

bad result

您可以为 last_day(CREATED_AT::DATE,'week') as "LAST_DAY_OF_WEEK" 而不是 Paragraph 自定义渲染器:

Text
private static class WaveUnderlinedParagraphRenderer extends ParagraphRenderer {
    public WaveUnderlinedParagraphRenderer(Paragraph paragraph) {
        super(paragraph);
    }

    @Override
    public void draw(DrawContext drawContext) {
        super.draw(drawContext);
        Rectangle rect = this.getOccupiedAreaBBox();
        PdfCanvas canvas = drawContext.getCanvas();
        canvas.moveTo(rect.getLeft(),rect.getBottom());

        canvas.curveTo(rect.getLeft() + 100,rect.getBottom() + 5,rect.getLeft() + 150,rect.getBottom() - 2,rect.getLeft() + 200,rect.getBottom() - 5);
        canvas.stroke();
    }

    @Override
    public IRenderer getNextRenderer() {
        return new WaveUnderlinedParagraphRenderer((Paragraph) modelElement);
    }
}

得到如下结果:

result

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。