You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2020/08/02 12:08:13 UTC

svn commit: r1880519 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: contentstream/PDContentStream.java pdmodel/PDPage.java pdmodel/font/PDType3CharProc.java pdmodel/graphics/form/PDFormXObject.java pdmodel/graphics/pattern/PDTilingPattern.java

Author: lehmi
Date: Sun Aug  2 12:08:13 2020
New Revision: 1880519

URL: http://svn.apache.org/viewvc?rev=1880519&view=rev
Log:
PDFBOX-4836: introduce new method to create a RandomAccessRead for the contents of a PDContentStream

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPattern.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java?rev=1880519&r1=1880518&r2=1880519&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java Sun Aug  2 12:08:13 2020
@@ -19,6 +19,7 @@ package org.apache.pdfbox.contentstream;
 
 import java.io.IOException;
 import java.io.InputStream;
+import org.apache.pdfbox.io.RandomAccessRead;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.util.Matrix;
@@ -39,6 +40,14 @@ public interface PDContentStream
     InputStream getContents() throws IOException;
 
     /**
+     * Returns this stream's content, if any.
+     * 
+     * @return A RandomAccessRead or null.
+     * @throws IOException If the content could not be read
+     */
+    RandomAccessRead getContentsForRandomAccess() throws IOException;
+
+    /**
      * Returns this stream's resources, if any.
      */
     PDResources getResources();

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java?rev=1880519&r1=1880518&r2=1880519&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java Sun Aug  2 12:08:13 2020
@@ -35,6 +35,9 @@ 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.io.RandomAccessRead;
+import org.apache.pdfbox.io.RandomAccessReadBuffer;
+import org.apache.pdfbox.io.SequenceRandomAccessRead;
 import org.apache.pdfbox.pdmodel.common.COSArrayList;
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.common.PDMetadata;
@@ -177,6 +180,31 @@ public class PDPage implements COSObject
         return new ByteArrayInputStream(new byte[0]);
     }
 
+    @Override
+    public RandomAccessRead getContentsForRandomAccess() throws IOException
+    {
+        COSBase base = page.getDictionaryObject(COSName.CONTENTS);
+        if (base instanceof COSStream)
+        {
+            return ((COSStream) base).createView();
+        }
+        else if (base instanceof COSArray && ((COSArray) base).size() > 0)
+        {
+            COSArray streams = (COSArray) base;
+            List<RandomAccessRead> inputStreams = new ArrayList<>();
+            for (int i = 0; i < streams.size(); i++)
+            {
+                COSBase strm = streams.getObject(i);
+                if (strm instanceof COSStream)
+                {
+                    inputStreams.add(((COSStream) strm).createView());
+                }
+            }
+            return new SequenceRandomAccessRead(inputStreams);
+        }
+        return new RandomAccessReadBuffer(new byte[0]);
+    }
+
     /**
      * Returns true if this page has one or more content streams.
      */

Modified: 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=1880519&r1=1880518&r2=1880519&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java Sun Aug  2 12:08:13 2020
@@ -27,6 +27,7 @@ import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSNumber;
 import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.io.RandomAccessRead;
 import org.apache.pdfbox.pdfparser.PDFStreamParser;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
@@ -73,6 +74,12 @@ public final class PDType3CharProc imple
     }
 
     @Override
+    public RandomAccessRead getContentsForRandomAccess() throws IOException
+    {
+        return charStream.createView();
+    }
+
+    @Override
     public PDResources getResources()
     {
         return font.getResources();

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=1880519&r1=1880518&r2=1880519&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 Sun Aug  2 12:08:13 2020
@@ -26,6 +26,7 @@ import org.apache.pdfbox.cos.COSDictiona
 import org.apache.pdfbox.cos.COSFloat;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.io.RandomAccessRead;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.ResourceCache;
@@ -146,6 +147,11 @@ public class PDFormXObject extends PDXOb
         return getCOSObject().createInputStream();
     }
 
+    @Override
+    public RandomAccessRead getContentsForRandomAccess() throws IOException
+    {
+        return getCOSObject().createView();
+    }
     /**
      * This will get the resources for this Form XObject.
      * This will return null if no resources are available.

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=1880519&r1=1880518&r2=1880519&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 Sun Aug  2 12:08:13 2020
@@ -24,6 +24,7 @@ import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.io.RandomAccessRead;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.ResourceCache;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
@@ -180,6 +181,17 @@ public class PDTilingPattern extends PDA
         }
         return null;
     }
+
+    @Override
+    public RandomAccessRead getContentsForRandomAccess() throws IOException
+    {
+        COSDictionary dict = getCOSObject();
+        if (dict instanceof COSStream)
+        {
+            return ((COSStream) getCOSObject()).createView();
+        }
+        return null;
+    }
 
     /**
      * This will get the resources for this pattern.