How to create a custom dashed line separator?

前端 未结 2 367
猫巷女王i
猫巷女王i 2020-12-22 05:30

Using DottedLineSeparator class i am able to draw dotted line separator in itext. Similarly is it possible to draw continuous hyphens like \'---------------------\' as separ

2条回答
  •  醉梦人生
    2020-12-22 05:51

    The LineSeparator class can be used to draw a solid horizontal line. Either as the equivalent of the


    tag in HTML, or as a separator between two parts of text on the same line. The DottedLineSeparator extends the LineSeparator class and draws a dotted line instead of a solid line. You can define the size of the dots by changing the line width and you get a method to define the gap between the dots.

    You require a dashed line and it's very easy to create your own LineSeparator implementation. The easiest way to do this, is by extending the DottedLineSeparator class like this:

    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();
        }
    }
    

    As you can see, we introduce two extra parameters, a dash value and a phase value. The dash value defines the length of the hyphen. The phase value tells iText where to start (e.g. start with half a hyphen).

    Please take a look at the CustomDashedLine example. In this example, I use this custom implementation of the LineSeparator like this:

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

    The result is a dashed line with hyphens of 10pt long and 3pt thick, with gaps of 7pt. The first dash is only 7.5pt long because we didn't change the phase value. In our custom implementation, we defined a phase of 2.5pt, which means that we start the hyphen of 10pt at 2.5pt, resulting in a hyphen with length 7.5pt.

    enter image description here

    You can use this custom LineSeparator in the same way you use the DottedLineSeparator, e.g. as a Chunk in a PdfPCell.

提交回复
热议问题