You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2019/01/26 13:58:40 UTC

svn commit: r1852228 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java

Author: tilman
Date: Sat Jan 26 13:58:40 2019
New Revision: 1852228

URL: http://svn.apache.org/viewvc?rev=1852228&view=rev
Log:
PDFBOX-4435: offer subsampling and renderingHints and pass these to PDFPrintable

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java?rev=1852228&r1=1852227&r2=1852228&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java Sat Jan 26 13:58:40 2019
@@ -17,6 +17,7 @@
 
 package org.apache.pdfbox.printing;
 
+import java.awt.RenderingHints;
 import java.awt.print.Book;
 import java.awt.print.PageFormat;
 import java.awt.print.Paper;
@@ -36,6 +37,8 @@ public final class PDFPageable extends B
     private final boolean showPageBorder;
     private final float dpi;
     private final Orientation orientation;
+    private boolean subsamplingAllowed = false;
+    private RenderingHints renderingHints = null;
 
     /**
      * Creates a new PDFPageable.
@@ -89,6 +92,56 @@ public final class PDFPageable extends B
         this.dpi = dpi;
     }
 
+    /**
+     * Get the rendering hints.
+     *
+     * @return the rendering hints or null if none are set.
+     */
+    public RenderingHints getRenderingHints()
+    {
+        return 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 <b><u>at runtime</u></b> depending on the
+     * destination.
+     *
+     * @param renderingHints
+     */
+    public void setRenderingHints(RenderingHints renderingHints)
+    {
+        this.renderingHints = renderingHints;
+    }
+
+    /**
+     * 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.
+     *
+     * @return true if subsampling of images is allowed, false otherwise.
+     */
+    public boolean isSubsamplingAllowed()
+    {
+        return 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.
+     *
+     * @param subsamplingAllowed The new value indicating if subsampling is allowed.
+     */
+    public void setSubsamplingAllowed(boolean subsamplingAllowed)
+    {
+        this.subsamplingAllowed = subsamplingAllowed;
+    }
+
     @Override
     public int getNumberOfPages()
     {
@@ -162,6 +215,9 @@ public final class PDFPageable extends B
         {
             throw new IndexOutOfBoundsException(i + " >= " + getNumberOfPages());
         }
-        return new PDFPrintable(document, Scaling.ACTUAL_SIZE, showPageBorder, dpi);
+        PDFPrintable printable = new PDFPrintable(document, Scaling.ACTUAL_SIZE, showPageBorder, dpi);
+        printable.setSubsamplingAllowed(subsamplingAllowed);
+        printable.setRenderingHints(renderingHints);
+        return printable;
     }
 }