Class PDFRenderer

java.lang.Object
org.apache.pdfbox.rendering.PDFRenderer

public class PDFRenderer extends Object
Renders a PDF document to an AWT BufferedImage. This class may be overridden in order to perform custom rendering.
  • Field Details

    • LOG

      private static final org.apache.commons.logging.Log LOG
    • document

      protected final PDDocument document
    • annotationFilter

      private AnnotationFilter annotationFilter
      Default annotations filter, returns all annotations
    • subsamplingAllowed

      private boolean subsamplingAllowed
    • defaultDestination

      private RenderDestination defaultDestination
    • renderingHints

      private RenderingHints renderingHints
    • pageImage

      private BufferedImage pageImage
    • kcmsLogged

      private static boolean kcmsLogged
    • imageDownscalingOptimizationThreshold

      private float imageDownscalingOptimizationThreshold
    • pageTree

      private final PDPageTree pageTree
  • Constructor Details

    • PDFRenderer

      public PDFRenderer(PDDocument document)
      Creates a new PDFRenderer.
      Parameters:
      document - the document to render
  • Method Details

    • getAnnotationsFilter

      public AnnotationFilter getAnnotationsFilter()
      Return the AnnotationFilter.
      Returns:
      the AnnotationFilter
    • setAnnotationsFilter

      public void setAnnotationsFilter(AnnotationFilter annotationsFilter)
      Set the AnnotationFilter.

      Allows to only render annotation accepted by the filter.

      Parameters:
      annotationsFilter - the AnnotationFilter
    • isSubsamplingAllowed

      public boolean isSubsamplingAllowed()
      Value indicating if the renderer is allowed to subsample images before drawing, according to image dimensions and requested scale. Subsampling may be faster and less memory-intensive in some cases, but it may also lead to loss of quality, especially in images with high spatial frequency.
      Returns:
      true if subsampling of images is allowed, false otherwise.
    • setSubsamplingAllowed

      public void setSubsamplingAllowed(boolean subsamplingAllowed)
      Sets a value instructing the renderer whether it is allowed to subsample images before drawing. The subsampling frequency is determined according to image size and requested scale. Subsampling may be faster and less memory-intensive in some cases, but it may also lead to loss of quality, especially in images with high spatial frequency.
      Parameters:
      subsamplingAllowed - The new value indicating if subsampling is allowed.
    • getDefaultDestination

      public RenderDestination getDefaultDestination()
      Returns:
      the defaultDestination
    • setDefaultDestination

      public void setDefaultDestination(RenderDestination defaultDestination)
      Parameters:
      defaultDestination - the defaultDestination to set
    • getRenderingHints

      public RenderingHints getRenderingHints()
      Get the rendering hints.
      Returns:
      the rendering hints or null if none are set.
    • setRenderingHints

      public void setRenderingHints(RenderingHints renderingHints)
      Set the rendering hints. Use this to influence rendering quality and speed. If you don't set them yourself or pass null, PDFBox will decide at runtime depending on the destination.
      Parameters:
      renderingHints -
    • getImageDownscalingOptimizationThreshold

      public float getImageDownscalingOptimizationThreshold()
      Returns:
      get the image downscaling optimization threshold. See getImageDownscalingOptimizationThreshold() for details.
    • setImageDownscalingOptimizationThreshold

      public void setImageDownscalingOptimizationThreshold(float imageDownscalingOptimizationThreshold)
      Set the image downscaling optimization threshold. This must be a value between 0 and 1. When rendering downscaled images and rendering hints are set to bicubic+quality and the scaling is smaller than the threshold, a more quality-optimized but slower method will be used. The default is 0.5 which is a good compromise.
      Parameters:
      imageDownscalingOptimizationThreshold -
    • renderImage

      public BufferedImage renderImage(int pageIndex) throws IOException
      Returns the given page as an RGB image at 72 DPI
      Parameters:
      pageIndex - the zero-based index of the page to be converted.
      Returns:
      the rendered page image
      Throws:
      IOException - if the PDF cannot be read
    • renderImage

      public BufferedImage renderImage(int pageIndex, float scale) throws IOException
      Returns the given page as an RGB image at the given scale. A scale of 1 will render at 72 DPI.
      Parameters:
      pageIndex - the zero-based index of the page to be converted
      scale - the scaling factor, where 1 = 72 DPI
      Returns:
      the rendered page image
      Throws:
      IOException - if the PDF cannot be read
    • renderImageWithDPI

      public BufferedImage renderImageWithDPI(int pageIndex, float dpi) throws IOException
      Returns the given page as an RGB image at the given DPI.
      Parameters:
      pageIndex - the zero-based index of the page to be converted
      dpi - the DPI (dots per inch) to render at
      Returns:
      the rendered page image
      Throws:
      IOException - if the PDF cannot be read
    • renderImageWithDPI

      public BufferedImage renderImageWithDPI(int pageIndex, float dpi, ImageType imageType) throws IOException
      Returns the given page as an RGB image at the given DPI.
      Parameters:
      pageIndex - the zero-based index of the page to be converted
      dpi - the DPI (dots per inch) to render at
      imageType - the type of image to return
      Returns:
      the rendered page image
      Throws:
      IOException - if the PDF cannot be read
    • renderImage

      public BufferedImage renderImage(int pageIndex, float scale, ImageType imageType) throws IOException
      Returns the given page as an RGB or ARGB image at the given scale.
      Parameters:
      pageIndex - the zero-based index of the page to be converted
      scale - the scaling factor, where 1 = 72 DPI
      imageType - the type of image to return
      Returns:
      the rendered page image
      Throws:
      IOException - if the PDF cannot be read
    • renderImage

      public BufferedImage renderImage(int pageIndex, float scale, ImageType imageType, RenderDestination destination) throws IOException
      Returns the given page as an RGB or ARGB image at the given scale.
      Parameters:
      pageIndex - the zero-based index of the page to be converted
      scale - the scaling factor, where 1 = 72 DPI
      imageType - the type of image to return
      destination - controlling visibility of optional content groups
      Returns:
      the rendered page image
      Throws:
      IOException - if the PDF cannot be read
    • renderPageToGraphics

      public void renderPageToGraphics(int pageIndex, Graphics2D graphics) throws IOException
      Renders a given page to an AWT Graphics2D instance at 72 DPI.

      Read renderPageToGraphics(int, Graphics2D, float, float, RenderDestination) before using this.

      Parameters:
      pageIndex - the zero-based index of the page to be converted
      graphics - the Graphics2D on which to draw the page
      Throws:
      IOException - if the PDF cannot be read
    • renderPageToGraphics

      public void renderPageToGraphics(int pageIndex, Graphics2D graphics, float scale) throws IOException
      Renders a given page to an AWT Graphics2D instance.

      Read renderPageToGraphics(int, Graphics2D, float, float, RenderDestination) before using this.

      Parameters:
      pageIndex - the zero-based index of the page to be converted
      graphics - the Graphics2D on which to draw the page
      scale - the scaling factor, where 1 = 72 DPI
      Throws:
      IOException - if the PDF cannot be read
    • renderPageToGraphics

      public void renderPageToGraphics(int pageIndex, Graphics2D graphics, float scaleX, float scaleY) throws IOException
      Renders a given page to an AWT Graphics2D instance.

      Read renderPageToGraphics(int, Graphics2D, float, float, RenderDestination) before using this.

      Parameters:
      pageIndex - the zero-based index of the page to be converted
      graphics - the Graphics2D on which to draw the page
      scaleX - the scale to draw the page at for the x-axis, where 1 = 72 DPI
      scaleY - the scale to draw the page at for the y-axis, where 1 = 72 DPI
      Throws:
      IOException - if the PDF cannot be read
    • renderPageToGraphics

      public void renderPageToGraphics(int pageIndex, Graphics2D graphics, float scaleX, float scaleY, RenderDestination destination) throws IOException
      Renders a given page to an AWT Graphics2D instance.

      Known problems:

      • rendering of PDF files with transparencies is not supported on Ubuntu, see PDFBOX-4581 and JDK-6689349. Rendering will not abort, but the pages will be rendered incorrectly.
      • Clipping the Graphics2D will not work properly, see PDFBOX-4583.
      If you encounter these problems, then you should render into an image by using the renderImage methods.
      Parameters:
      pageIndex - the zero-based index of the page to be converted
      graphics - the Graphics2D on which to draw the page
      scaleX - the scale to draw the page at for the x-axis, where 1 = 72 DPI
      scaleY - the scale to draw the page at for the y-axis, where 1 = 72 DPI
      destination - controlling visibility of optional content groups
      Throws:
      IOException - if the PDF cannot be read
    • isGroupEnabled

      public boolean isGroupEnabled(PDOptionalContentGroup group)
      Indicates whether an optional content group is enabled.
      Parameters:
      group - the group
      Returns:
      true if the group is enabled
    • transform

      private void transform(Graphics2D graphics, PDPage page, float scaleX, float scaleY)
    • isBitonal

      private boolean isBitonal(Graphics2D graphics)
    • createDefaultRenderingHints

      private RenderingHints createDefaultRenderingHints(Graphics2D graphics)
    • createPageDrawer

      protected PageDrawer createPageDrawer(PageDrawerParameters parameters) throws IOException
      Returns a new PageDrawer instance, using the given parameters. May be overridden.
      Throws:
      IOException
    • hasBlendMode

      private boolean hasBlendMode(PDPage page)
    • getPageImage

      BufferedImage getPageImage()
      Returns the image to which the current page is being rendered. May be null if the page is rendered to a Graphics2D object instead of a BufferedImage.
    • suggestKCMS

      private static void suggestKCMS()
    • isGoodVersion

      private static boolean isGoodVersion(String version, String regex, int min)
    • isMinJdk8

      private static boolean isMinJdk8()