# Class: Filter

## PDFNet. Filter

#### new Filter()

  Provides a generic view of a sequence of bytes.

  A Filter is the abstract base class of all filters. A filter is an abstraction of a sequence of bytes, such as a file, an input/output device, an inter-process communication pipe, or a TCP/IP socket. The Filter class and its derived classes provide a generic view of these different types of input and output, isolating the programmer from the specific details of the operating system and the underlying devices.

  Besides providing access to input/output sources Filters can be also to transform the data (e.g. to compress the data stream, to normalize the image data, to encrypt data, etc). Filters can also be attached to each other to form pipelines. For example, a filter used to open an image data file can be attached to a filter that decompresses the data, which is attached to another filter that will normalize the image data.

  Depending on the underlying data source or repository, filters might support only some of these capabilities. An application can query a stream for its capabilities by using the IsInputFilter() and CanSeek() properties.

### Methods

#### <static> createCustomWithStruct(mode, user_data, callbacks)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `mode` | number/enum |
      PDFNet.Filter.StdFileOpenMode = {
      	e_read_mode : 0
      	e_write_mode : 1
      	e_append_mode : 2
      }
  `user_data` |  |
  `callbacks` |  |

  ##### Returns:

  A promise that resolves to an object of type: "Filter"

  Type
    PDFNet.Filter

#### <static> createFlateEncode( [input_filter] [, compression_level] [, buf_sz])

  Constructor for Flate encoder. FlateEncode filter can be used to compress any data stream using Flate (i.e. ZIP) compression method.

  ##### Parameters:

  Name | Type | Argument | Default | Description
  --- | --- | --- | --- | ---
  `input_filter` | PDFNet.Filter | <optional> | PDFNet.Filter("0") | the input data stream
  `compression_level` | number | <optional> | -1 | compression_level must be a number between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all (the input data is simply copied a block at a time), -1 requests a default compromise between speed and compression (currently equivalent to level 6).
  `buf_sz` | number | <optional> | 256 | filter buffer size (in bytes).

  ##### Returns:

  A promise that resolves to an object of type: "Filter" (generated documentation)

  Type
    PDFNet.Filter

#### <static> createImage2RGB(img)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `img` | PDFNet.Image |

  ##### Returns:

  A promise that resolves to an object of type: "Filter"

  Type
    PDFNet.Filter

#### <static> createImage2RGBA(img, premultiply)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `img` | PDFNet.Image |
  `premultiply` | boolean |

  ##### Returns:

  A promise that resolves to an object of type: "Filter"

  Type
    PDFNet.Filter

#### <static> createImage2RGBAFromElement(elem, premultiply)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `elem` | PDFNet.Element |
  `premultiply` | boolean |

  ##### Returns:

  A promise that resolves to an object of type: "Filter"

  Type
    PDFNet.Filter

#### <static> createImage2RGBAFromObj(obj, premultiply)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `obj` | PDFNet.Obj |
  `premultiply` | boolean |

  ##### Returns:

  A promise that resolves to an object of type: "Filter"

  Type
    PDFNet.Filter

#### <static> createImage2RGBFromElement(elem)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `elem` | PDFNet.Element |

  ##### Returns:

  A promise that resolves to an object of type: "Filter"

  Type
    PDFNet.Filter

#### <static> createImage2RGBFromObj(obj)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `obj` | PDFNet.Obj |

  ##### Returns:

  A promise that resolves to an object of type: "Filter"

  Type
    PDFNet.Filter

#### <static> createMemoryFilter(buf_sz, is_input)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `buf_sz` | number |
  `is_input` | boolean |

  ##### Returns:

  A promise that resolves to an object of type: "Filter"

  Type
    PDFNet.Filter

#### attachFilter(attach_filter)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `attach_filter` | PDFNet.Filter |

#### begin()

  ##### Returns:

  A promise that resolves to beginning of the buffer of Size() bytes that can be used to read or write data.

  Type
    number

#### canSeek()

  ##### Returns:

  A promise that resolves to true if the stream supports seeking; otherwise, false.
  default is to return false.

  Type
    boolean

#### consume(num_bytes)

  Moves the Begin() pointer num_bytes forward.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `num_bytes` | number | number of bytes to consume. num_bytes must be less than or equal to Size().

#### count()

  ##### Returns:

  A promise that resolves to the number of bytes consumed since opening the filter or the last Seek operation

  Type
    number

#### createASCII85Encode(line_width, buf_sz)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `line_width` | number |
  `buf_sz` | number |

  ##### Returns:

  A promise that resolves to an object of type: "Filter"

  Type
    PDFNet.Filter

#### createInputIterator()

  Create Filter iterator. Filter iterator similar to a regular filter. However, there can be only one owner of the attached filter.

  ##### Returns:

  A promise that resolves to an object of type: "Filter"

  Type
    PDFNet.Filter

#### destroy()

  Frees the native memory of the object.

#### flush()

  Forces any data remaining in the buffer to be written to input or output filter.

#### flushAll()

  Forces any data remaining in the filter chain to the source or destination.

#### getAttachedFilter()

  ##### Returns:

  A promise that resolves to returns attached Filter or a NULL filter if no filter is attached.

  Type
    PDFNet.Filter

#### getDecodeName()

  ##### Returns:

  A promise that resolves to string representing the name of corresponding decode filter as it should appear in document (e.g. both ASCIIHexDecode and ASCIIHexEncode should return ASCIIHexDecode).

  Type
    string

#### getFilePath()

  ##### Returns:

  A promise that resolves to the file path to the underlying file stream. Default implementation returns empty string.

  Type
    string

#### getName()

  ##### Returns:

  A promise that resolves to descriptive name of the filter.

  Type
    string

#### getSourceFilter()

  ##### Returns:

  A promise that resolves to returns the first filter in the chain (usually a file filter)

  Type
    PDFNet.Filter

#### isInputFilter()

  ##### Returns:

  A promise that resolves to boolean indicating whether this is an input filter.

  Type
    boolean

#### memoryFilterGetBuffer()

  ##### Returns:

  A promise that resolves to a pointer to the beginning of the buffer. Use method Count() to determine the number of bytes written to or read from MemoryFilter.

  Type
    number

#### memoryFilterReset()

#### memoryFilterSetAsInputFilter()

#### releaseAttachedFilter()

  Release the ownership of the attached filter. After the attached filter is released this filter points to NULL filter.

  ##### Returns:

  A promise that resolves to Previously attached filter.

  Type
    PDFNet.Filter

#### seek(offset, origin)

  When overridden in a derived class, sets the position within the current stream.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `offset` | number | A byte offset relative to origin. If offset is negative, the new position will precede the position specified by origin by the number of bytes specified by offset. If offset is zero, the new position will be the position specified by origin. If offset is positive, the new position will follow the position specified by origin by the number of bytes specified by offset.
  `origin` | number/enum |
      PDFNet.Filter.ReferencePos = {
      	e_begin : 0
      	e_end : 2
      	e_cur : 1
      }
  A value of type ReferencePos indicating the reference point used to obtain the new position

#### setCount(new_count)

  Sets a new counting point for the current filter. All subsequent Consume() operations will increment this counter.

  Make sure that the output filter is flushed before using SetCount().

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `new_count` | number | number to set the counting point of the filter to.

  ##### Returns:

  A promise that resolves to the value of previous counter

  Type
    number

#### setStreamLength(bytes)

  The functions specifies the length of the data stream. The default implementation doesn't do anything. For some derived filters such as file segment filter it may be useful to override this function in order to limit the stream length.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `bytes` | number | the length of stream in bytes

#### size()

  ##### Returns:

  A promise that resolves to the size of buffer returned by Begin(). If the Size() returns 0 end of data has been reached.

  Type
    number

#### tell()

  Reports the current read position in the stream relative to the stream origin.

  ##### Returns:

  A promise that resolves to The current position in the stream

  Type
    number

#### Search results