You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2011/08/20 14:09:37 UTC

svn commit: r1159872 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: pdfviewer/ pdmodel/graphics/color/ util/operator/

Author: lehmi
Date: Sat Aug 20 12:09:37 2011
New Revision: 1159872

URL: http://svn.apache.org/viewvc?rev=1159872&view=rev
Log:
PDFBOX-1094: added the usage of the given pattern instead of a color

Added:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingPattern.java   (with props)
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingPattern.java   (with props)
Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColor.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColor.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java?rev=1159872&r1=1159871&r2=1159872&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java Sat Aug 20 12:09:37 2011
@@ -278,7 +278,17 @@ public class PageDrawer extends PDFStrea
     public void fillPath(int windingRule) throws IOException
     {
         graphics.setComposite(getGraphicsState().getNonStrokeJavaComposite());
-        graphics.setColor( getGraphicsState().getNonStrokingColor().getJavaColor() );
+        Color nonStrokingColor = getGraphicsState().getNonStrokingColor().getJavaColor();
+        if ( nonStrokingColor != null )
+        {
+            graphics.setColor( nonStrokingColor );
+        }
+        else 
+        {
+            log.info("ColorSpace "+getGraphicsState().getNonStrokingColor().getColorSpace().getName()
+                    +" doesn't provide a non-stroking color, using white instead!");
+            graphics.setColor( Color.WHITE );
+        }
         getLinePath().setWindingRule(windingRule);
         graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF );
         graphics.setClip(getGraphicsState().getCurrentClippingPath());
@@ -317,7 +327,17 @@ public class PageDrawer extends PDFStrea
     public void strokePath() throws IOException
     {
         graphics.setComposite(getGraphicsState().getStrokeJavaComposite());
-        graphics.setColor( getGraphicsState().getStrokingColor().getJavaColor() );
+        Color strokingColor = getGraphicsState().getStrokingColor().getJavaColor();
+        if ( strokingColor != null )
+        {
+            graphics.setColor( strokingColor );
+        }
+        else 
+        {
+            log.info("ColorSpace "+getGraphicsState().getStrokingColor().getColorSpace().getName()
+                    +" doesn't provide a stroking color, using black instead!");
+            graphics.setColor( Color.BLACK );
+        }
         graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF );
         graphics.setClip(getGraphicsState().getCurrentClippingPath());
         GeneralPath path = getLinePath();

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java?rev=1159872&r1=1159871&r2=1159872&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java Sat Aug 20 12:09:37 2011
@@ -25,6 +25,7 @@ import java.util.Arrays;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.pdmodel.graphics.pattern.PDPatternResources;
 
 /**
  * This class represents a color space and the color value for that colorspace.
@@ -72,6 +73,7 @@ public class PDColorState implements Clo
 
     private PDColorSpace colorSpace = new PDDeviceGray();
     private COSArray colorSpaceValue = new COSArray();
+    private PDPatternResources pattern = null;
 
     /**
      * Cached Java AWT color based on the current color space and value.
@@ -99,6 +101,7 @@ public class PDColorState implements Clo
         retval.colorSpace = this.colorSpace;
         retval.colorSpaceValue.clear();
         retval.colorSpaceValue.addAll( this.colorSpaceValue );
+        retval.setPattern(getPattern());
         return retval;
     }
 
@@ -109,7 +112,7 @@ public class PDColorState implements Clo
      * @throws IOException if the current color can not be created
      */
     public Color getJavaColor() throws IOException {
-        if (color == null) {
+        if (color == null && colorSpaceValue.size() > 0) {
             color = createColor();
         }
         return color;
@@ -250,8 +253,9 @@ public class PDColorState implements Clo
     public void setColorSpace(PDColorSpace value)
     {
         colorSpace = value;
-        // Clear color cache
+        // Clear color cache and current pattern
         color = null;
+        pattern = null;
     }
 
     /**
@@ -282,7 +286,32 @@ public class PDColorState implements Clo
     public void setColorSpaceValue(float[] value)
     {
         colorSpaceValue.setFloatArray( value );
-        // Clear color cache
+        // Clear color cache and current pattern
         color = null;
+        pattern = null;
     }
+
+    /**
+     * This will get the current pattern.
+     *
+     * @return The current pattern.
+     */
+    public PDPatternResources getPattern()
+    {
+        return pattern;
+    }
+
+    /**
+     * This will update the current pattern.
+     *
+     * @param pattern The new pattern.
+     */
+    public void setPattern(PDPatternResources pattern)
+    {
+        this.pattern = pattern;
+        // Clear color cache and colorSpaceValue
+        color = null;
+        colorSpaceValue.clear();
+    }
+    
 }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColor.java?rev=1159872&r1=1159871&r2=1159872&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingColor.java Sat Aug 20 12:09:37 2011
@@ -28,6 +28,7 @@ import org.apache.pdfbox.pdmodel.graphic
 import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK;
 import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased;
 import org.apache.pdfbox.pdmodel.graphics.color.PDCalRGB;
+import org.apache.pdfbox.pdmodel.graphics.color.PDPattern;
 import org.apache.pdfbox.pdmodel.graphics.color.PDSeparation;
 import org.apache.pdfbox.util.PDFOperator;
 import java.io.IOException;
@@ -86,6 +87,10 @@ public class SetNonStrokingColor extends
             {
                 newOperator = new SetNonStrokingDeviceN();
             }
+            else if (colorSpace instanceof PDPattern)
+            {
+                newOperator = new SetNonStrokingPattern();
+            }
 
             if (newOperator != null) 
             {

Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingPattern.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingPattern.java?rev=1159872&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingPattern.java (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingPattern.java Sat Aug 20 12:09:37 2011
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.util.operator;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.pdfbox.cos.COSBase;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.graphics.pattern.PDPatternResources;
+import org.apache.pdfbox.util.PDFOperator;
+
+/**
+ * <p>Set the non stroking pattern.</p>
+ *
+ * @version $Revision: 1.0 $
+ */
+public class SetNonStrokingPattern extends OperatorProcessor
+{
+    /**
+     * Set color space for non stroking operations.
+     * @param operator The operator that is being executed.
+     * @param arguments List
+     * @throws IOException If an error occurs while processing the pattern.
+     */
+    public void process(PDFOperator operator, List<COSBase> arguments) throws IOException
+    {
+        COSName selectedPattern = (COSName)arguments.get(0);
+        Map<String,PDPatternResources> patterns = getContext().getResources().getPatterns();
+        PDPatternResources pattern = patterns.get(selectedPattern.getName()); 
+        getContext().getGraphicsState().getNonStrokingColor().setPattern(pattern);
+    }
+}

Propchange: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingPattern.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColor.java?rev=1159872&r1=1159871&r2=1159872&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingColor.java Sat Aug 20 12:09:37 2011
@@ -28,6 +28,7 @@ import org.apache.pdfbox.pdmodel.graphic
 import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK;
 import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased;
 import org.apache.pdfbox.pdmodel.graphics.color.PDCalRGB;
+import org.apache.pdfbox.pdmodel.graphics.color.PDPattern;
 import org.apache.pdfbox.pdmodel.graphics.color.PDSeparation;
 import org.apache.pdfbox.util.PDFOperator;
 import java.io.IOException;
@@ -86,6 +87,10 @@ public class SetStrokingColor extends Op
             {
                 newOperator = new SetStrokingDeviceN();
             }
+            else if (colorSpace instanceof PDPattern)
+            {
+                newOperator = new SetStrokingPattern();
+            }
 
             if (newOperator != null) 
             {

Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingPattern.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingPattern.java?rev=1159872&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingPattern.java (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingPattern.java Sat Aug 20 12:09:37 2011
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.util.operator;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.pdfbox.cos.COSBase;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.graphics.pattern.PDPatternResources;
+import org.apache.pdfbox.util.PDFOperator;
+
+/**
+ * <p>Set the stroking pattern.</p>
+ *
+ * @version $Revision: 1.0 $
+ */
+public class SetStrokingPattern extends OperatorProcessor
+{
+    /**
+     * Set pattern instead of a color space for stroking operations.
+     * @param operator The operator that is being executed.
+     * @param arguments List
+     * @throws IOException If an error occurs while processing the pattern.
+     */
+    public void process(PDFOperator operator, List<COSBase> arguments) throws IOException
+    {
+        COSName selectedPattern = (COSName)arguments.get(0);
+        Map<String,PDPatternResources> patterns = getContext().getResources().getPatterns();
+        PDPatternResources pattern = patterns.get(selectedPattern.getName()); 
+        getContext().getGraphicsState().getStrokingColor().setPattern(pattern);
+    }
+}

Propchange: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetStrokingPattern.java
------------------------------------------------------------------------------
    svn:eol-style = native