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.