Class PDFRenderer

java.lang.Object
org.loboevolution.pdfview.BaseWatchable
org.loboevolution.pdfview.PDFRenderer
All Implemented Interfaces:
Runnable, Watchable

public class PDFRenderer extends BaseWatchable implements Runnable
This class turns a set of PDF Commands from a PDF page into an image. It encapsulates the state of drawing in terms of stroke, fill, transform, etc., as well as pushing and popping these states. When the run method is called, this class goes through all remaining commands in the PDF Page and draws them to its buffered image. It then updates any ImageConsumers with the drawn data.
  • Field Details

    • UPDATE_DURATION

      public static final long UPDATE_DURATION
      how long (in milliseconds) to wait between image updates
      See Also:
    • NOPHASE

      public static final float NOPHASE
      Constant NOPHASE=-1000
      See Also:
    • NOWIDTH

      public static final float NOWIDTH
      Constant NOWIDTH=-1000
      See Also:
    • NOLIMIT

      public static final float NOLIMIT
      Constant NOLIMIT=-1000
      See Also:
    • NOCAP

      public static final int NOCAP
      Constant NOCAP=-1000
      See Also:
    • NODASH

      public static final float[] NODASH
      Constant NODASH
    • NOJOIN

      public static final int NOJOIN
      Constant NOJOIN=-1000
      See Also:
  • Constructor Details

    • PDFRenderer

      public PDFRenderer(PDFPage page, ImageInfo imageinfo, BufferedImage bi)
      create a new PDFGraphics state
      Parameters:
      page - the current page
      imageinfo - the paramters of the image to render
      bi - a BufferedImage object.
    • PDFRenderer

      public PDFRenderer(PDFPage page, Graphics2D g, Rectangle imgbounds, Rectangle2D clip, Color bgColor)
      create a new PDFGraphics state, given a Graphics2D. This version will not create an image, and you will get a NullPointerException if you attempt to call getImage().
      Parameters:
      page - the current page
      g - the Graphics2D object to use for drawing
      imgbounds - the bounds of the image into which to fit the page
      clip - the portion of the page to draw, in page space, or null if the whole page should be drawn
      bgColor - the color to draw the background of the image, or null for no color (0 alpha value)
  • Method Details

    • push

      public void push()
      push the current graphics state onto the stack. Continue working with the current object; calling pop() restores the state of this object to its state when push() was called.
    • pop

      public void pop()
      restore the state of this object to what it was when the previous push() was called.
    • stroke

      public Rectangle2D stroke(GeneralPath s, boolean autoAdjustStroke)
      draw an outline using the current stroke and draw paint
      Parameters:
      s - the path to stroke
      autoAdjustStroke - a boolean.
      Returns:
      a Rectangle2D to which the current region being drawn will be added. May also be null, in which case no dirty region will be recorded.
    • draw

      public void draw(GeneralPath p, BasicStroke bs)
      draw an outline.
      Parameters:
      p - the path to draw
      bs - the stroke with which to draw the path
    • fill

      public Rectangle2D fill(GeneralPath s)
      fill an outline using the current fill paint
      Parameters:
      s - the path to fill
      Returns:
      a Rectangle2D object.
    • drawImage

      public Rectangle2D drawImage(PDFImage image)
      draw an image.
      Parameters:
      image - the image to draw
      Returns:
      a Rectangle2D object.
    • clip

      public void clip(GeneralPath s)
      add the path to the current clip. The new clip will be the intersection of the old clip and given path.
      Parameters:
      s - a GeneralPath object.
    • getTransform

      public AffineTransform getTransform()
      get the current affinetransform
      Returns:
      a AffineTransform object.
    • setTransform

      public void setTransform(AffineTransform at)
      replace the current transform with the given one.
      Parameters:
      at - a AffineTransform object.
    • transform

      public void transform(AffineTransform at)
      concatenate the given transform with the current transform
      Parameters:
      at - a AffineTransform object.
    • getInitialTransform

      public AffineTransform getInitialTransform()
      get the initial transform from page space to Java space
      Returns:
      a AffineTransform object.
    • setStrokeParts

      public void setStrokeParts(float wStroke, int capStroke, int joinStroke, float limitStroke, float[] aryStroke, float phaseStroke)
      Set some or all aspects of the current stroke.
      Parameters:
      wStroke - the width of the stroke, or NOWIDTH to leave it unchanged
      capStroke - the end cap style, or NOCAP to leave it unchanged
      joinStroke - the join style, or NOJOIN to leave it unchanged
      limitStroke - the miter limit, or NOLIMIT to leave it unchanged
      aryStroke - the dash array, or null to leave it unchanged. phase and ary must both be valid, or phase must be NOPHASE while ary is null.
      phaseStroke - the phase of the dash array, or NOPHASE to leave it unchanged
    • getStroke

      public BasicStroke getStroke()
      get the current stroke as a BasicStroke
      Returns:
      a BasicStroke object.
    • setStroke

      public void setStroke(BasicStroke bs)
      set the current stroke as a BasicStroke
      Parameters:
      bs - a BasicStroke object.
    • setStrokePaint

      public void setStrokePaint(PDFPaint paint)
      set the stroke color
      Parameters:
      paint - a PDFPaint object.
    • setFillPaint

      public void setFillPaint(PDFPaint paint)
      set the fill color
      Parameters:
      paint - a PDFPaint object.
    • setStrokeAlpha

      public void setStrokeAlpha(float alpha)
      set the stroke alpha
      Parameters:
      alpha - a float.
    • setFillAlpha

      public void setFillAlpha(float alpha)
      set the stroke alpha
      Parameters:
      alpha - a float.
    • addObserver

      public void addObserver(ImageObserver observer)
      Add an image observer
      Parameters:
      observer - a ImageObserver object.
    • removeObserver

      public void removeObserver(ImageObserver observer)
      Remove an image observer
      Parameters:
      observer - a ImageObserver object.
    • getImage

      public BufferedImage getImage()
      If exists, returns the image which is used by the renderer.
      Returns:
      a BufferedImage or null
    • setup

      public void setup()
      Prepare for a set of iterations. Called before the first iterate() call in a sequence. Subclasses should extend this method if they need to do anything to setup.

      Setup rendering. Called before iteration begins

      Overrides:
      setup in class BaseWatchable
    • iterate

      public int iterate() throws Exception
      Perform a single iteration of this watchable. This is the minimum granularity which the go() commands operate over.

      Draws the next command in the PDFPage to the buffered image. The image will be notified about changes no less than every UPDATE_DURATION milliseconds.

      Specified by:
      iterate in class BaseWatchable
      Returns:
      one of three values:
      • Watchable.RUNNING if there is still data to be processed
      • Watchable.NEEDS_DATA if there is no data to be processed but the execution is not yet complete
      • Watchable.COMPLETED if the execution is complete
      Throws:
      Exception - if any.
    • cleanup

      public void cleanup()
      Clean up after a set of iterations. Called after iteration has stopped due to completion, manual stopping, or error.

      Called when iteration has stopped

      Overrides:
      cleanup in class BaseWatchable
    • rememberTransformation

      public void rememberTransformation()
      ********************************************************************** Remember the current transformation **********************************************************************