Class PDFFunction

java.lang.Object
com.sun.pdfview.function.PDFFunction
Direct Known Subclasses:
FunctionType0, FunctionType2, FunctionType3, FunctionType4

public abstract class PDFFunction extends Object

PDF Functions are defined in the reference as Section 3.9.

A PDF function maps some set of m inputs into some set of n outputs. There are 4 types of functions:

  • Type 0: Sampled functions. (PDF 1.2)
    A sampled function (type 0) uses a table of sample values to define the function. Various techniques are used to interpolate values between the sample values (see Section 3.9.1, "Type 0 (Sampled) Functions").
  • Type 2: Exponential Interpolation. (PDF 1.3)
    An exponential interpolation function (type 2) defines a set of coefficients for an exponential function (see Section 3.9.2, "Type 2 (Exponential Interpolation) Functions").
  • Type 3: Stitching functions. (PDF 1.3)
    A stitching function (type 3) is a combination of other functions, partitioned across a domain (see Section 3.9.3, "Type 3 (Stitching) Functions").
  • Type 4: Postscript calculations. (PDF 1.3)
    A PostScript calculator function (type 4) uses operators from the PostScript language to describe an arithmetic expression (see Section 3.9.4, "Type 4 (PostScript Calculator) Functions").

The function interface contains a single method, calculate which takes an array of m floats an interprets them into an array of n floats.

PDFFunctions do not have accessible constructors. Instead, use the static getFunction() method to read a functions from a PDF Object.

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private float[]
    the input domain of this function, an array of 2 * m floats
    private float[]
    the output range of this functions, and array of 2 * n floats.
    private int
    the type of this function from the list of known types
    static final int
    Sampled function
    static final int
    Exponential interpolation function
    static final int
    Stitching function.
    static final int
    PostScript calculator function.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    PDFFunction(int type)
    Creates a new instance of PDFFunction
  • Method Summary

    Modifier and Type
    Method
    Description
    float[]
    calculate(float[] inputs)
    Map from m input values to n output values.
    float[]
    calculate(float[] inputs, int inputOffset, float[] outputs, int outputOffset)
    Map from m input values to n output values.
    protected abstract void
    doFunction(float[] inputs, int inputOffset, float[] outputs, int outputOffset)
    Subclasses must implement this method to perform the actual function on the given set of data.
    protected float
    getDomain(int i)
    Get a component of the domain of this function
    Get a PDFFunction from a PDFObject
    int
    Get the number of inputs, m, required by this function
    int
    Get the number of outputs, n, returned by this function
    protected float
    getRange(int i)
    Get a component of the range of this function
    int
    Get the type of this function
    protected abstract void
    Read the function information from a PDF Object
    protected void
    setDomain(float[] domain)
    Set the domain of this function
    protected void
    setRange(float[] range)
    Set the range of this function

    Methods inherited from class java.lang.Object

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

    • TYPE_0

      public static final int TYPE_0
      Sampled function
      See Also:
    • TYPE_2

      public static final int TYPE_2
      Exponential interpolation function
      See Also:
    • TYPE_3

      public static final int TYPE_3
      Stitching function.
      See Also:
    • TYPE_4

      public static final int TYPE_4
      PostScript calculator function.
      See Also:
    • type

      private int type
      the type of this function from the list of known types
    • domain

      private float[] domain
      the input domain of this function, an array of 2 * m floats
    • range

      private float[] range
      the output range of this functions, and array of 2 * n floats. required for type 0 and 4 functions
  • Constructor Details

    • PDFFunction

      protected PDFFunction(int type)
      Creates a new instance of PDFFunction
  • Method Details

    • getFunction

      public static PDFFunction getFunction(PDFObject obj) throws IOException
      Get a PDFFunction from a PDFObject
      Throws:
      IOException
    • getType

      public int getType()
      Get the type of this function
      Returns:
      one of the types of function (0-4)
    • getNumInputs

      public int getNumInputs()
      Get the number of inputs, m, required by this function
      Returns:
      the number of input values expected by this function
    • getNumOutputs

      public int getNumOutputs()
      Get the number of outputs, n, returned by this function
      Returns:
      the number of output values this function will return
    • getDomain

      protected float getDomain(int i)
      Get a component of the domain of this function
      Parameters:
      i - the index into the domain array, which has size 2 * m. the ith entry in the array has index 2i, 2i + 1
      Returns:
      the ith entry in the domain array
    • setDomain

      protected void setDomain(float[] domain)
      Set the domain of this function
    • getRange

      protected float getRange(int i)
      Get a component of the range of this function
      Parameters:
      i - the index into the range array, which has size 2 * n. the ith entry in the array has index 2i, 2i + 1
      Returns:
      the ith entry in the range array
    • setRange

      protected void setRange(float[] range)
      Set the range of this function
    • calculate

      public float[] calculate(float[] inputs)
      Map from m input values to n output values. The number of inputs m must be exactly one half the size of the domain. The number of outputs should match one half the size of the range.
      Parameters:
      inputs - an array of >= m input values
      Returns:
      the array of n output values
    • calculate

      public float[] calculate(float[] inputs, int inputOffset, float[] outputs, int outputOffset)
      Map from m input values to n output values. The number of inputs m must be exactly one half the size of the domain. The number of outputs should match one half the size of the range.
      Parameters:
      inputs - an array of >= m input values
      inputOffset - the offset into the input array to read from
      outputs - an array of size >= n which will be filled with the output values
      outputOffset - the offset into the output array to write to
      Returns:
      the array of n output values
    • doFunction

      protected abstract void doFunction(float[] inputs, int inputOffset, float[] outputs, int outputOffset)
      Subclasses must implement this method to perform the actual function on the given set of data. Note that the inputs are guaranteed to be clipped to the domain, while the outputs will be automatically clipped to the range after being returned from this function.
      Parameters:
      inputs - guaranteed to be at least as big as getNumInputs() and all values within range
      inputOffset - the offset into the inputs array to read from
      outputs - guaranteed to be at least as big as getNumOutputs(), but not yet clipped to domain
      outputOffset - the offset into the output array to write to
    • parse

      protected abstract void parse(PDFObject obj) throws IOException
      Read the function information from a PDF Object
      Throws:
      IOException