]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Certain filter combinations in PDF could lead to invalid PDFs. DecodeParams were...
authorJeremias Maerki <jeremias@apache.org>
Mon, 20 Mar 2006 13:49:05 +0000 (13:49 +0000)
committerJeremias Maerki <jeremias@apache.org>
Mon, 20 Mar 2006 13:49:05 +0000 (13:49 +0000)
Default filter for XMP metadata set to NullFilter as XMP metadata should always be embedded as clear-text so non-PDF-aware XMP processors can extract the metadata.
Default filter for DCT/JPEG- and CCITT/TIFF-encoded images set to NullFilter because these two compression methods already do a good job. An additional flate filter (as was applied before due to the single default) helps a just little but also adds processing time. If anyone wants to squeeze every possible bit out of the PDF you can use the following in the user configuration:
      <filterList type="tiff">
        <value>flate</value>
      </filterList>
      <filterList type="jpeg">
        <value>flate</value>
      </filterList>

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@387213 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/pdf/PDFFilterList.java
status.xml

index 6ffda9da7e18779556d46abba858694c4b6f8944..c26185b3741357c6787ffd238f70adc3432be474 100644 (file)
@@ -163,8 +163,19 @@ public class PDFFilterList {
             }
         }
         if (filterset == null || filterset.size() == 0) {
-            // built-in default to flate
-            addFilter(new FlateFilter());
+            if (METADATA_FILTER.equals(type)) {
+                //XMP metadata should not be embedded in clear-text
+                addFilter(new NullFilter());
+            } else if (JPEG_FILTER.equals(type)) {
+                //JPEG is already well compressed
+                addFilter(new NullFilter());
+            } else if (TIFF_FILTER.equals(type)) {
+                //CCITT-encoded images are already well compressed
+                addFilter(new NullFilter());
+            } else {
+                // built-in default to flate
+                addFilter(new FlateFilter());
+            }
         } else {
             for (int i = 0; i < filterset.size(); i++) {
                 String v = (String)filterset.get(i);
@@ -187,17 +198,24 @@ public class PDFFilterList {
             List parms = new java.util.ArrayList();
 
             // run the filters
+            int nonNullParams = 0;
             for (int count = 0; count < filters.size(); count++) {
                 PDFFilter filter = (PDFFilter)filters.get(count);
                 // place the names in our local vector in reverse order
-                names.add(0, filter.getName());
-                if (filter.getDecodeParms() != null) {
-                    parms.add(0, filter.getDecodeParms());
+                if (filter.getName().length() > 0) {
+                    names.add(0, filter.getName());
+                    if (filter.getDecodeParms() != null) {
+                        parms.add(0, filter.getDecodeParms());
+                        nonNullParams++;
+                    } else {
+                        parms.add(0, null);
+                    }
                 }
             }
 
             // now build up the filter entries for the dictionary
-            return buildFilterEntries(names) + buildDecodeParms(parms);
+            return buildFilterEntries(names) 
+                    + (nonNullParams > 0 ? buildDecodeParms(parms) : "");
         }
         return "";
 
index 4e23f12c12eb77b69e8b59e9f078b4eab9a3da20..f36b6968b07161874670c2e1db8584d748ad79b1 100644 (file)
 
   <changes>
     <release version="FOP Trunk">
+      <action context="Code" dev="JM" type="fix">
+        Bugfix: Certain filter combinations in PDF could lead to invalid PDFs. 
+        DecodeParams were not properly handled.
+      </action>
       <action context="Code" dev="JM" type="fix">
         Bugfix: CCITT Group 4 encoded TIFF images with multiple strips are now properly
         embedded in PDF files.