Class PdfContentByte

java.lang.Object
org.openpdf.text.pdf.PdfContentByte
Direct Known Subclasses:
PdfTemplate

public class PdfContentByte extends Object
PdfContentByte is an object containing the user positioned text and graphic contents of a page. It knows how to apply the proper font encoding.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    The alignment is center
    static final int
    The alignment is left
    static final int
    The alignment is right
    protected ByteBuffer
    This is the actual content
    static final int
    A possible line cap value
    static final int
    A possible line join value
    protected PdfDocument
    This is the PdfDocument
    protected int
    The separator between commands.
    protected org.openpdf.text.pdf.PdfContentByte.GraphicState
    This is the GraphicState in use
    protected List<org.openpdf.text.pdf.PdfContentByte.GraphicState>
    The list were we save/restore the state
    protected PdfWriter
    This is the writer
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructs a new PdfContentByte-object.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addImage(Image image)
    Adds an Image to the page.
    void
    addImage(Image image, boolean inlineImage)
    Adds an Image to the page.
    void
    addImage(Image image, float a, float b, float c, float d, float e, float f, boolean inlineImage)
    Adds an Image to the page.
    void
    addTemplate(PdfTemplate template, double a, double b, double c, double d, double e, double f)
    Adds a template to this content using double matrices.
    void
    addTemplate(PdfTemplate template, float x, float y)
    Adds a template to this content.
    void
    addTemplate(PdfTemplate template, float a, float b, float c, float d, float e, float f)
    Adds a template to this content.
    void
    arc(float x1, float y1, float x2, float y2, float startAng, float extent)
    Draws a partial ellipse inscribed within the rectangle x1,y1,x2,y2, starting at startAng degrees and covering extent degrees.
    void
    Starts the writing of text.
    static List<float[]>
    bezierArc(float x1, float y1, float x2, float y2, float startAng, float extent)
    Generates an array of bezier curves to draw an arc.
    protected void
    Check if we have a valid PdfWriter.
    void
    Closes the current subpath by appending a straight line segment from the current point to the starting point of the subpath.
    void
    concatCTM(float a, float b, float c, float d, float e, float f)
    Concatenate a matrix to the current transformation matrix.
    createTemplate(float width, float height)
    Creates a new template.
    void
    curveTo(float x1, float y1, float x2, float y2, float x3, float y3)
    Appends a Bêzier curve to the path, starting from the current point.
    void
    ellipse(float x1, float y1, float x2, float y2)
    Draws an ellipse inscribed within the rectangle x1,y1,x2,y2.
    void
    Ends the writing of text and makes the current font invalid.
    void
    Fills the path, using the even-odd rule to determine the region to fill.
    void
    Fills the path, using the even-odd rule to determine the region to fill and strokes it.
    void
    Fills the path, using the non-zero winding number rule to determine the region to fill.
    void
    Fills the path using the non-zero winding number rule to determine the region to fill and strokes it.
    Gets the internal buffer.
    Gets the PdfDocument in use by this object.
    Gets the PdfWriter in use by this object.
    void
    lineTo(float x, float y)
    Appends a straight line segment from the current point (x, y).
    void
    moveTo(float x, float y)
    Move the current point (x, y), omitting any connecting line segment.
    void
    Ends the path without filling or stroking it.
    void
    rectangle(float x, float y, float w, float h)
    Adds a rectangle to the current path.
    void
    rectangle(Rectangle rectangle)
    Adds a border (complete or partially) to the current path..
    void
    Makes this PdfContentByte empty.
    void
    reset(boolean validateContent)
    Makes this PdfContentByte empty.
    void
    Changes the current gray tint for filling paths to black.
    void
    Changes the current gray tint for stroking paths to black.
    void
    Changes the current color for filling paths to black.
    void
    Changes the current color for stroking paths to black.
    void
    Restores the graphic state.
    void
    roundRectangle(float x, float y, float w, float h, float r)
    Adds a round rectangle to the current path.
    void
    Checks for any dangling state: Mismatched save/restore state, begin/end text, begin/end layer, or begin/end marked content sequence.
    void
    Saves the graphic state.
    void
    Sets the fill color.
    void
    Sets the stroke color.
    void
    setFontAndSize(BaseFont bf, float size)
    Set the font and the size for the subsequent text writing.
    void
    setGrayFill(float gray, float alpha)
    Changes the currentgray tint for filling paths (device dependent colors!).
    void
    setGrayStroke(float gray, float alpha)
    Changes the currentgray tint for stroking paths (device dependent colors!).
    void
    Sets the graphic state
    void
    setLineCap(int style)
    Changes the Line cap style.
    void
    setLineDash(float phase)
    Changes the value of the line dash pattern.
    void
    setLineDash(float unitsOn, float unitsOff, float phase)
    Changes the value of the line dash pattern.
    void
    setLineJoin(int style)
    Changes the Line join style.
    void
    setLineWidth(float w)
    Changes the line width.
    void
    setRGBColorFill(int red, int green, int blue, int alpha)
    Changes the current color for filling paths (device dependent colors!).
    void
    setRGBColorStroke(int red, int green, int blue, int alpha)
    Changes the current color for stroking paths (device dependent colors!).
    void
    setTextMatrix(float x, float y)
    Changes the text matrix.
    void
    setTextMatrix(float a, float b, float c, float d, float x, float y)
    Changes the text matrix.
    void
    Shows the text.
    void
    Shows the text.
    void
    Strokes the path.
    byte[]
    toPdf(PdfWriter writer)
    Returns the PDF representation of this PdfContentByte-object.
    Returns the String representation of this PdfContentByte-object.
    void
    Adds a variable width border to the current path.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • ALIGN_CENTER

      public static final int ALIGN_CENTER
      The alignment is center
      See Also:
    • ALIGN_LEFT

      public static final int ALIGN_LEFT
      The alignment is left
      See Also:
    • ALIGN_RIGHT

      public static final int ALIGN_RIGHT
      The alignment is right
      See Also:
    • LINE_CAP_BUTT

      public static final int LINE_CAP_BUTT
      A possible line cap value
      See Also:
    • LINE_JOIN_MITER

      public static final int LINE_JOIN_MITER
      A possible line join value
      See Also:
    • content

      protected ByteBuffer content
      This is the actual content
    • writer

      protected PdfWriter writer
      This is the writer
    • pdf

      protected PdfDocument pdf
      This is the PdfDocument
    • state

      protected org.openpdf.text.pdf.PdfContentByte.GraphicState state
      This is the GraphicState in use
    • stateList

      protected List<org.openpdf.text.pdf.PdfContentByte.GraphicState> stateList
      The list were we save/restore the state
    • separator

      protected int separator
      The separator between commands.
  • Constructor Details

    • PdfContentByte

      public PdfContentByte(PdfWriter wr)
      Constructs a new PdfContentByte-object.
      Parameters:
      wr - the writer associated to this content
  • Method Details

    • bezierArc

      public static List<float[]> bezierArc(float x1, float y1, float x2, float y2, float startAng, float extent)
      Generates an array of bezier curves to draw an arc.

      (x1, y1) and (x2, y2) are the corners of the enclosing rectangle. Angles, measured in degrees, start with 0 to the right (the positive X axis) and increase counter-clockwise. The arc extends from startAng to startAng+extent. I.e. startAng=0 and extent=180 yields an openside-down semi-circle.

      The resulting coordinates are of the form float[]{x1,y1,x2,y2,x3,y3, x4,y4} such that the curve goes from (x1, y1) to (x4, y4) with (x2, y2) and (x3, y3) as their respective Bezier control points.

      Note: this code was taken from ReportLab (www.reportlab.org), an excellent PDF generator for Python (BSD license: http://www.reportlab.org/devfaq.html#1.3 ).

      Parameters:
      x1 - a corner of the enclosing rectangle
      y1 - a corner of the enclosing rectangle
      x2 - a corner of the enclosing rectangle
      y2 - a corner of the enclosing rectangle
      startAng - starting angle in degrees
      extent - angle extent in degrees
      Returns:
      a list of float[] with the bezier curves
    • toString

      public String toString()
      Returns the String representation of this PdfContentByte-object.
      Overrides:
      toString in class Object
      Returns:
      a String
    • getInternalBuffer

      public ByteBuffer getInternalBuffer()
      Gets the internal buffer.
      Returns:
      the internal buffer
    • toPdf

      public byte[] toPdf(PdfWriter writer)
      Returns the PDF representation of this PdfContentByte-object.
      Parameters:
      writer - the PdfWriter
      Returns:
      a byte array with the representation
    • setLineCap

      public void setLineCap(int style)
      Changes the Line cap style.

      The line cap style specifies the shape to be used at the end of open subpaths when they are stroked.
      Allowed values are LINE_CAP_BUTT, LINE_CAP_ROUND and LINE_CAP_PROJECTING_SQUARE.

      Parameters:
      style - a value
    • setLineDash

      public void setLineDash(float phase)
      Changes the value of the line dash pattern.

      The line dash pattern controls the pattern of dashes and gaps used to stroke paths. It is specified by an array and a phase. The array specifies the length of the alternating dashes and gaps. The phase specifies the distance into the dash pattern to start the dash.

      Parameters:
      phase - the value of the phase
    • setLineDash

      public void setLineDash(float unitsOn, float unitsOff, float phase)
      Changes the value of the line dash pattern.

      The line dash pattern controls the pattern of dashes and gaps used to stroke paths. It is specified by an array and a phase. The array specifies the length of the alternating dashes and gaps. The phase specifies the distance into the dash pattern to start the dash.

      Parameters:
      unitsOn - the number of units that must be 'on'
      unitsOff - the number of units that must be 'off'
      phase - the value of the phase
    • setLineJoin

      public void setLineJoin(int style)
      Changes the Line join style.

      The line join style specifies the shape to be used at the corners of paths that are stroked.
      Allowed values are LINE_JOIN_MITER (Miter joins), LINE_JOIN_ROUND (Round joins) and LINE_JOIN_BEVEL (Bevel joins).

      Parameters:
      style - a value
    • setLineWidth

      public void setLineWidth(float w)
      Changes the line width.

      The line width specifies the thickness of the line used to stroke a path and is measured in user space units.

      Parameters:
      w - a width
    • setGrayFill

      public void setGrayFill(float gray, float alpha)
      Changes the currentgray tint for filling paths (device dependent colors!).

      Sets the color space to DeviceGray (or the DefaultGray color space), and sets the gray tint to use for filling paths.

      Parameters:
      gray - a value between 0 (black) and 1 (white)
    • resetGrayFill

      public void resetGrayFill()
      Changes the current gray tint for filling paths to black.
    • setGrayStroke

      public void setGrayStroke(float gray, float alpha)
      Changes the currentgray tint for stroking paths (device dependent colors!).

      Sets the color space to DeviceGray (or the DefaultGray color space), and sets the gray tint to use for stroking paths.

      Parameters:
      gray - a value between 0 (black) and 1 (white)
    • resetGrayStroke

      public void resetGrayStroke()
      Changes the current gray tint for stroking paths to black.
    • resetRGBColorFill

      public void resetRGBColorFill()
      Changes the current color for filling paths to black. Resetting using gray color to keep the backward compatibility.
    • resetRGBColorStroke

      public void resetRGBColorStroke()
      Changes the current color for stroking paths to black. Resetting using gray color to keep the backward compatibility.
    • moveTo

      public void moveTo(float x, float y)
      Move the current point (x, y), omitting any connecting line segment.
      Parameters:
      x - new x-coordinate
      y - new y-coordinate
    • lineTo

      public void lineTo(float x, float y)
      Appends a straight line segment from the current point (x, y). The new current point is (x, y).
      Parameters:
      x - new x-coordinate
      y - new y-coordinate
    • curveTo

      public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3)
      Appends a Bêzier curve to the path, starting from the current point.
      Parameters:
      x1 - x-coordinate of the first control point
      y1 - y-coordinate of the first control point
      x2 - x-coordinate of the second control point
      y2 - y-coordinate of the second control point
      x3 - x-coordinate of the ending point (= new current point)
      y3 - y-coordinate of the ending point (= new current point)
    • rectangle

      public void rectangle(float x, float y, float w, float h)
      Adds a rectangle to the current path.
      Parameters:
      x - x-coordinate of the starting point
      y - y-coordinate of the starting point
      w - width
      h - height
    • variableRectangle

      public void variableRectangle(Rectangle rect)
      Adds a variable width border to the current path. Only use if Rectangle.isUseVariableBorders = true.
      Parameters:
      rect - a Rectangle
    • rectangle

      public void rectangle(Rectangle rectangle)
      Adds a border (complete or partially) to the current path..
      Parameters:
      rectangle - a Rectangle
    • closePath

      public void closePath()
      Closes the current subpath by appending a straight line segment from the current point to the starting point of the subpath.
    • newPath

      public void newPath()
      Ends the path without filling or stroking it.
    • stroke

      public void stroke()
      Strokes the path.
    • fill

      public void fill()
      Fills the path, using the non-zero winding number rule to determine the region to fill.
    • eoFill

      public void eoFill()
      Fills the path, using the even-odd rule to determine the region to fill.
    • fillStroke

      public void fillStroke()
      Fills the path using the non-zero winding number rule to determine the region to fill and strokes it.
    • eoFillStroke

      public void eoFillStroke()
      Fills the path, using the even-odd rule to determine the region to fill and strokes it.
    • addImage

      public void addImage(Image image) throws DocumentException
      Adds an Image to the page. The Image must have absolute positioning.
      Parameters:
      image - the Image object
      Throws:
      DocumentException - if the Image does not have absolute positioning
    • addImage

      public void addImage(Image image, boolean inlineImage) throws DocumentException
      Adds an Image to the page. The Image must have absolute positioning. The image can be placed inline.
      Parameters:
      image - the Image object
      inlineImage - true to place this image inline, false otherwise
      Throws:
      DocumentException - if the Image does not have absolute positioning
    • addImage

      public void addImage(Image image, float a, float b, float c, float d, float e, float f, boolean inlineImage) throws DocumentException
      Adds an Image to the page. The positioning of the Image is done with the transformation matrix. To position an image at (x,y) use addImage(image, image_width, 0, 0, image_height, x, y). The image can be placed inline.
      Parameters:
      image - the Image object
      a - an element of the transformation matrix
      b - an element of the transformation matrix
      c - an element of the transformation matrix
      d - an element of the transformation matrix
      e - an element of the transformation matrix
      f - an element of the transformation matrix
      inlineImage - true to place this image inline, false otherwise
      Throws:
      DocumentException - on error
    • reset

      public void reset()
      Makes this PdfContentByte empty. Calls reset( true )
    • reset

      public void reset(boolean validateContent)
      Makes this PdfContentByte empty.
      Parameters:
      validateContent - will call sanityCheck() if true.
      Since:
      2.1.6
    • beginText

      public void beginText()
      Starts the writing of text.
    • endText

      public void endText()
      Ends the writing of text and makes the current font invalid.
    • saveState

      public void saveState()
      Saves the graphic state. saveState and restoreState must be balanced.
    • restoreState

      public void restoreState()
      Restores the graphic state. saveState and restoreState must be balanced.
    • setFontAndSize

      public void setFontAndSize(BaseFont bf, float size)
      Set the font and the size for the subsequent text writing.
      Parameters:
      bf - the font
      size - the font size in points
    • showText

      public void showText(String text)
      Shows the text.
      Parameters:
      text - the text to write
    • showTextBasic

      public void showTextBasic(String text)
      Shows the text. LayoutProcessor is not used.
      Parameters:
      text - the text to write
    • setTextMatrix

      public void setTextMatrix(float a, float b, float c, float d, float x, float y)
      Changes the text matrix.

      Remark: this operation also initializes the current point position.

      Parameters:
      a - operand 1,1 in the matrix
      b - operand 1,2 in the matrix
      c - operand 2,1 in the matrix
      d - operand 2,2 in the matrix
      x - operand 3,1 in the matrix
      y - operand 3,2 in the matrix
    • setTextMatrix

      public void setTextMatrix(float x, float y)
      Changes the text matrix. The first four parameters are {1,0,0,1}.

      Remark: this operation also initializes the current point position.

      Parameters:
      x - operand 3,1 in the matrix
      y - operand 3,2 in the matrix
    • concatCTM

      public void concatCTM(float a, float b, float c, float d, float e, float f)
      Concatenate a matrix to the current transformation matrix.
      Parameters:
      a - an element of the transformation matrix
      b - an element of the transformation matrix
      c - an element of the transformation matrix
      d - an element of the transformation matrix
      e - an element of the transformation matrix
      f - an element of the transformation matrix
    • arc

      public void arc(float x1, float y1, float x2, float y2, float startAng, float extent)
      Draws a partial ellipse inscribed within the rectangle x1,y1,x2,y2, starting at startAng degrees and covering extent degrees. Angles start with 0 to the right (+x) and increase counter-clockwise.
      Parameters:
      x1 - a corner of the enclosing rectangle
      y1 - a corner of the enclosing rectangle
      x2 - a corner of the enclosing rectangle
      y2 - a corner of the enclosing rectangle
      startAng - starting angle in degrees
      extent - angle extent in degrees
    • ellipse

      public void ellipse(float x1, float y1, float x2, float y2)
      Draws an ellipse inscribed within the rectangle x1,y1,x2,y2.
      Parameters:
      x1 - a corner of the enclosing rectangle
      y1 - a corner of the enclosing rectangle
      x2 - a corner of the enclosing rectangle
      y2 - a corner of the enclosing rectangle
    • createTemplate

      public PdfTemplate createTemplate(float width, float height)
      Creates a new template.

      Creates a new template that is nothing more than a form XObject. This template can be included in this PdfContentByte or in another template. Templates are only written to the output when the document is closed permitting things like showing text in the first page that is only defined in the last page.

      Parameters:
      width - the bounding box width
      height - the bounding box height
      Returns:
      the created template
    • addTemplate

      public void addTemplate(PdfTemplate template, float a, float b, float c, float d, float e, float f)
      Adds a template to this content.
      Parameters:
      template - the template
      a - an element of the transformation matrix
      b - an element of the transformation matrix
      c - an element of the transformation matrix
      d - an element of the transformation matrix
      e - an element of the transformation matrix
      f - an element of the transformation matrix
    • addTemplate

      public void addTemplate(PdfTemplate template, float x, float y)
      Adds a template to this content.
      Parameters:
      template - the template
      x - the x location of this template
      y - the y location of this template
    • addTemplate

      public void addTemplate(PdfTemplate template, double a, double b, double c, double d, double e, double f)
      Adds a template to this content using double matrices.
      Parameters:
      template - the template
      a - an element of the transformation matrix
      b - an element of the transformation matrix
      c - an element of the transformation matrix
      d - an element of the transformation matrix
      e - an element of the transformation matrix
      f - an element of the transformation matrix
    • setRGBColorFill

      public void setRGBColorFill(int red, int green, int blue, int alpha)
      Changes the current color for filling paths (device dependent colors!).

      Sets the color space to DeviceRGB (or the DefaultRGB color space), and sets the color to use for filling paths.

      This method is described in the 'Portable Document Format Reference Manual version 1.3' section 8.5.2.1 (page 331).

      Following the PDF manual, each operand must be a number between 0 (minimum intensity) and 1 (maximum intensity). This method however accepts only integers between 0x00 and 0xFF.

      Parameters:
      red - the intensity of red
      green - the intensity of green
      blue - the intensity of blue
    • setRGBColorStroke

      public void setRGBColorStroke(int red, int green, int blue, int alpha)
      Changes the current color for stroking paths (device dependent colors!).

      Sets the color space to DeviceRGB (or the DefaultRGB color space), and sets the color to use for stroking paths.

      This method is described in the 'Portable Document Format Reference Manual version 1.3' section 8.5.2.1 (page 331).

      Following the PDF manual, each operand must be a number between 0 (minimum intensity) and 1 (maximum intensity). This method however accepts only integers between 0x00 and 0xFF.
      Parameters:
      red - the intensity of red
      green - the intensity of green
      blue - the intensity of blue
    • setColorStroke

      public void setColorStroke(Color color)
      Sets the stroke color. color can be an ExtendedColor.
      Parameters:
      color - the color
    • setColorFill

      public void setColorFill(Color color)
      Sets the fill color. color can be an ExtendedColor.
      Parameters:
      color - the color
    • checkWriter

      protected void checkWriter()
      Check if we have a valid PdfWriter.
    • getPdfWriter

      public PdfWriter getPdfWriter()
      Gets the PdfWriter in use by this object.
      Returns:
      the PdfWriter in use by this object
    • getPdfDocument

      public PdfDocument getPdfDocument()
      Gets the PdfDocument in use by this object.
      Returns:
      the PdfDocument in use by this object
    • roundRectangle

      public void roundRectangle(float x, float y, float w, float h, float r)
      Adds a round rectangle to the current path.
      Parameters:
      x - x-coordinate of the starting point
      y - y-coordinate of the starting point
      w - width
      h - height
      r - radius of the arc corner
    • setGState

      public void setGState(PdfGState gstate)
      Sets the graphic state
      Parameters:
      gstate - the graphic state
    • sanityCheck

      public void sanityCheck()
      Checks for any dangling state: Mismatched save/restore state, begin/end text, begin/end layer, or begin/end marked content sequence. If found, this function will throw. This function is called automatically during a reset() (from Document.newPage() for example), and before writing itself out in toPdf(). One possible cause: not calling myPdfGraphics2D.dispose() will leave dangling saveState() calls.
      Throws:
      IllegalPdfSyntaxException - (a runtime exception)
      Since:
      2.1.6