You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/10/27 20:03:43 UTC

svn commit: r1634647 - in /pdfbox/trunk: pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightStreamEngine.java

Author: jahewson
Date: Mon Oct 27 19:03:43 2014
New Revision: 1634647

URL: http://svn.apache.org/r1634647
Log:
PDFBOX-2407: Preflight - Check sparation color spaces for device-independance

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java
    pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightStreamEngine.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java?rev=1634647&r1=1634646&r2=1634647&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java Mon Oct 27 19:03:43 2014
@@ -159,6 +159,15 @@ public class PDSeparation extends PDSpec
      * Returns the colorant name.
      * @return the name of the colorant
      */
+    public PDColorSpace getAlternateColorSpace()
+    {
+       return alternateColorSpace;
+    }
+
+    /**
+     * Returns the colorant name.
+     * @return the name of the colorant
+     */
     public String getColorantName()
     {
         COSName name = (COSName)array.getObject(COLORANT_NAMES);

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightStreamEngine.java?rev=1634647&r1=1634646&r2=1634647&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightStreamEngine.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightStreamEngine.java Mon Oct 27 19:03:43 2014
@@ -42,6 +42,7 @@ import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.graphics.color.PDCIEBasedColorSpace;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
 import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased;
+import org.apache.pdfbox.pdmodel.graphics.color.PDSeparation;
 import org.apache.pdfbox.preflight.PreflightConfiguration;
 import org.apache.pdfbox.preflight.PreflightContext;
 import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
@@ -382,24 +383,23 @@ public abstract class PreflightStreamEng
         {
             if (!validColorSpace(cs, ColorSpaceType.ALL))
             {
-                // The default fill color needs an OutputIntent
                 registerError("The operator \"" + operation + "\" can't be used without Color Profile",
                         ERROR_GRAPHIC_INVALID_COLOR_SPACE_MISSING);
             }
         }
     }
 
-    private boolean validColorSpace(PDColorSpace colorSpace, ColorSpaceType expectedType)
+    private boolean validColorSpace(PDColorSpace colorSpace, ColorSpaceType expectedIccType)
             throws ContentStreamException
     {
         if (colorSpace == null)
         {
-            return validColorSpaceDestOutputProfile(expectedType);
+            return validColorSpaceDestOutputProfile(expectedIccType);
         }
         else
         {
-            return isDeviceIndependent(colorSpace, expectedType) ||
-                   validColorSpaceDestOutputProfile(expectedType);
+            return isDeviceIndependent(colorSpace, expectedIccType) ||
+                   validColorSpaceDestOutputProfile(expectedIccType);
         }
     }
 
@@ -445,18 +445,23 @@ public abstract class PreflightStreamEng
      * Return true if the given ColorSpace is an independent device ColorSpace.
      * If the color space is an ICCBased, check the embedded profile color (RGB or CMYK)
      */
-    private boolean isDeviceIndependent(PDColorSpace cs, ColorSpaceType expectedType)
+    private boolean isDeviceIndependent(PDColorSpace cs, ColorSpaceType expectedIccType)
     {
         if (cs instanceof PDICCBased)
         {
             int type = ((PDICCBased)cs).getColorSpaceType();
-            switch (expectedType)
+            switch (expectedIccType)
             {
                 case RGB: return type == ICC_ColorSpace.TYPE_RGB;
                 case CMYK: return type == ICC_ColorSpace.TYPE_CMYK;
                 default: return true;
             }
         }
+        else if (cs instanceof PDSeparation)
+        {
+            return isDeviceIndependent(((PDSeparation)cs).getAlternateColorSpace(),
+                    expectedIccType);
+        }
         else
         {
             return cs instanceof PDCIEBasedColorSpace;