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

How to create a custom dashed line separator?

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

我检查了示例 here。还有其他可用的解决方案吗?

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

您需要一条虚线,创建您自己的 LineSeparator 实现非常容易。最简单的方法是像这样扩展 DottedLineSeparator class:

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 的连字符。

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

中的 Chunk
double wPage = doc.PageSize.Width;
double hPage = doc.PageSize.Height;

cb.MoveTo(0,hPage/2);
for (int i = 0; i < wPage; i+=5)
{
    cb.LineTo(i, hPage / 2);
    i += 5;
    cb.MoveTo(i, hPage / 2);
}

这是 :))

的解决方案