org.apache.pdfbox.pdmodel

## Class PDPageContentStream

- java.lang.Object
- - org.apache.pdfbox.pdmodel.PDPageContentStream

All Implemented Interfaces:
  Closeable, AutoCloseable

    public final class PDPageContentStream
    extends Object
    implements Closeable

Provides the ability to write to a page content stream.

Author:
  Ben Litchfield

### Nested Class Summary

Nested Classes
`static class` `PDPageContentStream.AppendMode` This is to choose what to do with the stream: overwrite, append or prepend.

### Field Summary

Fields
`protected PDDocument` `document`
`protected Deque<PDFont>` `fontStack`
`protected boolean` `inTextMode`
`protected Deque<PDColorSpace>` `nonStrokingColorSpaceStack`
`protected OutputStream` `outputStream`
`protected PDResources` `resources`
`protected Deque<PDColorSpace>` `strokingColorSpaceStack`

### Constructor Summary

Constructors
Constructor and Description
`PDPageContentStream(PDDocument doc, PDAppearanceStream appearance)` Create a new appearance stream.
`PDPageContentStream(PDDocument doc, PDAppearanceStream appearance, OutputStream outputStream)` Create a new appearance stream.
`PDPageContentStream(PDDocument document, PDPage sourcePage)` Create a new PDPage content stream.
`PDPageContentStream(PDDocument document, PDPage sourcePage, PDPageContentStream.AppendMode appendContent, boolean compress)` Create a new PDPage content stream.
`PDPageContentStream(PDDocument document, PDPage sourcePage, PDPageContentStream.AppendMode appendContent, boolean compress, boolean resetContext)` Create a new PDPage content stream.

### Method Summary

All Methods Instance Methods Concrete Methods Deprecated Methods
`void` `addComment(String comment)` Write a comment line.
`void` `addRect(float x, float y, float width, float height)` Add a rectangle to the current path.
`void` `appendRawCommands(byte[] commands)` Deprecated. Usage of this method is discouraged.
`void` `appendRawCommands(double data)` Deprecated. Usage of this method is discouraged.
`void` `appendRawCommands(float data)` Deprecated. Usage of this method is discouraged.
`void` `appendRawCommands(int data)` Deprecated. Usage of this method is discouraged.
`void` `appendRawCommands(String commands)` Deprecated. Usage of this method is discouraged.
`void` `beginMarkedContent(COSName tag)` Begin a marked content sequence.
`void` `beginMarkedContent(COSName tag, int mcid)` Begin a marked content sequence with a reference to the marked content identifier (MCID).
`void` `beginMarkedContent(COSName tag, PDPropertyList propertyList)` Begin a marked content sequence with a reference to an entry in the page resources' Properties dictionary.
`void` `beginText()` Begin some text operations.
`void` `clip()` Intersects the current clipping path with the current path, using the nonzero rule.
`void` `clipEvenOdd()` Intersects the current clipping path with the current path, using the even-odd rule.
`void` `close()` Close the content stream.
`void` `closeAndFillAndStroke()` Close, fill, and then stroke the path, using the nonzero winding number rule to determine the region to fill.
`void` `closeAndFillAndStrokeEvenOdd()` Close, fill, and then stroke the path, using the even-odd rule to determine the region to fill.
`void` `closeAndStroke()` Close and stroke the path.
`void` `closePath()` Closes the current subpath.
`void` `curveTo(float x1, float y1, float x2, float y2, float x3, float y3)` Append a cubic Bézier curve to the current path.
`void` `curveTo1(float x1, float y1, float x3, float y3)` Append a cubic Bézier curve to the current path.
`void` `curveTo2(float x2, float y2, float x3, float y3)` Append a cubic Bézier curve to the current path.
`void` `drawForm(PDFormXObject form)` Draws the given Form XObject at the current location.
`void` `drawImage(PDImageXObject image, float x, float y)` Draw an image at the x,y coordinates, with the default size of the image.
`void` `drawImage(PDImageXObject image, float x, float y, float width, float height)` Draw an image at the x,y coordinates, with the given size.
`void` `drawImage(PDImageXObject image, Matrix matrix)` Draw an image at the origin with the given transformation matrix.
`void` `drawImage(PDInlineImage inlineImage, float x, float y)` Draw an inline image at the x,y coordinates, with the default size of the image.
`void` `drawImage(PDInlineImage inlineImage, float x, float y, float width, float height)` Draw an inline image at the x,y coordinates and a certain width and height.
`void` `endMarkedContent()` End a marked content sequence.
`void` `endText()` End some text operations.
`void` `fill()` Fills the path using the nonzero winding number rule.
`void` `fillAndStroke()` Fill and then stroke the path, using the nonzero winding number rule to determine the region to fill.
`void` `fillAndStrokeEvenOdd()` Fill and then stroke the path, using the even-odd rule to determine the region to fill.
`void` `fillEvenOdd()` Fills the path using the even-odd winding rule.
`protected COSName` `getName(PDColorSpace colorSpace)`
`protected boolean` `isOutside255Interval(int val)`
`void` `lineTo(float x, float y)` Draw a line from the current position to the given coordinates.
`void` `moveTo(float x, float y)` Move the current position to the given coordinates.
`void` `newLine()` Move to the start of the next line of text.
`void` `newLineAtOffset(float tx, float ty)` The Td operator.
`void` `restoreGraphicsState()` Q operator.
`void` `saveGraphicsState()` q operator.
`void` `setCharacterSpacing(float spacing)` Set the character spacing.
`void` `setFont(PDFont font, float fontSize)` Set the font and font size to draw text with.
`void` `setGraphicsStateParameters(PDExtendedGraphicsState state)` Set an extended graphics state.
`void` `setHorizontalScaling(float scale)` Set the horizontal scaling to scale / 100.
`void` `setLeading(float leading)` Sets the text leading.
`void` `setLineCapStyle(int lineCapStyle)` Set the line cap style.
`void` `setLineDashPattern(float[] pattern, float phase)` Set the line dash pattern.
`void` `setLineJoinStyle(int lineJoinStyle)` Set the line join style.
`void` `setLineWidth(float lineWidth)` Set line width to the given value.
`void` `setMarkedContentPoint(COSName tag)` set a marked content point.
`void` `setMarkedContentPointWithProperties(COSName tag, PDPropertyList propertyList)` Set a marked content point with a reference to an entry in the page resources' Properties dictionary.
`protected void` `setMaximumFractionDigits(int fractionDigitsNumber)` Sets the maximum number of digits allowed for fractional numbers.
`void` `setMiterLimit(float miterLimit)` Set the miter limit.
`void` `setNonStrokingColor(Color color)` Set the non-stroking color using an AWT color.
`void` `setNonStrokingColor(float g)` Set the non-stroking color in the DeviceGray color space.
`void` `setNonStrokingColor(float r, float g, float b)` Set the non-stroking color in the DeviceRGB color space.
`void` `setNonStrokingColor(float c, float m, float y, float k)` Set the non-stroking color in the DeviceCMYK color space.
`void` `setNonStrokingColor(PDColor color)` Sets the non-stroking color and, if necessary, the non-stroking color space.
`protected void` `setNonStrokingColorSpaceStack(PDColorSpace colorSpace)`
`void` `setRenderingMode(RenderingMode rm)` Set the text rendering mode.
`void` `setStrokingColor(Color color)` Set the stroking color using an AWT color.
`void` `setStrokingColor(float g)` Set the stroking color in the DeviceGray color space.
`void` `setStrokingColor(float r, float g, float b)` Set the stroking color in the DeviceRGB color space.
`void` `setStrokingColor(float c, float m, float y, float k)` Set the stroking color in the DeviceCMYK color space.
`void` `setStrokingColor(PDColor color)` Sets the stroking color and, if necessary, the stroking color space.
`protected void` `setStrokingColorSpaceStack(PDColorSpace colorSpace)`
`void` `setTextMatrix(Matrix matrix)` The Tm operator.
`void` `setTextRise(float rise)` Set the text rise value, i.e.
`void` `setWordSpacing(float spacing)` Set the word spacing.
`void` `shadingFill(PDShading shading)` Fills the clipping area with the given shading.
`void` `showText(String text)` Shows the given text at the location specified by the current text matrix.
`protected void` `showTextInternal(String text)` Outputs a string using the correct encoding and subsetting as required.
`void` `showTextWithPositioning(Object[] textWithPositioningArray)` Shows the given text at the location specified by the current text matrix with the given interspersed positioning.
`void` `stroke()` Stroke the path.
`void` `transform(Matrix matrix)` The cm operator.
`protected void` `write(String text)` Writes a string to the content stream as ASCII.
`protected void` `writeBytes(byte[] data)` Writes binary data to the content stream.
`protected void` `writeLine()` Writes a newline to the content stream as ASCII.
`protected void` `writeOperand(COSName name)` Writes a COSName to the content stream.
`protected void` `writeOperand(float real)` Writes a real number to the content stream.
`protected void` `writeOperand(int integer)` Writes an integer number to the content stream.
`protected void` `writeOperator(String text)` Writes a string to the content stream as ASCII.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface java.io.Closeable

`close`

### Field Detail

#### document

    protected final PDDocument document

#### outputStream

    protected final OutputStream outputStream

#### resources

    protected final PDResources resources

#### inTextMode

    protected boolean inTextMode

#### fontStack

    protected final Deque<PDFont> fontStack

#### nonStrokingColorSpaceStack

    protected final Deque<PDColorSpace> nonStrokingColorSpaceStack

#### strokingColorSpaceStack

    protected final Deque<PDColorSpace> strokingColorSpaceStack

### Constructor Detail

#### PDPageContentStream

    public PDPageContentStream(PDDocument document,
                               PDPage sourcePage)
                        throws IOException

Create a new PDPage content stream. This constructor overwrites all existing content streams of this page.

Parameters:
  `document` - The document the page is part of.
  `sourcePage` - The page to write the contents to.
Throws:
  `IOException` - If there is an error writing to the page contents.

#### PDPageContentStream

    public PDPageContentStream(PDDocument document,
                               PDPage sourcePage,
                               PDPageContentStream.AppendMode appendContent,
                               boolean compress)
                        throws IOException

Create a new PDPage content stream. If the appendContent parameter is set to `PDPageContentStream.AppendMode.APPEND`, you may want to use `PDPageContentStream(PDDocument, PDPage, PDPageContentStream.AppendMode, boolean, boolean)` instead, with the fifth parameter set to true.

Parameters:
  `document` - The document the page is part of.
  `sourcePage` - The page to write the contents to.
  `appendContent` - Indicates whether content will be overwritten, appended or prepended.
  `compress` - Tell if the content stream should compress the page contents.
Throws:
  `IOException` - If there is an error writing to the page contents.

#### PDPageContentStream

    public PDPageContentStream(PDDocument document,
                               PDPage sourcePage,
                               PDPageContentStream.AppendMode appendContent,
                               boolean compress,
                               boolean resetContext)
                        throws IOException

Create a new PDPage content stream.

Parameters:
  `document` - The document the page is part of.
  `sourcePage` - The page to write the contents to.
  `appendContent` - Indicates whether content will be overwritten, appended or prepended.
  `compress` - Tell if the content stream should compress the page contents.
  `resetContext` - Tell if the graphic context should be reset. This is only relevant when the appendContent parameter is set to `PDPageContentStream.AppendMode.APPEND`. You should use this when appending to an existing stream, because the existing stream may have changed graphic properties (e.g. scaling, rotation).
Throws:
  `IOException` - If there is an error writing to the page contents.

#### PDPageContentStream

    public PDPageContentStream(PDDocument doc,
                               PDAppearanceStream appearance)
                        throws IOException

Create a new appearance stream. Note that this is not actually a "page" content stream.

Parameters:
  `doc` - The document the page is part of.
  `appearance` - The appearance stream to write to.
Throws:
  `IOException` - If there is an error writing to the page contents.

#### PDPageContentStream

    public PDPageContentStream(PDDocument doc,
                               PDAppearanceStream appearance,
                               OutputStream outputStream)

Create a new appearance stream. Note that this is not actually a "page" content stream.

Parameters:
  `doc` - The document the appearance is part of.
  `appearance` - The appearance stream to add to.
  `outputStream` - The appearances output stream to write to.

### Method Detail

#### appendRawCommands

    @Deprecated
    public void appendRawCommands(String commands)
                                       throws IOException

Deprecated. Usage of this method is discouraged.
This will append raw commands to the content stream.

Parameters:
  `commands` - The commands to append to the stream.
Throws:
  `IOException` - If an error occurs while writing to the stream.

#### appendRawCommands

    @Deprecated
    public void appendRawCommands(byte[] commands)
                                       throws IOException

Deprecated. Usage of this method is discouraged.
This will append raw commands to the content stream.

Parameters:
  `commands` - The commands to append to the stream.
Throws:
  `IOException` - If an error occurs while writing to the stream.

#### appendRawCommands

    @Deprecated
    public void appendRawCommands(int data)
                                       throws IOException

Deprecated. Usage of this method is discouraged.
This will append raw commands to the content stream.

Parameters:
  `data` - Append a raw byte to the stream.
Throws:
  `IOException` - If an error occurs while writing to the stream.

#### appendRawCommands

    @Deprecated
    public void appendRawCommands(double data)
                                       throws IOException

Deprecated. Usage of this method is discouraged.
This will append raw commands to the content stream.

Parameters:
  `data` - Append a formatted double value to the stream.
Throws:
  `IOException` - If an error occurs while writing to the stream.

#### appendRawCommands

    @Deprecated
    public void appendRawCommands(float data)
                                       throws IOException

Deprecated. Usage of this method is discouraged.
This will append raw commands to the content stream.

Parameters:
  `data` - Append a formatted float value to the stream.
Throws:
  `IOException` - If an error occurs while writing to the stream.

#### setMaximumFractionDigits

    protected void setMaximumFractionDigits(int fractionDigitsNumber)

Sets the maximum number of digits allowed for fractional numbers.

Parameters:
  `fractionDigitsNumber` - the maximum number of digits allowed for fractional numbers
See Also:
  `NumberFormat.setMaximumFractionDigits(int)`

#### beginText

    public void beginText()
                   throws IOException

Begin some text operations.

Throws:
  `IOException` - If there is an error writing to the stream or if you attempt to nest beginText calls.
  `IllegalStateException` - If the method was not allowed to be called at this time.

#### endText

    public void endText()
                 throws IOException

End some text operations.

Throws:
  `IOException` - If there is an error writing to the stream or if you attempt to nest endText calls.
  `IllegalStateException` - If the method was not allowed to be called at this time.

#### setFont

    public void setFont(PDFont font,
                        float fontSize)
                 throws IOException

Set the font and font size to draw text with.

Parameters:
  `font` - The font to use.
  `fontSize` - The font size to draw the text.
Throws:
  `IOException` - If there is an error writing the font information.

#### showTextWithPositioning

    public void showTextWithPositioning(Object[] textWithPositioningArray)
                                 throws IOException

Shows the given text at the location specified by the current text matrix with the given interspersed positioning. This allows the user to efficiently position each glyph or sequence of glyphs.

Parameters:
  `textWithPositioningArray` - An array consisting of String and Float types. Each String is output to the page using the current text matrix. Using the default coordinate system, each interspersed number adjusts the current text matrix by translating to the left or down for horizontal and vertical text respectively. The number is expressed in thousands of a text space unit, and may be negative.
Throws:
  `IOException` - if an io exception occurs.

#### showText

    public void showText(String text)
                  throws IOException

Shows the given text at the location specified by the current text matrix.

Parameters:
  `text` - The Unicode text to show.
Throws:
  `IOException` - If an io exception occurs.
  `IllegalArgumentException` - if a character isn't supported by the current font

#### showTextInternal

    protected void showTextInternal(String text)
                             throws IOException

Outputs a string using the correct encoding and subsetting as required.

Parameters:
  `text` - The Unicode text to show.
Throws:
  `IOException` - If an io exception occurs.

#### setLeading

    public void setLeading(float leading)
                    throws IOException

Sets the text leading.

Parameters:
  `leading` - The leading in unscaled text units.
Throws:
  `IOException` - If there is an error writing to the stream.

#### newLine

    public void newLine()
                 throws IOException

Move to the start of the next line of text. Requires the leading (see `setLeading(float)`) to have been set.

Throws:
  `IOException` - If there is an error writing to the stream.

#### newLineAtOffset

    public void newLineAtOffset(float tx,
                                float ty)
                         throws IOException

The Td operator. Move to the start of the next line, offset from the start of the current line by (tx, ty).

Parameters:
  `tx` - The x translation.
  `ty` - The y translation.
Throws:
  `IOException` - If there is an error writing to the stream.
  `IllegalStateException` - If the method was not allowed to be called at this time.

#### setTextMatrix

    public void setTextMatrix(Matrix matrix)
                       throws IOException

The Tm operator. Sets the text matrix to the given values. A current text matrix will be replaced with the new one.

Parameters:
  `matrix` - the transformation matrix
Throws:
  `IOException` - If there is an error writing to the stream.
  `IllegalStateException` - If the method was not allowed to be called at this time.

#### drawImage

    public void drawImage(PDImageXObject image,
                          float x,
                          float y)
                   throws IOException

Draw an image at the x,y coordinates, with the default size of the image.

Parameters:
  `image` - The image to draw.
  `x` - The x-coordinate to draw the image.
  `y` - The y-coordinate to draw the image.
Throws:
  `IOException` - If there is an error writing to the stream.

#### drawImage

    public void drawImage(PDImageXObject image,
                          float x,
                          float y,
                          float width,
                          float height)
                   throws IOException

Draw an image at the x,y coordinates, with the given size.

Parameters:
  `image` - The image to draw.
  `x` - The x-coordinate to draw the image.
  `y` - The y-coordinate to draw the image.
  `width` - The width to draw the image.
  `height` - The height to draw the image.
Throws:
  `IOException` - If there is an error writing to the stream.
  `IllegalStateException` - If the method was called within a text block.

#### drawImage

    public void drawImage(PDImageXObject image,
                          Matrix matrix)
                   throws IOException

Draw an image at the origin with the given transformation matrix.

Parameters:
  `image` - The image to draw.
  `matrix` - The transformation matrix to apply to the image.
Throws:
  `IOException` - If there is an error writing to the stream.
  `IllegalStateException` - If the method was called within a text block.

#### drawImage

    public void drawImage(PDInlineImage inlineImage,
                          float x,
                          float y)
                   throws IOException

Draw an inline image at the x,y coordinates, with the default size of the image.

Parameters:
  `inlineImage` - The inline image to draw.
  `x` - The x-coordinate to draw the inline image.
  `y` - The y-coordinate to draw the inline image.
Throws:
  `IOException` - If there is an error writing to the stream.

#### drawImage

    public void drawImage(PDInlineImage inlineImage,
                          float x,
                          float y,
                          float width,
                          float height)
                   throws IOException

Draw an inline image at the x,y coordinates and a certain width and height.

Parameters:
  `inlineImage` - The inline image to draw.
  `x` - The x-coordinate to draw the inline image.
  `y` - The y-coordinate to draw the inline image.
  `width` - The width of the inline image to draw.
  `height` - The height of the inline image to draw.
Throws:
  `IOException` - If there is an error writing to the stream.
  `IllegalStateException` - If the method was called within a text block.

#### drawForm

    public void drawForm(PDFormXObject form)
                  throws IOException

Draws the given Form XObject at the current location.

Parameters:
  `form` - Form XObject
Throws:
  `IOException` - if the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### transform

    public void transform(Matrix matrix)
                   throws IOException

The cm operator. Concatenates the given matrix with the current transformation matrix (CTM), which maps user space coordinates used within a PDF content stream into output device coordinates. More details on coordinates can be found in the PDF 32000 specification, 8.3.2 Coordinate Spaces.

Parameters:
  `matrix` - the transformation matrix
Throws:
  `IOException` - If there is an error writing to the stream.

#### saveGraphicsState

    public void saveGraphicsState()
                           throws IOException

q operator. Saves the current graphics state.

Throws:
  `IOException` - If an error occurs while writing to the stream.

#### restoreGraphicsState

    public void restoreGraphicsState()
                              throws IOException

Q operator. Restores the current graphics state.

Throws:
  `IOException` - If an error occurs while writing to the stream.

#### getName

    protected COSName getName(PDColorSpace colorSpace)

#### setStrokingColor

    public void setStrokingColor(PDColor color)
                          throws IOException

Sets the stroking color and, if necessary, the stroking color space.

Parameters:
  `color` - Color in a specific color space.
Throws:
  `IOException` - If an IO error occurs while writing to the stream.

#### setStrokingColor

    public void setStrokingColor(Color color)
                          throws IOException

Set the stroking color using an AWT color. Conversion uses the default sRGB color space.

Parameters:
  `color` - The color to set.
Throws:
  `IOException` - If an IO error occurs while writing to the stream.

#### setStrokingColor

    public void setStrokingColor(float r,
                                 float g,
                                 float b)
                          throws IOException

Set the stroking color in the DeviceRGB color space. Range is 0..1.

Parameters:
  `r` - The red value.
  `g` - The green value.
  `b` - The blue value.
Throws:
  `IOException` - If an IO error occurs while writing to the stream.
  `IllegalArgumentException` - If the parameters are invalid.

#### setStrokingColor

    public void setStrokingColor(float c,
                                 float m,
                                 float y,
                                 float k)
                          throws IOException

Set the stroking color in the DeviceCMYK color space. Range is 0..1

Parameters:
  `c` - The cyan value.
  `m` - The magenta value.
  `y` - The yellow value.
  `k` - The black value.
Throws:
  `IOException` - If an IO error occurs while writing to the stream.
  `IllegalArgumentException` - If the parameters are invalid.

#### setStrokingColor

    public void setStrokingColor(float g)
                          throws IOException

Set the stroking color in the DeviceGray color space. Range is 0..1.

Parameters:
  `g` - The gray value.
Throws:
  `IOException` - If an IO error occurs while writing to the stream.
  `IllegalArgumentException` - If the parameter is invalid.

#### setNonStrokingColor

    public void setNonStrokingColor(PDColor color)
                             throws IOException

Sets the non-stroking color and, if necessary, the non-stroking color space.

Parameters:
  `color` - Color in a specific color space.
Throws:
  `IOException` - If an IO error occurs while writing to the stream.

#### setNonStrokingColor

    public void setNonStrokingColor(Color color)
                             throws IOException

Set the non-stroking color using an AWT color. Conversion uses the default sRGB color space.

Parameters:
  `color` - The color to set.
Throws:
  `IOException` - If an IO error occurs while writing to the stream.

#### setNonStrokingColor

    public void setNonStrokingColor(float r,
                                    float g,
                                    float b)
                             throws IOException

Set the non-stroking color in the DeviceRGB color space. Range is 0..1.

Parameters:
  `r` - The red value.
  `g` - The green value.
  `b` - The blue value.
Throws:
  `IOException` - If an IO error occurs while writing to the stream.
  `IllegalArgumentException` - If the parameters are invalid.

#### setNonStrokingColor

    public void setNonStrokingColor(float c,
                                    float m,
                                    float y,
                                    float k)
                             throws IOException

Set the non-stroking color in the DeviceCMYK color space. Range is 0..1.

Parameters:
  `c` - The cyan value.
  `m` - The magenta value.
  `y` - The yellow value.
  `k` - The black value.
Throws:
  `IOException` - If an IO error occurs while writing to the stream.

#### setNonStrokingColor

    public void setNonStrokingColor(float g)
                             throws IOException

Set the non-stroking color in the DeviceGray color space. Range is 0..1.

Parameters:
  `g` - The gray value.
Throws:
  `IOException` - If an IO error occurs while writing to the stream.
  `IllegalArgumentException` - If the parameter is invalid.

#### addRect

    public void addRect(float x,
                        float y,
                        float width,
                        float height)
                 throws IOException

Add a rectangle to the current path.

Parameters:
  `x` - The lower left x coordinate.
  `y` - The lower left y coordinate.
  `width` - The width of the rectangle.
  `height` - The height of the rectangle.
Throws:
  `IOException` - If the content stream could not be written.
  `IllegalStateException` - If the method was called within a text block.

#### curveTo

    public void curveTo(float x1,
                        float y1,
                        float x2,
                        float y2,
                        float x3,
                        float y3)
                 throws IOException

Append a cubic Bézier curve to the current path. The curve extends from the current point to the point (x3, y3), using (x1, y1) and (x2, y2) as the Bézier control points.

Parameters:
  `x1` - x coordinate of the point 1
  `y1` - y coordinate of the point 1
  `x2` - x coordinate of the point 2
  `y2` - y coordinate of the point 2
  `x3` - x coordinate of the point 3
  `y3` - y coordinate of the point 3
Throws:
  `IOException` - If the content stream could not be written.
  `IllegalStateException` - If the method was called within a text block.

#### curveTo2

    public void curveTo2(float x2,
                         float y2,
                         float x3,
                         float y3)
                  throws IOException

Append a cubic Bézier curve to the current path. The curve extends from the current point to the point (x3, y3), using the current point and (x2, y2) as the Bézier control points.

Parameters:
  `x2` - x coordinate of the point 2
  `y2` - y coordinate of the point 2
  `x3` - x coordinate of the point 3
  `y3` - y coordinate of the point 3
Throws:
  `IllegalStateException` - If the method was called within a text block.
  `IOException` - If the content stream could not be written.

#### curveTo1

    public void curveTo1(float x1,
                         float y1,
                         float x3,
                         float y3)
                  throws IOException

Append a cubic Bézier curve to the current path. The curve extends from the current point to the point (x3, y3), using (x1, y1) and (x3, y3) as the Bézier control points.

Parameters:
  `x1` - x coordinate of the point 1
  `y1` - y coordinate of the point 1
  `x3` - x coordinate of the point 3
  `y3` - y coordinate of the point 3
Throws:
  `IOException` - If the content stream could not be written.
  `IllegalStateException` - If the method was called within a text block.

#### moveTo

    public void moveTo(float x,
                       float y)
                throws IOException

Move the current position to the given coordinates.

Parameters:
  `x` - The x coordinate.
  `y` - The y coordinate.
Throws:
  `IOException` - If the content stream could not be written.
  `IllegalStateException` - If the method was called within a text block.

#### lineTo

    public void lineTo(float x,
                       float y)
                throws IOException

Draw a line from the current position to the given coordinates.

Parameters:
  `x` - The x coordinate.
  `y` - The y coordinate.
Throws:
  `IOException` - If the content stream could not be written.
  `IllegalStateException` - If the method was called within a text block.

#### stroke

    public void stroke()
                throws IOException

Stroke the path.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### closeAndStroke

    public void closeAndStroke()
                        throws IOException

Close and stroke the path.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### fill

    public void fill()
              throws IOException

Fills the path using the nonzero winding number rule.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### fillEvenOdd

    public void fillEvenOdd()
                     throws IOException

Fills the path using the even-odd winding rule.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### fillAndStroke

    public void fillAndStroke()
                       throws IOException

Fill and then stroke the path, using the nonzero winding number rule to determine the region to fill. This shall produce the same result as constructing two identical path objects, painting the first with `fill()` and the second with `stroke()`.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### fillAndStrokeEvenOdd

    public void fillAndStrokeEvenOdd()
                              throws IOException

Fill and then stroke the path, using the even-odd rule to determine the region to fill. This shall produce the same result as constructing two identical path objects, painting the first with `fillEvenOdd()` and the second with `stroke()`.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### closeAndFillAndStroke

    public void closeAndFillAndStroke()
                               throws IOException

Close, fill, and then stroke the path, using the nonzero winding number rule to determine the region to fill. This shall have the same effect as the sequence `closePath()` and then `fillAndStroke()`.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### closeAndFillAndStrokeEvenOdd

    public void closeAndFillAndStrokeEvenOdd()
                                      throws IOException

Close, fill, and then stroke the path, using the even-odd rule to determine the region to fill. This shall have the same effect as the sequence `closePath()` and then `fillAndStrokeEvenOdd()`.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### shadingFill

    public void shadingFill(PDShading shading)
                     throws IOException

Fills the clipping area with the given shading.

Parameters:
  `shading` - Shading resource
Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### closePath

    public void closePath()
                   throws IOException

Closes the current subpath.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### clip

    public void clip()
              throws IOException

Intersects the current clipping path with the current path, using the nonzero rule.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### clipEvenOdd

    public void clipEvenOdd()
                     throws IOException

Intersects the current clipping path with the current path, using the even-odd rule.

Throws:
  `IOException` - If the content stream could not be written
  `IllegalStateException` - If the method was called within a text block.

#### setLineWidth

    public void setLineWidth(float lineWidth)
                      throws IOException

Set line width to the given value.

Parameters:
  `lineWidth` - The width which is used for drawing.
Throws:
  `IOException` - If the content stream could not be written

#### setLineJoinStyle

    public void setLineJoinStyle(int lineJoinStyle)
                          throws IOException

Set the line join style.

Parameters:
  `lineJoinStyle` - 0 for miter join, 1 for round join, and 2 for bevel join.
Throws:
  `IOException` - If the content stream could not be written.
  `IllegalArgumentException` - If the parameter is not a valid line join style.

#### setLineCapStyle

    public void setLineCapStyle(int lineCapStyle)
                         throws IOException

Set the line cap style.

Parameters:
  `lineCapStyle` - 0 for butt cap, 1 for round cap, and 2 for projecting square cap.
Throws:
  `IOException` - If the content stream could not be written.
  `IllegalArgumentException` - If the parameter is not a valid line cap style.

#### setLineDashPattern

    public void setLineDashPattern(float[] pattern,
                                   float phase)
                            throws IOException

Set the line dash pattern.

Parameters:
  `pattern` - The pattern array
  `phase` - The phase of the pattern
Throws:
  `IOException` - If the content stream could not be written.

#### setMiterLimit

    public void setMiterLimit(float miterLimit)
                       throws IOException

Set the miter limit.

Parameters:
  `miterLimit` - the new miter limit.
Throws:
  `IOException` - If the content stream could not be written.
  `IllegalArgumentException` - If the parameter is ≤ 0.

#### beginMarkedContent

    public void beginMarkedContent(COSName tag)
                            throws IOException

Begin a marked content sequence.

Parameters:
  `tag` - the tag to be added to the content stream
Throws:
  `IOException` - If the content stream could not be written

#### beginMarkedContent

    public void beginMarkedContent(COSName tag,
                                   int mcid)
                            throws IOException

Begin a marked content sequence with a reference to the marked content identifier (MCID).

Parameters:
  `tag` - the tag to be added to the content stream
  `mcid` - the marked content identifier (MCID)
Throws:
  `IOException` - If the content stream could not be written

#### beginMarkedContent

    public void beginMarkedContent(COSName tag,
                                   PDPropertyList propertyList)
                            throws IOException

Begin a marked content sequence with a reference to an entry in the page resources' Properties dictionary.

Parameters:
  `tag` - the tag to be added to the content stream
  `propertyList` - property list to be added to the content stream
Throws:
  `IOException` - If the content stream could not be written

#### endMarkedContent

    public void endMarkedContent()
                          throws IOException

End a marked content sequence.

Throws:
  `IOException` - If the content stream could not be written

#### setMarkedContentPoint

    public void setMarkedContentPoint(COSName tag)
                               throws IOException

set a marked content point.

Parameters:
  `tag` - the tag to be added to the content stream
Throws:
  `IOException` - If the content stream could not be written

#### setMarkedContentPointWithProperties

    public void setMarkedContentPointWithProperties(COSName tag,
                                                    PDPropertyList propertyList)
                                             throws IOException

Set a marked content point with a reference to an entry in the page resources' Properties dictionary.

Parameters:
  `tag` - the tag to be added to the content stream
  `propertyList` - property list to be added to the content stream
Throws:
  `IOException` - If the content stream could not be written

#### setGraphicsStateParameters

    public void setGraphicsStateParameters(PDExtendedGraphicsState state)
                                    throws IOException

Set an extended graphics state.

Parameters:
  `state` - The extended graphics state to be added to the content stream
Throws:
  `IOException` - If the content stream could not be written.

#### addComment

    public void addComment(String comment)
                    throws IOException

Write a comment line.

Parameters:
  `comment` - the comment to be added to the content stream
Throws:
  `IOException` - If the content stream could not be written.
  `IllegalArgumentException` - If the comment contains a newline. This is not allowed, because the next line could be ordinary PDF content.

#### writeOperand

    protected void writeOperand(float real)
                         throws IOException

Writes a real number to the content stream.

Parameters:
  `real` - the real number to be added to the content stream
Throws:
  `IOException` - If the underlying stream has a problem being written to.
  `IllegalArgumentException` - if the parameter is not a finite number

#### writeOperand

    protected void writeOperand(int integer)
                         throws IOException

Writes an integer number to the content stream.

Parameters:
  `integer` - the integer to be added to the content stream
Throws:
  `IOException` - If the underlying stream has a problem being written to.

#### writeOperand

    protected void writeOperand(COSName name)
                         throws IOException

Writes a COSName to the content stream.

Parameters:
  `name` - the name to be added to the content stream
Throws:
  `IOException` - If the underlying stream has a problem being written to.

#### writeOperator

    protected void writeOperator(String text)
                          throws IOException

Writes a string to the content stream as ASCII.

Parameters:
  `text` - the text to be added to the content stream followed by a newline
Throws:
  `IOException` - If the underlying stream has a problem being written to.

#### write

    protected void write(String text)
                  throws IOException

Writes a string to the content stream as ASCII.

Parameters:
  `text` - the text to be added to the content stream
Throws:
  `IOException` - If the underlying stream has a problem being written to.

#### writeLine

    protected void writeLine()
                      throws IOException

Writes a newline to the content stream as ASCII.

Throws:
  `IOException` - If the underlying stream has a problem being written to.

#### writeBytes

    protected void writeBytes(byte[] data)
                       throws IOException

Writes binary data to the content stream.

Parameters:
  `data` - as byte formatted to be added to the content stream
Throws:
  `IOException` - If the underlying stream has a problem being written to.

#### close

    public void close()
               throws IOException

Close the content stream. This must be called when you are done with this object.

Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `AutoCloseable`
Throws:
  `IOException` - If the underlying stream has a problem being written to.

#### isOutside255Interval

    protected boolean isOutside255Interval(int val)

#### setStrokingColorSpaceStack

    protected void setStrokingColorSpaceStack(PDColorSpace colorSpace)

#### setNonStrokingColorSpaceStack

    protected void setNonStrokingColorSpaceStack(PDColorSpace colorSpace)

#### setCharacterSpacing

    public void setCharacterSpacing(float spacing)
                             throws IOException

Set the character spacing. The value shall be added to the horizontal or vertical component of the glyph's displacement, depending on the writing mode.

Parameters:
  `spacing` - character spacing
Throws:
  `IOException` - If the content stream could not be written.

#### setWordSpacing

    public void setWordSpacing(float spacing)
                        throws IOException

Set the word spacing. The value shall be added to the horizontal or vertical component of the ASCII SPACE character, depending on the writing mode.

This will have an effect only with Type1 and TrueType fonts, not with Type0 fonts. The PDF specification tells why: "Word spacing shall be applied to every occurrence of the single-byte character code 32 in a string when using a simple font or a composite font that defines code 32 as a single-byte code. It shall not apply to occurrences of the byte value 32 in multiple-byte codes."

Parameters:
  `spacing` - word spacing
Throws:
  `IOException` - If the content stream could not be written.

#### setHorizontalScaling

    public void setHorizontalScaling(float scale)
                              throws IOException

Set the horizontal scaling to scale / 100.

Parameters:
  `scale` - number specifying the percentage of the normal width. Default value: 100 (normal width).
Throws:
  `IOException` - If the content stream could not be written.

#### setRenderingMode

    public void setRenderingMode(RenderingMode rm)
                          throws IOException

Set the text rendering mode. This determines whether showing text shall cause glyph outlines to be stroked, filled, used as a clipping boundary, or some combination of the three.

Parameters:
  `rm` - The text rendering mode.
Throws:
  `IOException` - If the content stream could not be written.

#### setTextRise

    public void setTextRise(float rise)
                     throws IOException

Set the text rise value, i.e. move the baseline up or down. This is useful for drawing superscripts or subscripts.

Parameters:
  `rise` - Specifies the distance, in unscaled text space units, to move the baseline up or down from its default location. 0 restores the default location.
Throws:
  `IOException` - If the content stream could not be written.