com.lowagie.text.pdf

## Class PdfStream

- java.lang.Object
- - com.lowagie.text.pdf.PdfObject
  - - com.lowagie.text.pdf.PdfDictionary
    - - com.lowagie.text.pdf.PdfStream

- Direct Known Subclasses:
    BaseFont.StreamFont, PdfContents, PdfEFStream, PdfFormXObject, PdfICCBased, PdfImage, PdfPattern, PRStream

      public class PdfStream
      extends PdfDictionary

  `PdfStream` is the Pdf stream object.

  A stream, like a string, is a sequence of characters. However, an application can read a small portion of a stream at a time, while a string must be read in its entirety. For this reason, objects with potentially large amounts of data, such as images and page descriptions, are represented as streams.
  A stream consists of a dictionary that describes a sequence of characters, followed by the keyword stream, followed by zero or more lines of characters, followed by the keyword endstream.
  All streams must be `PdfIndirectObject`s. The stream dictionary must be a direct object. The keyword stream that follows the stream dictionary should be followed by a carriage return and linefeed or just a linefeed.
  Remark: In this version only the FLATEDECODE-filter is supported.
  This object is described in the 'Portable Document Format Reference Manual version 1.7' section 3.2.7 (page 60-63).

  See Also:
    `PdfObject`, `PdfDictionary`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `BEST_COMPRESSION` A possible compression level.
    `static int` | `BEST_SPEED` A possible compression level.
    `protected boolean` | `compressed` is the stream compressed?
    `protected int` | `compressionLevel` The level of compression.
    `static int` | `DEFAULT_COMPRESSION` A possible compression level.
    `(package private) static byte[]` | `ENDSTREAM`
    `protected java.io.InputStream` | `inputStream`
    `protected int` | `inputStreamLength`
    `static int` | `NO_COMPRESSION` A possible compression level.
    `protected int` | `rawLength`
    `protected PdfIndirectReference` | `ref`
    `(package private) static int` | `SIZESTREAM`
    `(package private) static byte[]` | `STARTSTREAM`
    `protected java.io.ByteArrayOutputStream` | `streamBytes`
    `protected PdfWriter` | `writer`

    - ### Fields inherited from class com.lowagie.text.pdf.PdfDictionary

      `CATALOG, FONT, hashMap, OUTLINES, PAGE, PAGES`

    - ### Fields inherited from class com.lowagie.text.pdf.PdfObject

      `ARRAY, BOOLEAN, bytes, DICTIONARY, INDIRECT, indRef, NAME, NOTHING, NULL, NUMBER, STREAM, STRING, TEXT_PDFDOCENCODING, TEXT_UNICODE, type`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `PdfStream()` Constructs a `PdfStream`-object.
    `` | `PdfStream(byte[] bytes)` Constructs a `PdfStream`-object.
    `` | `PdfStream(java.io.InputStream inputStream, PdfWriter writer)` Creates an efficient stream.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `flateCompress()` Compresses the stream.
    `void` | `flateCompress(int compressionLevel)` Compresses the stream.
    `int` | `getRawLength()` Gets the raw length of the stream.
    `protected void` | `superToPdf(PdfWriter writer, java.io.OutputStream os)`
    `void` | `toPdf(PdfWriter writer, java.io.OutputStream os)` Writes the PDF representation of this `PdfDictionary` as an array of `byte` to the given `OutputStream`.
    `java.lang.String` | `toString()` Returns a string representation of this `PdfDictionary`.
    `void` | `writeContent(java.io.OutputStream os)` Writes the data content to an `OutputStream`.
    `void` | `writeLength()` Writes the stream length to the `PdfWriter`.

    - ### Methods inherited from class com.lowagie.text.pdf.PdfDictionary

      `contains, get, getAsArray, getAsBoolean, getAsDict, getAsIndirectObject, getAsName, getAsNumber, getAsStream, getAsString, getDirectObject, getKeys, isCatalog, isFont, isOutlineTree, isPage, isPages, merge, mergeDifferent, put, putAll, putEx, remove, size`

    - ### Methods inherited from class com.lowagie.text.pdf.PdfObject

      `canBeInObjStm, getBytes, getIndRef, isArray, isBoolean, isDictionary, isIndirect, isName, isNull, isNumber, isStream, isString, length, setContent, setIndRef, type`

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

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

- - ### Field Detail

    - #### DEFAULT_COMPRESSION

          public static final int DEFAULT_COMPRESSION

      A possible compression level.
      Since:
        2.1.3
      See Also:
        Constant Field Values

    - #### NO_COMPRESSION

          public static final int NO_COMPRESSION

      A possible compression level.
      Since:
        2.1.3
      See Also:
        Constant Field Values

    - #### BEST_SPEED

          public static final int BEST_SPEED

      A possible compression level.
      Since:
        2.1.3
      See Also:
        Constant Field Values

    - #### BEST_COMPRESSION

          public static final int BEST_COMPRESSION

      A possible compression level.
      Since:
        2.1.3
      See Also:
        Constant Field Values

    - #### compressed

          protected boolean compressed

      is the stream compressed?

    - #### compressionLevel

          protected int compressionLevel

      The level of compression.
      Since:
        2.1.3

    - #### streamBytes

          protected java.io.ByteArrayOutputStream streamBytes

    - #### inputStream

          protected java.io.InputStream inputStream

    - #### ref

          protected PdfIndirectReference ref

    - #### inputStreamLength

          protected int inputStreamLength

    - #### writer

          protected PdfWriter writer

    - #### rawLength

          protected int rawLength

    - #### STARTSTREAM

          static final byte[] STARTSTREAM

    - #### ENDSTREAM

          static final byte[] ENDSTREAM

    - #### SIZESTREAM

          static final int SIZESTREAM

  - ### Constructor Detail

    - #### PdfStream

          public PdfStream(byte[] bytes)

      Constructs a `PdfStream`-object.
      Parameters:
        `bytes` - content of the new `PdfObject` as an array of `byte`.

    - #### PdfStream

          public PdfStream(java.io.InputStream inputStream,
                   PdfWriter writer)

      Creates an efficient stream. No temporary array is ever created. The `InputStream` is totally consumed but is not closed. The general usage is:

           InputStream in = ...;
           PdfStream stream = new PdfStream(in, writer);
           stream.flateCompress();
           writer.addToBody(stream);
           stream.writeLength();
           in.close();

      Parameters:
        `inputStream` - the data to write to this stream
        `writer` - the `PdfWriter` for this stream

    - #### PdfStream

          protected PdfStream()

      Constructs a `PdfStream`-object.

  - ### Method Detail

    - #### writeLength

          public void writeLength()
                           throws java.io.IOException

      Writes the stream length to the `PdfWriter`.

      This method must be called and can only be called if the constructor `PdfStream(InputStream,PdfWriter)` is used to create the stream.

      Throws:
        `java.io.IOException` - on error
      See Also:
        `PdfStream(InputStream,PdfWriter)`

    - #### getRawLength

          public int getRawLength()

      Gets the raw length of the stream.
      Returns:
        the raw length of the stream

    - #### flateCompress

          public void flateCompress()

      Compresses the stream.

    - #### flateCompress

          public void flateCompress(int compressionLevel)

      Compresses the stream.
      Parameters:
        `compressionLevel` - the compression level (0 = best speed, 9 = best compression, -1 is default)
      Since:
        2.1.3

    - #### superToPdf

          protected void superToPdf(PdfWriter writer,
                        java.io.OutputStream os)
                             throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### toPdf

          public void toPdf(PdfWriter writer,
                   java.io.OutputStream os)
                     throws java.io.IOException

      Description copied from class: `PdfDictionary`
      Writes the PDF representation of this `PdfDictionary` as an array of `byte` to the given `OutputStream`.
      Overrides:
        `toPdf` in class `PdfDictionary`
      Parameters:
        `writer` - for backwards compatibility
        `os` - the `OutputStream` to write the bytes to.
      Throws:
        `java.io.IOException`
      See Also:
        `PdfDictionary.toPdf(com.lowagie.text.pdf.PdfWriter, java.io.OutputStream)`

    - #### writeContent

          public void writeContent(java.io.OutputStream os)
                            throws java.io.IOException

      Writes the data content to an `OutputStream`.
      Parameters:
        `os` - the destination to write to
      Throws:
        `java.io.IOException` - on error

    - #### toString

          public java.lang.String toString()

      Description copied from class: `PdfDictionary`
      Returns a string representation of this `PdfDictionary`. The string doesn't contain any of the content of this dictionary. Rather the string "dictionary" is returned, possibly followed by the type of this `PdfDictionary`, if set.
      Overrides:
        `toString` in class `PdfDictionary`
      Returns:
        the string representation of this `PdfDictionary`
      See Also:
        `PdfObject.toString()`