如何创建自定义虚线分隔符?

时间:2015-01-03 06:36:05

标签: itext

使用DottedLineSeparator类我可以在itext中绘制虚线分隔符。同样可以绘制连续的连字符,如“---------------------'作为PdfPCell中的分隔符?

我查看了示例here。还有其他解决方案吗?

2 个答案:

答案 0 :(得分:2)

LineSeparator类可用于绘制实线水平线。作为HTML中<hr>标记的等效项,或作为同一行上两个文本部分之间的分隔符。 DottedLineSeparator扩展LineSeparator类并绘制虚线而不是实线。您可以通过更改线宽来定义点的大小,并获得一种方法来定义点之间的间隙。

您需要一个虚线,并且很容易创建自己的LineSeparator实现。最简单的方法是扩展DottedLineSeparator类,如下所示:

class CustomDashedLineSeparator extends DottedLineSeparator {
    protected float dash = 5;
    protected float phase = 2.5f;

    public float getDash() {
        return dash;
    }

    public float getPhase() {
        return phase;
    }

    public void setDash(float dash) {
        this.dash = dash;
    }

    public void setPhase(float phase) {
        this.phase = phase;
    }

    public void draw(PdfContentByte canvas, float llx, float lly, float urx, float ury, float y) {
        canvas.saveState();
        canvas.setLineWidth(lineWidth);
        canvas.setLineDash(dash, gap, phase);
        drawLine(canvas, llx, urx, y);
        canvas.restoreState();
    }
}

如您所见,我们引入了两个额外的参数,dash值和phase值。 dash值定义hyphen的长度。 phase值告诉iText从哪里开始(例如以半个连字符开头)。

请查看CustomDashedLine示例。在此示例中,我使用LineSeparator的此自定义实现,如下所示:

CustomDashedLineSeparator separator = new CustomDashedLineSeparator();
separator.setDash(10);
separator.setGap(7);
separator.setLineWidth(3);
Chunk linebreak = new Chunk(separator);
document.add(linebreak);

结果是一条虚线,连字符长10pt,厚3pt,间隙为7pt。第一个短划线只有7.5pt长,因为我们没有更改phase值。在我们的自定义实现中,我们定义了一个2.5pt的阶段,这意味着我们在2.5pt时开始10pt的连字符,产生一个长度为7.5pt的连字符。

enter image description here

您可以像使用LineSeparator一样使用此自定义DottedLineSeparator,例如作为Chunk中的PdfPCell

答案 1 :(得分:0)

tableView(_:titleForHeaderInSection:)

这也是一种解决方案:))