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/25 22:40:17 UTC

svn commit: r1634252 [2/3] - in /pdfbox/trunk: examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ examples/src/main/java/org/apache/pdfbox/examples/util/ pdfbox/src/main/java/org/apache/pdfbox/contentstream/ pdfbox/src/main/java/org/apache/pdfb...

Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java?rev=1634252&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java Sat Oct 25 20:40:16 2014
@@ -0,0 +1,72 @@
+/*
+ * 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.pdmodel.font;
+
+import org.apache.pdfbox.contentstream.PDContentStream;
+import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+
+/**
+ * A Type 3 character procedure. This is a standalone PDF content stream.
+ *
+ * @author John Hewson
+ */
+public final class PDType3CharProc implements COSObjectable, PDContentStream
+{
+    private final PDType3Font font;
+    private final COSStream charStream;
+
+    public PDType3CharProc(PDType3Font font, COSStream charStream)
+    {
+        this.font = font;
+        this.charStream = charStream;
+    }
+
+    @Override
+    public COSStream getCOSObject()
+    {
+        return charStream;
+    }
+
+    public PDType3Font getFont()
+    {
+        return font;
+    }
+
+    @Override
+    public COSStream getContentStream()
+    {
+        return charStream;
+    }
+
+    @Override
+    public PDResources getResources()
+    {
+        return font.getResources();
+    }
+
+    @Override
+    public PDRectangle getBBox()
+    {
+        return font.getFontBBox();
+    }
+
+    // todo: add methods for getting the character's width from the stream
+}

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java Sat Oct 25 20:40:16 2014
@@ -41,8 +41,8 @@ public class PDType3Font extends PDSimpl
 {
     private static final Log LOG = LogFactory.getLog(PDType3Font.class);
 
-	private PDResources type3Resources = null;
-    private COSDictionary charProcs = null;
+	private PDResources resources;
+    private COSDictionary charProcs;
     private Matrix fontMatrix;
 
     /**
@@ -190,17 +190,17 @@ public class PDType3Font extends PDSimpl
      *
      * @return the resources bound to be used when parsing the type3 stream
      */
-    public PDResources getType3Resources()
+    public PDResources getResources()
     {
-        if (type3Resources == null)
+        if (resources == null)
         {
             COSDictionary resources = (COSDictionary) dict.getDictionaryObject(COSName.RESOURCES);
             if (resources != null)
             {
-            	type3Resources = new PDResources(resources);
+            	this.resources = new PDResources(resources);
             }
         }
-        return type3Resources;
+        return resources;
     }
 
     /**
@@ -242,20 +242,20 @@ public class PDType3Font extends PDSimpl
     }
     
     /**
-     * Returns the stream of the glyph representing by the given character
+     * Returns the stream of the glyph for the given character code
      * 
-     * @param code char code
+     * @param code character code
      * @return the stream to be used to render the glyph
-     * @throws IOException If something went wrong when getting the stream.
      */
-    public COSStream getCharStream(int code) throws IOException
+    public PDType3CharProc getCharProc(int code)
     {
-    	COSStream stream = null;
-        String cMapsTo = getEncoding().getName(code);
-        if (cMapsTo != null)
+        String name = getEncoding().getName(code);
+        if (name != null)
         {
-        	stream = (COSStream)getCharProcs().getDictionaryObject(COSName.getPDFName(cMapsTo));
+            COSStream stream;
+        	stream = (COSStream)getCharProcs().getDictionaryObject(COSName.getPDFName(name));
+            return new PDType3CharProc(this, stream);
         }
-        return stream;
+        return null;
     }
 }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java Sat Oct 25 20:40:16 2014
@@ -20,6 +20,7 @@ import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSObject;
+import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.rendering.PDFRenderer;
@@ -247,7 +248,7 @@ public abstract class PDColorSpace imple
      * @return an AWT paint
      * @throws IOException if the color conversion fails
      */
-    public Paint toPaint(PDFRenderer renderer, PDColor color, Matrix subStreamMatrix,
+    public Paint toPaint(PDFRenderer renderer, PDPage page, PDColor color, Matrix subStreamMatrix,
                          AffineTransform xform) throws IOException
     {
         float[] rgb = toRGB(color.getComponents());

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDPattern.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDPattern.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDPattern.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDPattern.java Sat Oct 25 20:40:16 2014
@@ -18,6 +18,7 @@ package org.apache.pdfbox.pdmodel.graphi
 
 import java.awt.Color;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern;
 import org.apache.pdfbox.pdmodel.graphics.pattern.PDShadingPattern;
@@ -110,7 +111,7 @@ public final class PDPattern extends PDS
     }
 
     @Override
-    public Paint toPaint(PDFRenderer renderer, PDColor color, Matrix substreamMatrix,
+    public Paint toPaint(PDFRenderer renderer, PDPage page, PDColor color, Matrix substreamMatrix,
                          AffineTransform xform) throws IOException
     {
         PDAbstractPattern pattern = getPattern(color);
@@ -132,13 +133,13 @@ public final class PDPattern extends PDS
             if (tilingPattern.getPaintType() == PDTilingPattern.PAINT_COLORED)
             {
                 // colored tiling pattern
-                return new TilingPaint(renderer, tilingPattern, 
+                return new TilingPaint(renderer, page, tilingPattern,
                         matrix, xform);
             }
             else
             {
                 // uncolored tiling pattern
-                return new TilingPaint(renderer, tilingPattern, underlyingColorSpace, color, 
+                return new TilingPaint(renderer, page, tilingPattern, underlyingColorSpace, color,
                         matrix, xform);
             }
         }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java Sat Oct 25 20:40:16 2014
@@ -18,13 +18,13 @@ package org.apache.pdfbox.pdmodel.graphi
 
 import java.awt.geom.AffineTransform;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.contentstream.PDContentStream;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSFloat;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSNumber;
+import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
@@ -51,10 +51,8 @@ final and all fields private.
  * 
  * @author Ben Litchfield
  */
-public final class PDFormXObject extends PDXObject
+public final class PDFormXObject extends PDXObject implements PDContentStream
 {
-    private static final Log LOG = LogFactory.getLog(PDFormXObject.class);
-
     // name of XObject in resources, to prevent recursion
     private String name;
 
@@ -124,12 +122,19 @@ public final class PDFormXObject extends
         return group;
     }
 
+    @Override
+    public COSStream getContentStream()
+    {
+        return getCOSStream();
+    }
+
     /**
      * This will get the resources at this page and not look up the hierarchy.
      * This attribute is inheritable, and findResources() should probably used.
      * This will return null if no resources are available at this level.
      * @return The resources at this level in the hierarchy.
      */
+    @Override
     public PDResources getResources()
     {
         COSDictionary resources = (COSDictionary) getCOSStream().getDictionaryObject(COSName.RESOURCES);
@@ -156,6 +161,7 @@ public final class PDFormXObject extends
      * These boundaries are used to clip the form XObject and to determine its size for caching.
      * @return The BBox of the form.
      */
+    @Override
     public PDRectangle getBBox()
     {
         PDRectangle retval = null;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPattern.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPattern.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPattern.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPattern.java Sat Oct 25 20:40:16 2014
@@ -18,11 +18,13 @@ package org.apache.pdfbox.pdmodel.graphi
 
 import java.awt.geom.AffineTransform;
 
+import org.apache.pdfbox.contentstream.PDContentStream;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSFloat;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSNumber;
+import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.util.Matrix;
@@ -31,7 +33,7 @@ import org.apache.pdfbox.util.Matrix;
  * A tiling pattern dictionary.
  * @author Andreas Lehmkühler
  */
-public class PDTilingPattern extends PDAbstractPattern
+public class PDTilingPattern extends PDAbstractPattern implements PDContentStream
 {
     /** paint type 1 = colored tiling pattern. */
     public static final int PAINT_COLORED = 1;
@@ -165,6 +167,12 @@ public class PDTilingPattern extends PDA
         return getCOSDictionary().getFloat( COSName.Y_STEP, 0 );
     }
 
+    @Override
+    public COSStream getContentStream()
+    {
+        return (COSStream)getCOSObject();
+    }
+
     /**
      * This will get the resources for this pattern.
      * This will return null if no resources are available at this level.
@@ -203,8 +211,9 @@ public class PDTilingPattern extends PDA
      * below), giving the coordinates of the left, bottom, right, and top edges,
      * respectively, of the pattern's bounding box.
      *
-     * @return The BBox of the form.
+     * @return The BBox of the pattern.
      */
+    @Override
     public PDRectangle getBBox()
     {
         PDRectangle retval = null;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/TilingPaint.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/TilingPaint.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/TilingPaint.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/TilingPaint.java Sat Oct 25 20:40:16 2014
@@ -32,6 +32,7 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 
+import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
@@ -60,9 +61,9 @@ public class TilingPaint extends Texture
      * @throws java.io.IOException if something goes wrong while drawing the
      * pattern
      */
-    public TilingPaint(PDFRenderer renderer, PDTilingPattern pattern, Matrix matrix, AffineTransform xform) throws IOException
+    public TilingPaint(PDFRenderer renderer, PDPage page, PDTilingPattern pattern, Matrix matrix, AffineTransform xform) throws IOException
     {
-        super(getImage(renderer, pattern, null, null, matrix, xform), getTransformedRect(pattern, matrix));
+        super(getImage(renderer, page, pattern, null, null, matrix, xform), getTransformedRect(pattern, matrix));
     }
 
     /**
@@ -77,10 +78,10 @@ public class TilingPaint extends Texture
      * 
      * @throws java.io.IOException if something goes wrong while drawing the pattern
      */
-    public TilingPaint(PDFRenderer renderer, PDTilingPattern pattern, PDColorSpace colorSpace,
+    public TilingPaint(PDFRenderer renderer, PDPage page, PDTilingPattern pattern, PDColorSpace colorSpace,
             PDColor color, Matrix matrix, AffineTransform xform) throws IOException
     {
-        super(getImage(renderer, pattern, colorSpace, color, matrix, xform), getTransformedRect(pattern, matrix));
+        super(getImage(renderer, page, pattern, colorSpace, color, matrix, xform), getTransformedRect(pattern, matrix));
     }
 
     //  gets rect in parent content stream coordinates
@@ -136,7 +137,7 @@ public class TilingPaint extends Texture
     }
 
     // gets image in parent stream coordinates
-    private static BufferedImage getImage(PDFRenderer renderer, PDTilingPattern pattern,
+    private static BufferedImage getImage(PDFRenderer renderer, PDPage page, PDTilingPattern pattern,
             PDColorSpace colorSpace, PDColor color, Matrix matrix, AffineTransform xform) throws IOException
     {
         ColorSpace outputCS = ColorSpace.getInstance(ColorSpace.CS_sRGB);
@@ -160,7 +161,7 @@ public class TilingPaint extends Texture
         matrix.setValue(2, 1, matrix.getValue(2, 1) - (float) p.getY()); // ty
 
         // TODO: need to make it easy to use a custom TilingPatternDrawer
-        PageDrawer drawer = new TilingPatternDrawer(renderer);
+        PageDrawer drawer = new TilingPatternDrawer(renderer, page);
         PDRectangle pdRect = new PDRectangle(0, 0, width, height);
 
         Graphics2D graphics = image.createGraphics();

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java Sat Oct 25 20:40:16 2014
@@ -18,6 +18,7 @@ package org.apache.pdfbox.pdmodel.intera
 
 import java.awt.geom.AffineTransform;
 
+import org.apache.pdfbox.contentstream.PDContentStream;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
@@ -32,17 +33,18 @@ import org.apache.pdfbox.pdmodel.common.
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.util.Matrix;
 
-
 /**
  * This class represents an appearance for an annotation.
  *
- * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
- * @version $Revision: 1.4 $
+ * @author Ben Litchfield
  */
-public class PDAppearanceStream implements COSObjectable
+public class PDAppearanceStream implements COSObjectable, PDContentStream
 {
     private COSStream stream = null;
 
+    private PDAppearanceStream()
+    {
+    }
 
     /**
      * Constructor.
@@ -78,7 +80,8 @@ public class PDAppearanceStream implemen
      *
      * @return The bounding box for this appearance.
      */
-    public PDRectangle getBoundingBox()
+    @Override
+    public PDRectangle getBBox()
     {
         PDRectangle box = null;
         COSArray bbox = (COSArray)stream.getDictionaryObject( COSName.BBOX );
@@ -94,7 +97,7 @@ public class PDAppearanceStream implemen
      *
      * @param rectangle The new bounding box.
      */
-    public void setBoundingBox( PDRectangle rectangle )
+    public void setBBox(PDRectangle rectangle)
     {
         COSArray array = null;
         if( rectangle != null )
@@ -104,11 +107,18 @@ public class PDAppearanceStream implemen
         stream.setItem( COSName.BBOX, array );
     }
 
+    @Override
+    public COSStream getContentStream()
+    {
+        return getStream();
+    }
+
     /**
      * This will get the resources for this appearance stream.
      *
      * @return The appearance stream resources.
      */
+    @Override
     public PDResources getResources()
     {
         PDResources retval = null;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSignDesigner.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSignDesigner.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSignDesigner.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSignDesigner.java Sat Oct 25 20:40:16 2014
@@ -20,7 +20,6 @@ import java.awt.image.BufferedImage;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.List;
 
 import javax.imageio.ImageIO;
 
@@ -112,9 +111,9 @@ public class PDVisibleSignDesigner
             throw new IllegalArgumentException("First page of pdf is 1, not " + page);
         }
 
-        List<?> pages = document.getDocumentCatalog().getAllPages();
-        PDPage firstPage =(PDPage) pages.get(page - 1);
-        PDRectangle mediaBox = firstPage.findMediaBox();
+
+        PDPage firstPage = document.getPage(page - 1);
+        PDRectangle mediaBox = firstPage.getMediaBox();
         pageHeight(mediaBox.getHeight());
         pageWidth = mediaBox.getWidth();
 

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java Sat Oct 25 20:40:16 2014
@@ -16,8 +16,6 @@
  */
 package org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination;
 
-import java.util.List;
-
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
@@ -25,7 +23,7 @@ import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSNumber;
 
 import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.PDPageNode;
+import org.apache.pdfbox.pdmodel.PDPageTree;
 
 /**
  * This represents a destination to a page, see subclasses for specific parameters.
@@ -121,7 +119,8 @@ public abstract class PDPageDestination 
      * @see org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem
      * @return page number, or -1 if the destination type is unknown
      */
-    public int findPageNumber() {
+    public int findPageNumber()
+    {
         int retval = -1;
         if( array.size() > 0 )
         {
@@ -138,9 +137,8 @@ public abstract class PDPageDestination 
                     parent = ((COSDictionary) parent).getDictionaryObject(COSName.PARENT, COSName.P);
                 }
                 // now parent is the pages node
-                PDPageNode pages = new PDPageNode((COSDictionary) parent);
-                List<PDPage> allPages = pages.getAllKids();
-                retval = allPages.indexOf(new PDPage((COSDictionary) page)) + 1;
+                PDPageTree pages = new PDPageTree((COSDictionary) parent);
+                return pages.indexOf(new PDPage((COSDictionary) page)) + 1;
             }
         }
         return retval;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java Sat Oct 25 20:40:16 2014
@@ -271,8 +271,7 @@ public class PDOutlineItem extends PDOut
             int pageNumber = pageDestination.getPageNumber();
             if( pageNumber != -1 )
             {
-                List allPages = doc.getDocumentCatalog().getAllPages();
-                page = (PDPage)allPages.get( pageNumber );
+                page = doc.getPage( pageNumber - 1 );
             }
         }
 

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java Sat Oct 25 20:40:16 2014
@@ -242,7 +242,7 @@ public final class PDAppearanceString
                 {
                     COSStream cosStream = acroForm.getDocument().getDocument().createCOSStream();
                     appearanceStream = new PDAppearanceStream(cosStream);
-                    appearanceStream.setBoundingBox(widget.getRectangle()
+                    appearanceStream.setBBox(widget.getRectangle()
                             .createRetranslatedRectangle());
                     appearance.setNormalAppearance(appearanceStream);
                 }
@@ -284,7 +284,7 @@ public final class PDAppearanceString
                         ByteArrayOutputStream output = new ByteArrayOutputStream();
                         ContentStreamWriter writer = new ContentStreamWriter(output);
                         float fontSize = calculateFontSize(pdFont,
-                                appearanceStream.getBoundingBox(), tokens, null);
+                                appearanceStream.getBBox(), tokens, null);
                         boolean foundString = false;
                         for (Object token : tokens)
                         {
@@ -340,7 +340,7 @@ public final class PDAppearanceString
     {
         PrintWriter printWriter = new PrintWriter(output, true);
         float fontSize = 0.0f;
-        PDRectangle boundingBox = appearanceStream.getBoundingBox();
+        PDRectangle boundingBox = appearanceStream.getBBox();
         if (boundingBox == null)
         {
             boundingBox = fieldWidget.getRectangle().createRetranslatedRectangle();

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrinter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrinter.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrinter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrinter.java Sat Oct 25 20:40:16 2014
@@ -19,8 +19,6 @@ package org.apache.pdfbox.printing;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
-import org.apache.pdfbox.printing.Orientation;
-import org.apache.pdfbox.printing.Scaling;
 
 import javax.print.attribute.PrintRequestAttributeSet;
 import java.awt.BasicStroke;
@@ -309,7 +307,7 @@ public class PDFPrinter
             // auto portrait/landscape
             if (orientation == Orientation.AUTO)
             {
-                Dimension cropBox = page.findRotatedCropBox().createDimension();
+                Dimension cropBox = getRotatedCropBox(page).createDimension();
                 if (cropBox.getWidth() > cropBox.getHeight())
                 {
                     format.setOrientation(PageFormat.LANDSCAPE);
@@ -348,6 +346,27 @@ public class PDFPrinter
         }
     }
 
+    /**
+     * This will find the CropBox with rotation applied, for this page by looking up the hierarchy
+     * until it finds them.
+     *
+     * @return The CropBox at this level in the hierarchy.
+     */
+    private PDRectangle getRotatedCropBox(PDPage page)
+    {
+        PDRectangle cropBox = page.getCropBox();
+        int rotation = page.getRotation();
+        if (rotation == 90 || rotation == 270)
+        {
+            return new PDRectangle(cropBox.getLowerLeftY(), cropBox.getLowerLeftX(),
+                    cropBox.getHeight(), cropBox.getWidth());
+        }
+        else
+        {
+            return cropBox;
+        }
+    }
+
     protected class PDFPrintable implements Printable
     {
         @Override
@@ -363,7 +382,7 @@ public class PDFPrinter
                 Graphics2D graphics2D = (Graphics2D)graphics;
 
                 PDPage page = document.getPage(pageIndex);
-                PDRectangle cropBox = page.findRotatedCropBox();
+                PDRectangle cropBox = getRotatedCropBox(page);
 
                 // the imageable area is the area within the page margins
                 final double imageableWidth = pageFormat.getImageableWidth();

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java Sat Oct 25 20:40:16 2014
@@ -109,12 +109,12 @@ public class PDFRenderer
     {
         PDPage page = document.getPage(pageIndex);
 
-        PDRectangle adjustedCropBox = page.calcAdjustedCropBox();
+        PDRectangle adjustedCropBox = page.getCropBox();
         float widthPt = adjustedCropBox.getWidth();
         float heightPt = adjustedCropBox.getHeight();
         int widthPx = Math.round(widthPt * scale);
         int heightPx = Math.round(heightPt * scale);
-        int rotationAngle = page.findRotation();
+        int rotationAngle = page.getRotation();
 
         // normalize the rotation angle
         if (rotationAngle < 0)
@@ -173,7 +173,7 @@ public class PDFRenderer
     {
         PDPage page = document.getPage(pageIndex);
         // TODO need width/wight calculations? should these be in PageDrawer?
-        PDRectangle adjustedCropBox = page.calcAdjustedCropBox();
+        PDRectangle adjustedCropBox = page.getCropBox();
         renderPage(page, graphics, (int)adjustedCropBox.getWidth(), (int)adjustedCropBox.getHeight(), scale, scale);
     }
 
@@ -187,8 +187,8 @@ public class PDFRenderer
         graphics.scale(scaleX, scaleY);
         // TODO should we be passing the scale to PageDrawer rather than messing with Graphics?
 
-        PDRectangle adjustedCropBox = page.calcAdjustedCropBox();
-        int rotationAngle = page.findRotation();
+        PDRectangle adjustedCropBox = page.getCropBox();
+        int rotationAngle = page.getRotation();
         if (rotationAngle != 0)
         {
             float translateX = 0;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Sat Oct 25 20:40:16 2014
@@ -40,9 +40,9 @@ import java.util.Map;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.pdmodel.font.PDCIDFontType0;
 import org.apache.pdfbox.pdmodel.font.PDCIDFontType2;
+import org.apache.pdfbox.pdmodel.font.PDType3CharProc;
 import org.apache.pdfbox.pdmodel.graphics.image.PDImage;
 import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode;
 import org.apache.pdfbox.rendering.font.CIDType0Glyph2D;
@@ -105,7 +105,7 @@ public class PageDrawer extends PDFGraph
     private final Map<PDFont, Glyph2D> fontGlyph2D = new HashMap<PDFont, Glyph2D>();
     
     /**
-     * Default constructor, loads properties from file.
+     * Constructor.
      * 
      * @param renderer renderer to render the page.
      * @param page the page that is to be rendered.
@@ -118,18 +118,6 @@ public class PageDrawer extends PDFGraph
     }
 
     /**
-     * Tiling pattern constructor, loads properties from file.
-     * 
-     * @param renderer renderer to render the page
-     * @throws IOException If there is an error loading properties from the file.
-     */
-    PageDrawer(PDFRenderer renderer) throws IOException
-    {
-        super(null);
-        this.renderer = renderer;
-    }
-
-    /**
      * Returns the parent renderer.
      */
     public PDFRenderer getRenderer()
@@ -168,20 +156,8 @@ public class PageDrawer extends PDFGraph
         // TODO use getStroke() to set the initial stroke
         graphics.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER));
 
-        // Only if there is some content, we have to process it.
-        // Otherwise we are done here and we will produce an empty page
         PDPage page = getPage();
-        
-        PDRectangle adjustedCropBox = page.calcAdjustedCropBox();
-        
-        if (page.getContents() != null)
-        {
-            processStream(page.findResources(), page.getContents().getStream(), adjustedCropBox);
-        }
-        else
-        {
-            initStream(adjustedCropBox);
-        }
+        processPage(page);
 
         for (PDAnnotation annotation : page.getAnnotations())
         {
@@ -202,7 +178,7 @@ public class PageDrawer extends PDFGraph
                     {
                         saveGraphicsState();
 
-                        PDRectangle bBox = appearance.getBoundingBox();
+                        PDRectangle bBox = appearance.getBBox();
                         
                         Rectangle2D rect2D = new Rectangle2D.Float(
                                 rect.getLowerLeftX(), 
@@ -268,7 +244,7 @@ public class PageDrawer extends PDFGraph
 
                         graphics.translate((int) point.getX(), (int) point.getY());
                         lastClip = null;
-                        processSubStream(appearance.getResources(), appearance.getStream());
+                        processChildStream(appearance);
                         graphics.translate(-(int) point.getX(), -(int) point.getY());
                        
                         restoreGraphicsState();
@@ -297,12 +273,6 @@ public class PageDrawer extends PDFGraph
         graphics = g;
         setRenderingHints();
 
-        initStream(pageDimension);
-
-        // transformPoint ctm
-        Matrix concat = matrix.multiply(getGraphicsState().getCurrentTransformationMatrix());
-        getGraphicsState().setCurrentTransformationMatrix(concat);
-
         // color
         if (colorSpace != null)
         {
@@ -312,7 +282,7 @@ public class PageDrawer extends PDFGraph
             getGraphicsState().setStrokingColor(color);
         }
 
-        processSubStream(pattern.getResources(), (COSStream)pattern.getCOSObject());
+        processChildStreamWithMatrix(pattern, getPage(), matrix, pageDimension);
     }
 
     // sets the clipping path using caching for performance, we track lastClip manually because
@@ -442,8 +412,8 @@ public class PageDrawer extends PDFGraph
      */
     private void drawType3String(PDType3Font font, int code, AffineTransform at) throws IOException
     {
-        COSStream stream = font.getCharStream(code);
-        if (stream != null)
+        PDType3CharProc charProc = font.getCharProc(code);
+        if (charProc != null)
         {
             // save the current graphics state and matrices
             saveGraphicsState();
@@ -453,7 +423,7 @@ public class PageDrawer extends PDFGraph
             Matrix ctm = new Matrix();
             ctm.setFromAffineTransform(at);
             getGraphicsState().setCurrentTransformationMatrix(ctm);
-            processSubStream(font.getType3Resources(), stream);
+            processChildStream(charProc);
 
             // restore the saved graphics state and matrices
             restoreGraphicsState();
@@ -592,7 +562,7 @@ public class PageDrawer extends PDFGraph
     {
         PDGraphicsState graphicsState = getGraphicsState();
         return applySoftMaskToPaint(graphicsState.getStrokingColorSpace()
-                .toPaint(renderer, graphicsState.getStrokingColor(),
+                .toPaint(renderer, getPage(), graphicsState.getStrokingColor(),
                          getSubStreamMatrix(), xform),
                 graphicsState.getSoftMask());
     }
@@ -601,7 +571,7 @@ public class PageDrawer extends PDFGraph
     private Paint getNonStrokingPaint() throws IOException
     {
         return getGraphicsState().getNonStrokingColorSpace()
-                .toPaint(renderer, getGraphicsState().getNonStrokingColor(),
+                .toPaint(renderer, getPage(), getGraphicsState().getNonStrokingColor(),
                          getSubStreamMatrix(), xform);
     }
 
@@ -816,7 +786,7 @@ public class PageDrawer extends PDFGraph
             PDColorSpace colorSpace = getGraphicsState().getNonStrokingColorSpace();
             PDColor color = getGraphicsState().getNonStrokingColor();
             BufferedImage image = pdImage.getStencilImage(
-                    colorSpace.toPaint(renderer, color, getSubStreamMatrix(), xform));
+                    colorSpace.toPaint(renderer, getPage(), color, getSubStreamMatrix(), xform));
 
             // draw the image
             drawBufferedImage(image, at);
@@ -904,12 +874,6 @@ public class PageDrawer extends PDFGraph
         saveGraphicsState();
         try
         {
-            PDResources pdResources = form.getResources();
-            if (pdResources == null)
-            {
-                pdResources = getResources();
-            }
-
             // if there is an optional form matrix, we have to map the form space to the user space
             Matrix matrix = form.getMatrix();
             if(matrix != null)
@@ -920,7 +884,7 @@ public class PageDrawer extends PDFGraph
 
             PDRectangle bBox = form.getBBox();
             GeneralPath path = transformedPDRectanglePath(bBox);
-            return new TransparencyGroup(path, pdResources, form.getCOSStream());
+            return new TransparencyGroup(path, form);
         }
         finally
         {
@@ -945,11 +909,8 @@ public class PageDrawer extends PDFGraph
          * Creates a buffered image for a transparency group result.
          *
          * @param clippingPath clipping path (in current graphics2D coordinates)
-         * @param resources Global resources
-         * @param content Content of the transparency group to create
          */
-        private TransparencyGroup(GeneralPath clippingPath, PDResources resources,
-                                  COSStream content) throws IOException
+        private TransparencyGroup(GeneralPath clippingPath, PDFormXObject form) throws IOException
         {
             Graphics2D g2dOriginal = graphics;
             Area lastClipOriginal = lastClip;
@@ -1004,7 +965,7 @@ public class PageDrawer extends PDFGraph
             graphics = g;
             try
             {
-                processSubStream(resources, content);
+                processChildStream(form);
             }
             finally 
             {

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPatternDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPatternDrawer.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPatternDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPatternDrawer.java Sat Oct 25 20:40:16 2014
@@ -17,6 +17,7 @@
 package org.apache.pdfbox.rendering;
 
 import java.io.IOException;
+import org.apache.pdfbox.pdmodel.PDPage;
 
 /**
  * Tiling pattern drawer.
@@ -32,8 +33,8 @@ public class TilingPatternDrawer extends
      * 
      * @throws java.io.IOException If there is an error loading properties from the file.
      */
-    public TilingPatternDrawer(PDFRenderer renderer) throws IOException
+    public TilingPatternDrawer(PDFRenderer renderer, PDPage page) throws IOException
     {
-        super(renderer);
+        super(renderer, page);
     }
 }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/LayerUtility.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/LayerUtility.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/LayerUtility.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/LayerUtility.java Sat Oct 25 20:40:16 2014
@@ -130,7 +130,7 @@ public class LayerUtility
      */
     public PDFormXObject importPageAsForm(PDDocument sourceDoc, int pageNumber) throws IOException
     {
-        PDPage page = (PDPage)sourceDoc.getDocumentCatalog().getAllPages().get(pageNumber);
+        PDPage page = sourceDoc.getPage(pageNumber);
         return importPageAsForm(sourceDoc, page);
     }
 
@@ -147,13 +147,13 @@ public class LayerUtility
      */
     public PDFormXObject importPageAsForm(PDDocument sourceDoc, PDPage page) throws IOException
     {
-        COSStream pageStream = (COSStream)page.getContents().getCOSObject();
+        COSStream pageStream = (COSStream)page.getStream().getCOSObject();
         PDStream newStream = new PDStream(targetDoc,
                 pageStream.getUnfilteredStream(), false);
         PDFormXObject form = new PDFormXObject(newStream);
 
         //Copy resources
-        PDResources pageRes = page.findResources();
+        PDResources pageRes = page.getResources();
         PDResources formRes = new PDResources();
         cloner.cloneMerge(pageRes, formRes);
         form.setResources(formRes);
@@ -163,8 +163,8 @@ public class LayerUtility
 
         Matrix matrix = form.getMatrix();
         AffineTransform at = matrix != null ? matrix.createAffineTransform() : new AffineTransform();
-        PDRectangle mediaBox = page.findMediaBox();
-        PDRectangle cropBox = page.findCropBox();
+        PDRectangle mediaBox = page.getMediaBox();
+        PDRectangle cropBox = page.getCropBox();
         PDRectangle viewBox = (cropBox != null ? cropBox : mediaBox);
 
         //Handle the /Rotation entry on the page dict
@@ -240,7 +240,7 @@ public class LayerUtility
         PDOptionalContentGroup layer = new PDOptionalContentGroup(layerName);
         ocprops.addGroup(layer);
 
-        PDResources resources = targetPage.findResources();
+        PDResources resources = targetPage.getResources();
         /*PDPropertyList props = resources.getProperties();
         if (props == null)
         {
@@ -292,7 +292,7 @@ public class LayerUtility
     private static int getNormalizedRotation(PDPage page)
     {
         //Handle the /Rotation entry on the page dict
-        int rotation = page.findRotation();
+        int rotation = page.getRotation();
         while (rotation >= 360)
         {
             rotation -= 360;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java Sat Oct 25 20:40:16 2014
@@ -137,8 +137,7 @@ public class Overlay
                 specificPageOverlay.put(e.getKey(), doc);
                 specificPageOverlayPage.put(e.getKey(), getLayoutPage(doc));
             }
-            PDDocumentCatalog pdfCatalog = sourcePDFDocument.getDocumentCatalog();
-            processPages(pdfCatalog.getAllPages());
+            processPages(sourcePDFDocument);
 
             sourcePDFDocument.save(outputFilename);
         }
@@ -214,10 +213,9 @@ public class Overlay
 
     private LayoutPage getLayoutPage(PDDocument doc) throws IOException
     {
-        PDDocumentCatalog catalog = doc.getDocumentCatalog();
-        PDPage page = (PDPage) catalog.getAllPages().get(0);
+        PDPage page = doc.getPage(0);
         COSBase contents = page.getCOSObject().getDictionaryObject(COSName.CONTENTS);
-        PDResources resources = page.findResources();
+        PDResources resources = page.getResources();
         if (resources == null)
         {
             resources = new PDResources();
@@ -233,9 +231,9 @@ public class Overlay
         HashMap<Integer,LayoutPage> layoutPages = new HashMap<Integer, Overlay.LayoutPage>(numberOfPages);
         for (int i=0;i<numberOfPages;i++)
         {
-            PDPage page = (PDPage) catalog.getAllPages().get(i);
+            PDPage page = doc.getPage(i);
             COSBase contents = page.getCOSObject().getDictionaryObject(COSName.CONTENTS);
-            PDResources resources = page.findResources();
+            PDResources resources = page.getResources();
             if (resources == null)
             {
                 resources = new PDResources();
@@ -292,10 +290,10 @@ public class Overlay
         return contentStreams;
     }
 
-    private void processPages(List<PDPage> pages) throws IOException
+    private void processPages(PDDocument document) throws IOException
     {
         int pageCount = 0;
-        for (PDPage page : pages)
+        for (PDPage page : document.getPages())
         {
             COSDictionary pageDictionary = page.getCOSObject();
             COSBase contents = pageDictionary.getDictionaryObject(COSName.CONTENTS);
@@ -321,11 +319,11 @@ public class Overlay
                 // restore state
                 contentArray.add(createStream("Q\n"));
                 // overlay content
-                overlayPage(contentArray, page, pageCount + 1, pages.size());
+                overlayPage(contentArray, page, pageCount + 1, document.getNumberOfPages());
                 break;
             case BACKGROUND:
                 // overlay content
-                overlayPage(contentArray, page, pageCount + 1, pages.size());
+                overlayPage(contentArray, page, pageCount + 1, document.getNumberOfPages());
                 // original content
                 if (contents instanceof COSStream)
                 {
@@ -383,7 +381,7 @@ public class Overlay
         }
         if (layoutPage != null)
         {
-            PDResources resources = page.findResources();
+            PDResources resources = page.getResources();
             if (resources == null)
             {
                 resources = new PDResources();
@@ -402,7 +400,7 @@ public class Overlay
         xobjForm.setFormType(1);
         xobjForm.setBBox( layoutPage.overlayMediaBox.createRetranslatedRectangle());
         xobjForm.setMatrix(new AffineTransform());
-        PDResources resources = page.findResources();
+        PDResources resources = page.getResources();
         return resources.add(xobjForm, "OL");
     }
 

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java Sat Oct 25 20:40:16 2014
@@ -456,18 +456,15 @@ public class PDFMergerUtility
             }
         }
 
-        List<PDPage> pages = srcCatalog.getAllPages();
-        Iterator<PDPage> pageIter = pages.iterator();
         HashMap<COSDictionary, COSDictionary> objMapping = new HashMap<COSDictionary, COSDictionary>();
-        while (pageIter.hasNext())
+        for (PDPage page : srcCatalog.getPages())
         {
-            PDPage page = pageIter.next();
             PDPage newPage = new PDPage((COSDictionary) cloner.cloneForNewDocument(page.getCOSObject()));
-            newPage.setCropBox(page.findCropBox());
-            newPage.setMediaBox(page.findMediaBox());
-            newPage.setRotation(page.findRotation());
+            newPage.setCropBox(page.getCropBox());
+            newPage.setMediaBox(page.getMediaBox());
+            newPage.setRotation(page.getRotation());
             // this is smart enough to just create references for resources that are used on multiple pages
-            newPage.setResources(new PDResources((COSDictionary) cloner.cloneForNewDocument(page.findResources())));
+            newPage.setResources(new PDResources((COSDictionary) cloner.cloneForNewDocument(page.getResources())));
             if (mergeStructTree)
             {
                 updateStructParentEntries(newPage, destParentTreeNextKey);

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java Sat Oct 25 20:40:16 2014
@@ -35,10 +35,9 @@ import java.util.Vector;
 import java.util.regex.Pattern;
 
 import org.apache.pdfbox.contentstream.PDFTextStreamEngine;
-import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.common.COSObjectable;
+import org.apache.pdfbox.pdmodel.PDPageTree;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.common.PDStream;
 import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
@@ -270,7 +269,7 @@ public class PDFTextStripper extends PDF
                 throw new IOException("Invalid password for encrypted document", e);
             }
         }
-        processPages(document.getDocumentCatalog().getAllPages());
+        processPages(document.getPages());
         endDocument(document);
     }
 
@@ -281,19 +280,15 @@ public class PDFTextStripper extends PDF
      *
      * @throws IOException If there is an error parsing the text.
      */
-    protected void processPages(List<PDPage> pages) throws IOException
+    protected void processPages(PDPageTree pages) throws IOException
     {
-        if (startBookmark != null)
-        {
-            startBookmarkPageNumber = getPageNumber(startBookmark, pages);
-        }
-        if (endBookmark != null)
-        {
-            endBookmarkPageNumber = getPageNumber(endBookmark, pages);
-        }
+        PDPage startPage = startBookmark == null ? null :
+                startBookmark.findDestinationPage(document);
+
+        PDPage endPage = endBookmark == null ? null :
+                endBookmark.findDestinationPage(document);
 
-        if (startBookmarkPageNumber == -1 && startBookmark != null &&
-            endBookmarkPageNumber == -1 && endBookmark != null &&
+        if (startPage != null && endPage != null &&
             startBookmark.getCOSObject() == endBookmark.getCOSObject())
         {
             // this is a special case where both the start and end bookmark
@@ -302,30 +297,18 @@ public class PDFTextStripper extends PDF
             startBookmarkPageNumber = 0;
             endBookmarkPageNumber = 0;
         }
-        for (COSObjectable page : pages)
+
+        for (PDPage page : pages)
         {
-            PDPage nextPage = (PDPage) page;
-            PDStream contentStream = nextPage.getContents();
+            PDStream contentStream = page.getStream();
             currentPageNo++;
             if (contentStream != null)
             {
-                COSStream contents = contentStream.getStream();
-                processPage(nextPage, contents);
+                processPage(page);
             }
         }
     }
 
-    private int getPageNumber(PDOutlineItem bookmark, List<PDPage> allPages) throws IOException
-    {
-        int pageNumber = -1;
-        PDPage page = bookmark.findDestinationPage(document);
-        if (page != null)
-        {
-            pageNumber = allPages.indexOf(page) + 1; // use one based indexing
-        }
-        return pageNumber;
-    }
-
     /**
      * This method is available for subclasses of this class. It will be called before processing
      * of the document start.
@@ -354,11 +337,11 @@ public class PDFTextStripper extends PDF
      * This will process the contents of a page.
      *
      * @param page The page to process.
-     * @param content The contents of the page.
      *
      * @throws IOException If there is an error processing the page.
      */
-    protected void processPage(PDPage page, COSStream content) throws IOException
+    @Override
+    public void processPage(PDPage page) throws IOException
     {
         if (currentPageNo >= startPage && currentPageNo <= endPage &&
                 (startBookmarkPageNumber == -1 || currentPageNo >= startBookmarkPageNumber) &&
@@ -385,7 +368,7 @@ public class PDFTextStripper extends PDF
                 }
             }
             characterListMapping.clear();
-            processStream(page.findResources(), content, page.findCropBox(), page.findRotation());
+            super.processPage(page);
             writePage();
             endPage(page);
         }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripperByArea.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripperByArea.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripperByArea.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripperByArea.java Sat Oct 25 20:40:16 2014
@@ -26,7 +26,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Vector;
 
-import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.common.PDStream;
 import org.apache.pdfbox.text.TextPosition;
@@ -110,11 +109,10 @@ public class PDFTextStripperByArea exten
             regionText.put( regionName, new StringWriter() );
         }
 
-        PDStream contentStream = page.getContents();
+        PDStream contentStream = page.getStream();
         if( contentStream != null )
         {
-            COSStream contents = contentStream.getStream();
-            processPage( page, contents );
+            processPage( page );
         }
     }
 

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PageExtractor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PageExtractor.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PageExtractor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PageExtractor.java Sat Oct 25 20:40:16 2014
@@ -18,7 +18,6 @@
 package org.apache.pdfbox.util;
 
 import java.io.IOException;
-import java.util.List;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 
@@ -70,17 +69,13 @@ public class PageExtractor {
         extractedDocument.getDocumentCatalog().setViewerPreferences(
                 sourceDocument.getDocumentCatalog().getViewerPreferences());
         
-        List<PDPage> pages = (List<PDPage>)sourceDocument.getDocumentCatalog().getAllPages();
-        int pageCounter = 1;
-        for(PDPage page : pages) {
-            if(pageCounter >= startPage && pageCounter <= endPage) {
-                PDPage imported = extractedDocument.importPage(page);
-                imported.setCropBox(page.findCropBox());
-                imported.setMediaBox(page.findMediaBox());
-                imported.setResources(page.findResources());
-                imported.setRotation(page.findRotation());
-            }
-            pageCounter++;
+        for (int i = startPage; i <= endPage; i++) {
+            PDPage page = sourceDocument.getPage(i - 1);
+            PDPage imported = extractedDocument.importPage(page);
+            imported.setCropBox(page.getCropBox());
+            imported.setMediaBox(page.getMediaBox());
+            imported.setResources(page.getResources());
+            imported.setRotation(page.getRotation());
         }
             
         return extractedDocument;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Splitter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Splitter.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Splitter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Splitter.java Sat Oct 25 20:40:16 2014
@@ -194,11 +194,11 @@ public class Splitter
     {
         createNewDocumentIfNecessary();
         PDPage imported = getDestinationDocument().importPage(page);
-        imported.setCropBox(page.findCropBox());
-        imported.setMediaBox(page.findMediaBox());
+        imported.setCropBox(page.getCropBox());
+        imported.setMediaBox(page.getMediaBox());
         // only the resources of the page will be copied
         imported.setResources(page.getResources());
-        imported.setRotation(page.findRotation());
+        imported.setRotation(page.getRotation());
     }
 
     /**

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocumentCatalog.java Sat Oct 25 20:40:16 2014
@@ -86,22 +86,4 @@ public class TestPDDocumentCatalog exten
                 doc.close();
         }
     }
-
-    /**
-     * Test case for
-     * <a href="https://issues.apache.org/jira/browse/PDFBOX-1088"
-     *   >PDFBOX-1088</a> - Class PDDocument Method getPageMap returns a ClassCastException
-     */
-    public void testPageMap() throws Exception {
-        PDDocument doc = null;
-        try {
-            doc = PDDocument.load(TestPDDocumentCatalog.class.getResource("test.unc.pdf"));
-            assertEquals(4, doc.getPageMap().size());
-            int pageNum = doc.getPageMap().get("14,0");
-            assertEquals(1, pageNum);
-        } finally {
-            if(doc != null)
-                doc.close();
-        }
-    }
 }

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/edit/TestPDPageContentStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/edit/TestPDPageContentStream.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/edit/TestPDPageContentStream.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/edit/TestPDPageContentStream.java Sat Oct 25 20:40:16 2014
@@ -44,7 +44,7 @@ public class TestPDPageContentStream ext
         contentStream.close();
 
         // now read the PDF stream and verify that the CMYK values are correct
-        COSStream stream = page.getContents().getStream();
+        COSStream stream = page.getStream().getStream();
         PDFStreamParser parser = new PDFStreamParser(stream);
         parser.parse();
         java.util.List<Object>  pageTokens = parser.getTokens();
@@ -70,7 +70,7 @@ public class TestPDPageContentStream ext
         contentStream.close();
 
         // now read the PDF stream and verify that the CMYK values are correct
-        stream = page.getContents().getStream();
+        stream = page.getStream().getStream();
         parser = new PDFStreamParser(stream);
         parser.parse();
         pageTokens = parser.getTokens();

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactoryTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactoryTest.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactoryTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactoryTest.java Sat Oct 25 20:40:16 2014
@@ -18,7 +18,6 @@ package org.apache.pdfbox.pdmodel.graphi
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.List;
 import javax.imageio.ImageIO;
 import javax.imageio.ImageReader;
 import javax.imageio.stream.ImageInputStream;
@@ -86,8 +85,7 @@ public class CCITTFactoryTest extends Te
         document.close();
         
         document = PDDocument.loadNonSeq(new File(testResultsDir, "singletiff.pdf"), null);
-        List pages = document.getDocumentCatalog().getAllPages();
-        assertEquals(2, pages.size());
+        assertEquals(2, document.getNumberOfPages());
         
         document.close();  
     }
@@ -137,8 +135,7 @@ public class CCITTFactoryTest extends Te
         document.close();
         
         document = PDDocument.loadNonSeq(new File(testResultsDir, "multitiff.pdf"), null);
-        List pages = document.getDocumentCatalog().getAllPages();
-        assertEquals(countTiffImages, pages.size());
+        assertEquals(countTiffImages, document.getNumberOfPages());
         
         document.close();  
         imageReader.dispose();

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/TestOptionalContentGroups.java Sat Oct 25 20:40:16 2014
@@ -65,7 +65,7 @@ public class TestOptionalContentGroups e
             //Create new page
             PDPage page = new PDPage();
             doc.addPage(page);
-            PDResources resources = page.findResources();
+            PDResources resources = page.getResources();
             if( resources == null )
             {
                 resources = new PDResources();
@@ -173,7 +173,7 @@ public class TestOptionalContentGroups e
             PDDocumentCatalog catalog = doc.getDocumentCatalog();
             assertEquals("1.5", catalog.getVersion());
 
-            PDPage page = (PDPage)catalog.getAllPages().get(0);
+            PDPage page = doc.getPage(0);
             PDOptionalContentGroup ocg = (PDOptionalContentGroup)page.getResources()
                     .getProperties(COSName.getPDFName("MC0"));
             assertNotNull(ocg);

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/PageExtractorTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/PageExtractorTest.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/PageExtractorTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/PageExtractorTest.java Sat Oct 25 20:40:16 2014
@@ -87,17 +87,10 @@ public class PageExtractorTest extends T
             assertEquals(6, result.getNumberOfPages());
             closeDoc(result);
             
-            instance = new PageExtractor(sourcePdf, -100, 50000);
-            result = instance.extract();
-            assertEquals(sourcePdf.getNumberOfPages(), result.getNumberOfPages());
-            closeDoc(result);
-            
             instance = new PageExtractor(sourcePdf, 2, 1);
             result = instance.extract();
             assertEquals(0, result.getNumberOfPages());
             closeDoc(result);
-        } catch(Exception e) {
-            fail("Exception was thrown: " + e.getMessage());
         } finally {
             closeDoc(sourcePdf);
             closeDoc(result);

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestLayerUtility.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestLayerUtility.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestLayerUtility.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestLayerUtility.java Sat Oct 25 20:40:16 2014
@@ -70,8 +70,7 @@ public class TestLayerUtility extends Te
         {
             LayerUtility layerUtil = new LayerUtility(targetDoc);
             PDFormXObject form = layerUtil.importPageAsForm(overlay1Doc, 0);
-            PDDocumentCatalog catalog = targetDoc.getDocumentCatalog();
-            PDPage targetPage = (PDPage)catalog.getAllPages().get(0);
+            PDPage targetPage = targetDoc.getPage(0);
             layerUtil.wrapInSaveRestore(targetPage);
             AffineTransform at = new AffineTransform();
             PDOptionalContentGroup ocg = layerUtil.appendFormAsLayer(
@@ -98,8 +97,8 @@ public class TestLayerUtility extends Te
             //assertEquals("%PDF-1.5", doc.getDocument().getHeaderString());
             //assertEquals("1.5", catalog.getVersion());
 
-            PDPage page = (PDPage)catalog.getAllPages().get(0);
-            PDOptionalContentGroup ocg = (PDOptionalContentGroup)page.findResources()
+            PDPage page = doc.getPage(0);
+            PDOptionalContentGroup ocg = (PDOptionalContentGroup)page.getResources()
                     .getProperties(COSName.getPDFName("MC0"));
             assertNotNull(ocg);
             assertEquals("overlay", ocg.getName());
@@ -123,7 +122,7 @@ public class TestLayerUtility extends Te
             //Create new page
             PDPage page = new PDPage();
             doc.addPage(page);
-            PDResources resources = page.findResources();
+            PDResources resources = page.getResources();
             if( resources == null )
             {
                 resources = new PDResources();
@@ -178,7 +177,7 @@ public class TestLayerUtility extends Te
             //Create new page
             PDPage page = new PDPage();
             doc.addPage(page);
-            PDResources resources = page.findResources();
+            PDResources resources = page.getResources();
             if( resources == null )
             {
                 resources = new PDResources();
@@ -195,7 +194,7 @@ public class TestLayerUtility extends Te
             String text = "OVERLAY";
             //float sw = font.getStringWidth(text);
             //Too bad, base 14 fonts don't return character metrics.
-            PDRectangle crop = page.findCropBox();
+            PDRectangle crop = page.getCropBox();
             float cx = crop.getWidth() / 2f;
             float cy = crop.getHeight() / 2f;
             AffineTransform transform = new AffineTransform();

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java Sat Oct 25 20:40:16 2014
@@ -33,17 +33,14 @@ import java.util.List;
 
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
-import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSFloat;
 import org.apache.pdfbox.cos.COSInteger;
-import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.cos.COSString;
 import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.PDStream;
 import org.apache.pdfbox.pdmodel.font.PDFont;
 import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
+import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern;
 import org.apache.pdfbox.pdmodel.graphics.state.PDTextState;
 import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode;
 import org.apache.pdfbox.preflight.PreflightContext;
@@ -70,11 +67,10 @@ public class PreflightContentStream exte
     {
         try
         {
-            PDStream pstream = this.processeedPage.getContents();
+            PDStream pstream = this.processeedPage.getStream();
             if (pstream != null)
             {
-                processStream(processeedPage.findResources(), pstream.getStream(), 
-                		processeedPage.findCropBox());
+                processPage(this.processeedPage);
             }
         }
         catch (ContentStreamException e)
@@ -90,16 +86,23 @@ public class PreflightContentStream exte
     /**
      * Process the validation of a XObject Form
      * 
-     * @param xobj
+     * @param form
      * @return A list of validation error. This list is empty if the validation succeed.
      * @throws ValidationException
      */
-    public void validXObjContentStream(PDFormXObject xobj) throws ValidationException
+    public void validXObjContentStream(PDFormXObject form) throws ValidationException
     {
         try
         {
-            initStream(xobj.getBBox());
-            processSubStream(xobj.getResources(), xobj.getCOSStream());
+            // workaround for preflight not finding widget annotation parent PDPage
+            if (processeedPage == null)
+            {
+                processChildStream(form, new PDPage()); // dummy page, resource lookup may fail
+            }
+            else
+            {
+                processChildStream(form, processeedPage);
+            }
         }
         catch (ContentStreamException e)
         {
@@ -118,13 +121,11 @@ public class PreflightContentStream exte
      * @return A list of validation error. This list is empty if the validation succeed.
      * @throws ValidationException
      */
-    public void validPatternContentStream(COSStream pattern) throws ValidationException
+    public void validPatternContentStream(PDTilingPattern pattern) throws ValidationException
     {
         try
         {
-            COSDictionary res = (COSDictionary) pattern.getDictionaryObject(COSName.RESOURCES);
-            initStream(processeedPage.findCropBox());
-            processSubStream(new PDResources(res), pattern);
+            processChildStream(pattern, processeedPage);
         }
         catch (ContentStreamException e)
         {

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type3FontValidator.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type3FontValidator.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type3FontValidator.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type3FontValidator.java Sat Oct 25 20:40:16 2014
@@ -36,13 +36,12 @@ import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSDocument;
 import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.pdmodel.font.PDType3CharProc;
 import org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding;
 import org.apache.pdfbox.pdmodel.font.encoding.Encoding;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.COSArrayList;
-import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.font.PDFont;
 import org.apache.pdfbox.pdmodel.font.PDFontFactory;
 import org.apache.pdfbox.pdmodel.font.PDType3Font;
@@ -61,7 +60,7 @@ import org.apache.pdfbox.preflight.utils
 
 public class Type3FontValidator extends FontValidator<Type3Container>
 {
-    protected PDFont font;
+    protected PDType3Font font;
     protected COSDictionary fontDictionary;
     protected COSDocument cosDocument;
     protected Encoding encoding;
@@ -290,30 +289,27 @@ public class Type3FontValidator extends 
         }
 
         // Check width consistency
-        PDResources pResources = getPDResources();
         for (int i = 0; i < expectedLength; i++)
         {
-            int cid = fc + i;
+            int code = fc + i;
             float width = widths.get(i);
 
-            COSStream charStream = getCharacterStreamDescription(cid, charProcs);
-
-            if (charStream != null)
+            PDType3CharProc charProc = getCharProc(code);
+            if (charProc != null)
             {
                 try
                 {
-
-                    float fontProgamWidth = getWidthFromCharacterStream(pResources, charStream);
-                    if (width == fontProgamWidth)
+                    float fontProgramWidth = getWidthFromCharProc(charProc);
+                    if (width == fontProgramWidth)
                     {
                         // Glyph is OK, we keep the CID.
-                        this.fontContainer.markAsValid(cid);
+                        this.fontContainer.markAsValid(code);
                     }
                     else
                     {
-                        GlyphException glyphEx = new GlyphException(ERROR_FONTS_METRICS, cid,
-                                "The character with CID\"" + cid + "\" should have a width equals to " + width);
-                        this.fontContainer.markAsInvalid(cid, glyphEx);
+                        GlyphException glyphEx = new GlyphException(ERROR_FONTS_METRICS, code,
+                                "The character with CID\"" + code + "\" should have a width equals to " + width);
+                        this.fontContainer.markAsInvalid(code, glyphEx);
                     }
                 }
                 catch (ContentStreamException e)
@@ -349,39 +345,18 @@ public class Type3FontValidator extends 
         return widths;
     }
 
-    private PDResources getPDResources()
+    private PDType3CharProc getCharProc(int code) throws ValidationException
     {
-        COSBase res = this.fontDictionary.getItem(COSName.RESOURCES);
-        PDResources pResources = null;
-        COSDictionary resAsDict = COSUtils.getAsDictionary(res, cosDocument);
-        if (resAsDict != null)
+        PDType3CharProc charProc = font.getCharProc(code);
+        if (charProc == null)
         {
-            pResources = new PDResources(resAsDict);
+            // There are no character description, we declare the Glyph as Invalid. If the character
+            // is used in a Stream, the GlyphDetail will throw an exception.
+            GlyphException glyphEx = new GlyphException(ERROR_FONTS_METRICS, code,
+                    "The CharProcs \"" + font.getEncoding().getName(code)  + "\" doesn't exist");
+            this.fontContainer.markAsInvalid(code, glyphEx);
         }
-        return pResources;
-    }
-
-    private COSStream getCharacterStreamDescription(int cid, COSDictionary charProcs) throws ValidationException
-    {
-        String charName = getCharNameFromEncoding(cid);
-        COSBase item = charProcs.getItem(COSName.getPDFName(charName));
-        COSStream charStream = COSUtils.getAsStream(item, cosDocument);
-        if (charStream == null)
-        {
-            /*
-             * There are no character description, we declare the Glyph as Invalid. If the character is used in a
-             * Stream, the GlyphDetail will throw an exception.
-             */
-            GlyphException glyphEx = new GlyphException(ERROR_FONTS_METRICS, cid, "The CharProcs \"" + charName
-                    + "\" doesn't exist");
-            this.fontContainer.markAsInvalid(cid, glyphEx);
-        }
-        return charStream;
-    }
-
-    private String getCharNameFromEncoding(int cid) throws ValidationException
-    {
-        return this.encoding.getName(cid);
+        return charProc;
     }
 
     /**
@@ -389,19 +364,17 @@ public class Type3FontValidator extends 
      * 
      * @return the width of the character
      */
-    private float getWidthFromCharacterStream(PDResources resources, COSStream charStream) throws IOException
+    private float getWidthFromCharProc(PDType3CharProc charProc) throws IOException
     {
         PreflightPath vPath = context.getValidationPath();
-        PreflightType3Stream parser = new PreflightType3Stream(context, vPath.getClosestPathElement(PDPage.class));
-        parser.processStream(resources, charStream, new PDRectangle(0, 0, 1000, 1000)); // dummy bbox
+        PreflightType3Stream parser = new PreflightType3Stream(context, vPath.getClosestPathElement(PDPage.class), charProc);
+        parser.showType3Character(charProc);
         return parser.getWidth();
     }
 
     /**
      * If the Resources entry is present, this method check its content. Only fonts and Images are checked because this
      * resource describes glyphs.
-     * 
-     * @return
      */
     private void checkResources() throws ValidationException
     {

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type3Container.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type3Container.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type3Container.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type3Container.java Sat Oct 25 20:40:16 2014
@@ -38,6 +38,6 @@ public class Type3Container extends Font
     @Override
     public boolean hasGlyph(int code) throws IOException
     {
-        return font.getCharStream(code) != null;
+        return font.getCharProc(code) != null;
     }
 }

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PreflightType3Stream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PreflightType3Stream.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PreflightType3Stream.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PreflightType3Stream.java Sat Oct 25 20:40:16 2014
@@ -29,9 +29,8 @@ import org.apache.fontbox.util.BoundingB
 import org.apache.pdfbox.cos.COSFloat;
 import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSNumber;
-import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.font.PDType3CharProc;
 import org.apache.pdfbox.pdmodel.graphics.image.PDInlineImage;
 import org.apache.pdfbox.preflight.PreflightContext;
 import org.apache.pdfbox.preflight.content.PreflightStreamEngine;
@@ -43,31 +42,37 @@ import org.apache.pdfbox.contentstream.o
  */
 public class PreflightType3Stream extends PreflightStreamEngine
 {
+    private final PDType3CharProc charProc;
+
     private boolean firstOperator = true;
     private float width = 0;
 
     private PDInlineImage image = null;
     private BoundingBox box = null;
 
-    public PreflightType3Stream(PreflightContext context, PDPage page)
+    public PreflightType3Stream(PreflightContext context, PDPage page, PDType3CharProc charProc)
     {
         super(context, page);
+        this.charProc = charProc;
+    }
+
+    @Override
+    public void showType3Character(PDType3CharProc charProc) throws IOException
+    {
+        processChildStream(charProc, new PDPage()); // dummy page (resource lookup may fail)
     }
 
     /**
      * This will parse a type3 stream and create an image from it.
      * 
-     * @param type3Stream
-     *            The stream containing the operators to draw the image.
-     * 
      * @return The image that was created.
      * 
      * @throws IOException
      *             If there is an error processing the stream.
      */
-    public Image createImage(COSStream type3Stream) throws IOException
+    public Image createImage() throws IOException
     {
-        processStream(null, type3Stream, new PDRectangle(0, 0, 1000, 1000)); // dummy bbox
+        showType3Character(charProc);
         return image.getImage();
     }
 

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/TilingPatternValidationProcess.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/TilingPatternValidationProcess.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/TilingPatternValidationProcess.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/TilingPatternValidationProcess.java Sat Oct 25 20:40:16 2014
@@ -65,23 +65,23 @@ public class TilingPatternValidationProc
 
     protected void parseResources(PreflightContext context, PDPage page, PDTilingPattern pattern)
             throws ValidationException
-            {
+    {
         PDResources resources = pattern.getResources();
         if (resources != null)
         {
             ContextHelper.validateElement(context, resources, RESOURCES_PROCESS);
         }
-            }
+    }
 
     /**
      * Validate the Pattern content like Color and Show Text Operators using an instance of ContentStreamWrapper.
      */
     protected void parsePatternContent(PreflightContext context, PDPage page, PDTilingPattern pattern)
             throws ValidationException
-            {
+    {
         PreflightContentStream csWrapper = new PreflightContentStream(context, page);
-        csWrapper.validPatternContentStream((COSStream) pattern.getCOSObject());
-            }
+        csWrapper.validPatternContentStream(pattern);
+    }
 
     /**
      * This method checks if required fields are present.

Modified: pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartor.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartor.java (original)
+++ pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartor.java Sat Oct 25 20:40:16 2014
@@ -206,11 +206,6 @@ public class TestIsartor
                         result.getErrorsList().get(0).getErrorCode());
             }
         }
-        catch (Exception e)
-        {
-            fail(String.format("%s : %s raised , message=%s", file.getName(),
-                    e.getClass().getSimpleName(), e.getMessage()));
-        }
         finally
         {
             if (document != null)

Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java Sat Oct 25 20:40:16 2014
@@ -32,7 +32,6 @@ import org.apache.pdfbox.io.IOUtils;
 import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
 import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial;
 import org.apache.pdfbox.pdmodel.graphics.image.PDImage;
@@ -213,16 +212,7 @@ public class ExtractImages
 
         public void run() throws IOException
         {
-            PDPage page = getPage();
-            if (page.getContents() != null)
-            {
-                PDResources resources = page.findResources();
-                processStream(resources, page.getContents().getStream(), page.findCropBox());
-            }
-            else
-            {
-                initStream(page.findCropBox());
-            }
+            processPage(getPage());
         }
 
         @Override

Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java?rev=1634252&r1=1634251&r2=1634252&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java Sat Oct 25 20:40:16 2014
@@ -32,6 +32,7 @@ import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.KeyStroke;
 
+import org.apache.pdfbox.pdmodel.PDPageTree;
 import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
 import org.apache.pdfbox.printing.PDFPrinter;
 import org.apache.pdfbox.rendering.PDFRenderer;
@@ -63,7 +64,7 @@ public class PDFReader extends JFrame
 
     private PDFRenderer renderer;
     private PDDocument document = null;
-    private List<PDPage> pages = null;
+    private PDPageTree pages = null;
 
     private int currentPage = 0;
     private int numberOfPages = 0;
@@ -347,8 +348,8 @@ public class PDFReader extends JFrame
 
         File file = new File(filename);
         parseDocument(file, password);
-        pages = document.getDocumentCatalog().getAllPages();
-        numberOfPages = pages.size();
+        pages = document.getPages();
+        numberOfPages = document.getNumberOfPages();
         currentFilename = file.getAbsolutePath();
         currentPage = 0;
         updateTitle();