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 2017/10/29 19:56:02 UTC
svn commit: r1813702 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter: Filter.java
FlateFilter.java
Author: tilman
Date: Sun Oct 29 19:56:02 2017
New Revision: 1813702
URL: http://svn.apache.org/viewvc?rev=1813702&view=rev
Log:
PDFBOX-3982: configure compression level for /Flate filter, as proposed by Emmeran Seehuber
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java?rev=1813702&r1=1813701&r2=1813702&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java Sun Oct 29 19:56:02 2017
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
+import java.util.zip.Deflater;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
@@ -42,6 +43,14 @@ public abstract class Filter
private static final Log LOG = LogFactory.getLog(Filter.class);
/**
+ * Compression Level System Property. Set this to a value from 0 to 9 to change the zlib deflate
+ * compression level used to compress /Flate streams. The default value is -1 with is
+ * {@link Deflater#DEFAULT_COMPRESSION}. To set maximum compression, use
+ * {@code System.setProperty(Filter.SYSPROP_DEFLATELEVEL, "9");}
+ */
+ public static final String SYSPROP_DEFLATELEVEL = "org.apache.pdfbox.filter.deflatelevel";
+
+ /**
* Constructor.
*/
protected Filter()
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java?rev=1813702&r1=1813701&r2=1813702&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java Sun Oct 29 19:56:02 2017
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.DataFormatException;
+import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.Inflater;
import org.apache.commons.logging.Log;
@@ -142,7 +143,18 @@ final class FlateFilter extends Filter
protected void encode(InputStream input, OutputStream encoded, COSDictionary parameters)
throws IOException
{
- try (DeflaterOutputStream out = new DeflaterOutputStream(encoded))
+ int compressionLevel = Deflater.DEFAULT_COMPRESSION;
+ try
+ {
+ compressionLevel = Integer.parseInt(System.getProperty(Filter.SYSPROP_DEFLATELEVEL, "-1"));
+ }
+ catch (NumberFormatException ex)
+ {
+ LOG.warn(ex.getMessage(), ex);
+ }
+ compressionLevel = Math.max(-1, Math.min(Deflater.BEST_COMPRESSION, compressionLevel));
+ Deflater deflater = new Deflater(compressionLevel);
+ try (DeflaterOutputStream out = new DeflaterOutputStream(encoded,deflater))
{
int amountRead;
int mayRead = input.available();