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

Itext 如何创建自定义虚线分隔符?,itext,Itext,使用DottedLineSeparator类,我能够在itext中绘制虚线分隔符。类似地,是否可以在PdfPCell中绘制连续连字符,如“-----------------”作为分隔符 我检查了这个例子。还有其他解决方案吗?可以使用LineSeparator类绘制实心水平线。作为HTML中的标记的等价物,或作为同一行中文本两部分之间的分隔符。DottedLineSeparator扩展了LineSeparator类,并绘制虚线而不是实线。您可以通过更改线宽来定义点的大小,并获得定义点之间间距的方法

使用DottedLineSeparator类,我能够在itext中绘制虚线分隔符。类似地,是否可以在PdfPCell中绘制连续连字符,如“-----------------”作为分隔符


我检查了这个例子。还有其他解决方案吗?

可以使用
LineSeparator
类绘制实心水平线。作为HTML中的

标记的等价物,或作为同一行中文本两部分之间的分隔符。
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();
    }
}
CustomDashedLineSeparator separator = new CustomDashedLineSeparator();
separator.setDash(10);
separator.setGap(7);
separator.setLineWidth(3);
Chunk linebreak = new Chunk(separator);
document.add(linebreak);
如您所见,我们引入了两个额外的参数,一个
破折号
值和一个
相位
值。
dash
值定义了
连字符的长度。
阶段
值告诉iText从何处开始(例如,以半个连字符开始)

请看一看这个例子。在本例中,我使用
LineSeparator
的自定义实现,如下所示:

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();
    }
}
CustomDashedLineSeparator separator = new CustomDashedLineSeparator();
separator.setDash(10);
separator.setGap(7);
separator.setLineWidth(3);
Chunk linebreak = new Chunk(separator);
document.add(linebreak);
结果是一条虚线,连字符长10磅,厚3磅,间距为7磅。第一个破折号只有7.5pt长,因为我们没有更改
阶段
值。在我们的自定义实现中,我们定义了一个2.5pt的阶段,这意味着我们从2.5pt开始使用10pt的连字符,从而产生一个长度为7.5pt的连字符


您可以使用此自定义的
LineSeparator
,使用方式与使用
DottedLineSeparator
相同,例如,在
PdfPCell
中作为
LineSeparator
类可用于绘制实心水平线。作为HTML中的

标记的等价物,或作为同一行中文本两部分之间的分隔符。
DottedLineSeparator
扩展了
LineSeparator
类,并绘制虚线而不是实线。您可以通过更改线宽来定义点的大小,并获得定义点之间间距的方法

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);
}
您需要一条虚线,并且很容易创建自己的
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();
    }
}
CustomDashedLineSeparator separator = new CustomDashedLineSeparator();
separator.setDash(10);
separator.setGap(7);
separator.setLineWidth(3);
Chunk linebreak = new Chunk(separator);
document.add(linebreak);
如您所见,我们引入了两个额外的参数,一个
破折号
值和一个
相位
值。
dash
值定义了
连字符的长度。
阶段
值告诉iText从何处开始(例如,以半个连字符开始)

请看一看这个例子。在本例中,我使用
LineSeparator
的自定义实现,如下所示:

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();
    }
}
CustomDashedLineSeparator separator = new CustomDashedLineSeparator();
separator.setDash(10);
separator.setGap(7);
separator.setLineWidth(3);
Chunk linebreak = new Chunk(separator);
document.add(linebreak);
结果是一条虚线,连字符长10磅,厚3磅,间距为7磅。第一个破折号只有7.5pt长,因为我们没有更改
阶段
值。在我们的自定义实现中,我们定义了一个2.5pt的阶段,这意味着我们从2.5pt开始使用10pt的连字符,从而产生一个长度为7.5pt的连字符


您可以使用此自定义的
LineSeparator
,使用方式与使用
DottedLineSeparator
相同,例如,在
PdfPCell
中作为
LineSeparator
类可用于绘制实心水平线。作为HTML中的

标记的等价物,或作为同一行中文本两部分之间的分隔符。
DottedLineSeparator
扩展了
LineSeparator
类,并绘制虚线而不是实线。您可以通过更改线宽来定义点的大小,并获得定义点之间间距的方法

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);
}
您需要一条虚线,并且很容易创建自己的
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();
    }
}
CustomDashedLineSeparator separator = new CustomDashedLineSeparator();
separator.setDash(10);
separator.setGap(7);
separator.setLineWidth(3);
Chunk linebreak = new Chunk(separator);
document.add(linebreak);
如您所见,我们引入了两个额外的参数,一个
破折号
值和一个
相位
值。
dash
值定义了
连字符的长度。
阶段
值告诉iText从何处开始(例如,以半个连字符开始)

请看一看这个例子。在本例中,我使用
LineSeparator
的自定义实现,如下所示:

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();
    }
}
CustomDashedLineSeparator separator = new CustomDashedLineSeparator();
separator.setDash(10);
separator.setGap(7);
separator.setLineWidth(3);
Chunk linebreak = new Chunk(separator);
document.add(linebreak);
结果是一条虚线,连字符长10磅,厚3磅,间距为7磅。第一个破折号只有7.5pt长,因为我们没有更改
阶段
值。在我们的自定义实现中,我们定义了一个2.5pt的阶段,这意味着我们从2.5pt开始使用10pt的连字符,从而产生一个长度为7.5pt的连字符


您可以使用此自定义的
LineSeparator
,使用方式与使用
DottedLineSeparator
相同,例如,在
PdfPCell
中作为
LineSeparator
类可用于绘制实心水平线。作为HTML中的

标记的等价物,或作为同一行中文本两部分之间的分隔符。
DottedLineSeparator
扩展了
LineSeparator
类,并绘制虚线而不是实线。您可以通过更改线宽来定义点的大小,并获得定义点之间间距的方法

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);
}
您需要一条虚线,并且很容易创建自己的
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();
    }
}
CustomDashedLineSeparator separator = new CustomDashedLineSeparator();
separator.setDash(10);
separator.setGap(7);
separator.setLineWidth(3);
Chunk linebreak = new Chunk(separator);
document.add(linebreak);
如您所见,我们引入了两个额外的参数,一个
破折号
值和一个
相位
值。
破折号
值定义了破折号的长度