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();