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 2015/06/06 18:53:24 UTC
svn commit: r1683932 - in /pdfbox/trunk:
examples/src/test/java/org/apache/pdfbox/examples/pdfa/
pdfbox/src/main/java/org/apache/pdfbox/contentstream/
pdfbox/src/main/java/org/apache/pdfbox/cos/
pdfbox/src/main/java/org/apache/pdfbox/pdfparser/ pdfbox/...
Author: lehmi
Date: Sat Jun 6 16:53:24 2015
New Revision: 1683932
URL: http://svn.apache.org/r1683932
Log:
PDFBOX-2301: don't hold a reference of the parser within PDDocument but a reference of the pdfSource, BaseParser no longer implements Closeable
Modified:
pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/FDFParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/TestPDFParser.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/parser/PreflightParser.java
Modified: pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java (original)
+++ pdfbox/trunk/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java Sat Jun 6 16:53:24 2015
@@ -62,7 +62,6 @@ public class CreatePDFATest extends Test
}
assertTrue("PDF file created with CreatePDFA is not valid PDF/A-1b", result.isValid());
preflightDocument.close();
- preflightParser.close();
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java Sat Jun 6 16:53:24 2015
@@ -449,30 +449,23 @@ public abstract class PDFStreamEngine
{
List<COSBase> arguments = new ArrayList<COSBase>();
PDFStreamParser parser = new PDFStreamParser(contentStream.getContentStream());
- try
+ Iterator<Object> iter = parser.getTokenIterator();
+ while (iter.hasNext())
{
- Iterator<Object> iter = parser.getTokenIterator();
- while (iter.hasNext())
+ Object token = iter.next();
+ if (token instanceof COSObject)
{
- Object token = iter.next();
- if (token instanceof COSObject)
- {
- arguments.add(((COSObject) token).getObject());
- }
- else if (token instanceof Operator)
- {
- processOperator((Operator) token, arguments);
- arguments = new ArrayList<COSBase>();
- }
- else
- {
- arguments.add((COSBase) token);
- }
+ arguments.add(((COSObject) token).getObject());
+ }
+ else if (token instanceof Operator)
+ {
+ processOperator((Operator) token, arguments);
+ arguments = new ArrayList<COSBase>();
+ }
+ else
+ {
+ arguments.add((COSBase) token);
}
- }
- finally
- {
- parser.close();
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java Sat Jun 6 16:53:24 2015
@@ -492,26 +492,19 @@ public class COSDocument extends COSBase
{
COSStream stream = (COSStream)objStream.getObject();
PDFObjectStreamParser parser = new PDFObjectStreamParser(stream, this);
- try
+ parser.parse();
+ for (COSObject next : parser.getObjects())
{
- parser.parse();
- for (COSObject next : parser.getObjects())
+ COSObjectKey key = new COSObjectKey(next);
+ if (objectPool.get(key) == null || objectPool.get(key).getObject() == null
+ // xrefTable stores negated objNr of objStream for objects in objStreams
+ || (xrefTable.containsKey(key)
+ && xrefTable.get(key) == -objStream.getObjectNumber()))
{
- COSObjectKey key = new COSObjectKey(next);
- if (objectPool.get(key) == null || objectPool.get(key).getObject() == null
- // xrefTable stores negated objNr of objStream for objects in objStreams
- || (xrefTable.containsKey(key)
- && xrefTable.get(key) == -objStream.getObjectNumber()))
- {
- COSObject obj = getObjectFromPool(key);
- obj.setObject(next.getObject());
- }
+ COSObject obj = getObjectFromPool(key);
+ obj.setObject(next.getObject());
}
}
- finally
- {
- parser.close();
- }
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java Sat Jun 6 16:53:24 2015
@@ -47,7 +47,7 @@ import static org.apache.pdfbox.util.Cha
*
* @author Ben Litchfield
*/
-public abstract class BaseParser implements Closeable
+public abstract class BaseParser
{
private static final long OBJECT_NUMBER_THRESHOLD = 10000000000L;
@@ -1522,12 +1522,4 @@ public abstract class BaseParser impleme
return buffer;
}
- @Override
- public void close() throws IOException
- {
- if (pdfSource != null)
- {
- pdfSource.close();
- }
- }
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java Sat Jun 6 16:53:24 2015
@@ -800,7 +800,6 @@ public class COSParser extends BaseParse
// parse object stream
PDFObjectStreamParser parser = new PDFObjectStreamParser((COSStream) objstmBaseObj, document);
parser.parse();
- parser.close();
// get set of object numbers referenced for this object stream
final Set<Long> refObjNrs = xrefTrailerResolver.getContainedObjectNumbers(objstmObjNr);
@@ -1867,7 +1866,6 @@ public class COSParser extends BaseParse
}
PDFXrefStreamParser parser = new PDFXrefStreamParser( stream, document, xrefTrailerResolver );
parser.parse();
- parser.close();
}
/**
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/FDFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/FDFParser.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/FDFParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/FDFParser.java Sat Jun 6 16:53:24 2015
@@ -147,7 +147,6 @@ public class FDFParser extends COSParser
}
finally
{
- IOUtils.closeQuietly(pdfSource);
if (exceptionOccurred && document != null)
{
IOUtils.closeQuietly(document);
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java Sat Jun 6 16:53:24 2015
@@ -164,7 +164,7 @@ public class PDFParser extends COSParser
*/
public PDDocument getPDDocument() throws IOException
{
- return new PDDocument( getDocument(), this, accessPermission );
+ return new PDDocument( getDocument(), pdfSource, accessPermission );
}
/**
@@ -228,7 +228,6 @@ public class PDFParser extends COSParser
}
finally
{
- IOUtils.closeQuietly(pdfSource);
IOUtils.closeQuietly(keyStoreInputStream);
if (exceptionOccurred && document != null)
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java Sat Jun 6 16:53:24 2015
@@ -98,17 +98,10 @@ public class PDFStreamParser extends Bas
*/
public void parse() throws IOException
{
- try
+ Object token;
+ while( (token = parseNextToken()) != null )
{
- Object token;
- while( (token = parseNextToken()) != null )
- {
- streamObjects.add( token );
- }
- }
- finally
- {
- pdfSource.close();
+ streamObjects.add( token );
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java Sat Jun 6 16:53:24 2015
@@ -64,115 +64,108 @@ public class PDFXrefStreamParser extends
*/
public void parse() throws IOException
{
- try
+ COSArray xrefFormat = (COSArray)stream.getDictionaryObject(COSName.W);
+ COSArray indexArray = (COSArray)stream.getDictionaryObject(COSName.INDEX);
+ /*
+ * If Index doesn't exist, we will use the default values.
+ */
+ if(indexArray == null)
{
- COSArray xrefFormat = (COSArray)stream.getDictionaryObject(COSName.W);
- COSArray indexArray = (COSArray)stream.getDictionaryObject(COSName.INDEX);
- /*
- * If Index doesn't exist, we will use the default values.
- */
- if(indexArray == null)
+ indexArray = new COSArray();
+ indexArray.add(COSInteger.ZERO);
+ indexArray.add(stream.getDictionaryObject(COSName.SIZE));
+ }
+
+ ArrayList<Long> objNums = new ArrayList<Long>();
+
+ /*
+ * Populates objNums with all object numbers available
+ */
+ Iterator<COSBase> indexIter = indexArray.iterator();
+ while(indexIter.hasNext())
+ {
+ long objID = ((COSInteger)indexIter.next()).longValue();
+ int size = ((COSInteger)indexIter.next()).intValue();
+ for(int i = 0; i < size; i++)
{
- indexArray = new COSArray();
- indexArray.add(COSInteger.ZERO);
- indexArray.add(stream.getDictionaryObject(COSName.SIZE));
+ objNums.add(objID + i);
}
+ }
+ Iterator<Long> objIter = objNums.iterator();
+ /*
+ * Calculating the size of the line in bytes
+ */
+ int w0 = xrefFormat.getInt(0);
+ int w1 = xrefFormat.getInt(1);
+ int w2 = xrefFormat.getInt(2);
+ int lineSize = w0 + w1 + w2;
- ArrayList<Long> objNums = new ArrayList<Long>();
+ while(pdfSource.available() > 0 && objIter.hasNext())
+ {
+ byte[] currLine = new byte[lineSize];
+ pdfSource.read(currLine);
+ int type = 0;
/*
- * Populates objNums with all object numbers available
+ * Grabs the number of bytes specified for the first column in
+ * the W array and stores it.
*/
- Iterator<COSBase> indexIter = indexArray.iterator();
- while(indexIter.hasNext())
+ for(int i = 0; i < w0; i++)
{
- long objID = ((COSInteger)indexIter.next()).longValue();
- int size = ((COSInteger)indexIter.next()).intValue();
- for(int i = 0; i < size; i++)
- {
- objNums.add(objID + i);
- }
+ type += (currLine[i] & 0x00ff) << ((w0 - i - 1)* 8);
}
- Iterator<Long> objIter = objNums.iterator();
+ //Need to remember the current objID
+ Long objID = objIter.next();
/*
- * Calculating the size of the line in bytes
+ * 3 different types of entries.
*/
- int w0 = xrefFormat.getInt(0);
- int w1 = xrefFormat.getInt(1);
- int w2 = xrefFormat.getInt(2);
- int lineSize = w0 + w1 + w2;
-
- while(pdfSource.available() > 0 && objIter.hasNext())
+ switch(type)
{
- byte[] currLine = new byte[lineSize];
- pdfSource.read(currLine);
-
- int type = 0;
- /*
- * Grabs the number of bytes specified for the first column in
- * the W array and stores it.
- */
- for(int i = 0; i < w0; i++)
- {
- type += (currLine[i] & 0x00ff) << ((w0 - i - 1)* 8);
- }
- //Need to remember the current objID
- Long objID = objIter.next();
- /*
- * 3 different types of entries.
- */
- switch(type)
- {
- case 0:
- /*
- * Skipping free objects
- */
- break;
- case 1:
- int offset = 0;
- for(int i = 0; i < w1; i++)
- {
- offset += (currLine[i + w0] & 0x00ff) << ((w1 - i - 1) * 8);
- }
- int genNum = 0;
- for(int i = 0; i < w2; i++)
- {
- genNum += (currLine[i + w0 + w1] & 0x00ff) << ((w2 - i - 1) * 8);
- }
- COSObjectKey objKey = new COSObjectKey(objID, genNum);
- xrefTrailerResolver.setXRef(objKey, offset);
- break;
- case 2:
- /*
- * object stored in object stream; 2nd argument is object number of object stream;
- * 3rd argument index of object within object stream
- *
- * For sequential PDFParser we do not need this information
- * because
- * These objects are handled by the dereferenceObjects() method
- * since they're only pointing to object numbers
- *
- * However for XRef aware parsers we have to know which objects contain
- * object streams. We will store this information in normal xref mapping
- * table but add object stream number with minus sign in order to
- * distinguish from file offsets
- */
- int objstmObjNr = 0;
- for(int i = 0; i < w1; i++)
- {
- objstmObjNr += (currLine[i + w0] & 0x00ff) << ((w1 - i - 1) * 8);
- }
- objKey = new COSObjectKey( objID, 0 );
- xrefTrailerResolver.setXRef( objKey, -objstmObjNr );
- break;
- default:
- break;
- }
+ case 0:
+ /*
+ * Skipping free objects
+ */
+ break;
+ case 1:
+ int offset = 0;
+ for(int i = 0; i < w1; i++)
+ {
+ offset += (currLine[i + w0] & 0x00ff) << ((w1 - i - 1) * 8);
+ }
+ int genNum = 0;
+ for(int i = 0; i < w2; i++)
+ {
+ genNum += (currLine[i + w0 + w1] & 0x00ff) << ((w2 - i - 1) * 8);
+ }
+ COSObjectKey objKey = new COSObjectKey(objID, genNum);
+ xrefTrailerResolver.setXRef(objKey, offset);
+ break;
+ case 2:
+ /*
+ * object stored in object stream; 2nd argument is object number of object stream;
+ * 3rd argument index of object within object stream
+ *
+ * For sequential PDFParser we do not need this information
+ * because
+ * These objects are handled by the dereferenceObjects() method
+ * since they're only pointing to object numbers
+ *
+ * However for XRef aware parsers we have to know which objects contain
+ * object streams. We will store this information in normal xref mapping
+ * table but add object stream number with minus sign in order to
+ * distinguish from file offsets
+ */
+ int objstmObjNr = 0;
+ for(int i = 0; i < w1; i++)
+ {
+ objstmObjNr += (currLine[i + w0] & 0x00ff) << ((w1 - i - 1) * 8);
+ }
+ objKey = new COSObjectKey( objID, 0 );
+ xrefTrailerResolver.setXRef( objKey, -objstmObjNr );
+ break;
+ default:
+ break;
}
}
- finally
- {
- pdfSource.close();
- }
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java Sat Jun 6 16:53:24 2015
@@ -91,8 +91,8 @@ public class PDDocument implements Close
// this ID doesn't represent the actual documentId from the trailer
private Long documentId;
- // the PDF parser
- private final BaseParser parser;
+ // the pdf to be read
+ private final RandomAccessRead pdfSource;
// the File to read incremental data from
private File incrementalFile;
@@ -124,7 +124,7 @@ public class PDDocument implements Close
public PDDocument(boolean useScratchFiles)
{
document = new COSDocument(useScratchFiles);
- parser = null;
+ pdfSource = null;
// First we need a trailer
COSDictionary trailer = new COSDictionary();
@@ -555,25 +555,25 @@ public class PDDocument implements Close
* Constructor that uses an existing document. The COSDocument that is passed in must be valid.
*
* @param doc The COSDocument that this document wraps.
- * @param usedParser the parser which is used to read the pdf
+ * @param source the parser which is used to read the pdf
*/
- public PDDocument(COSDocument doc, BaseParser usedParser)
+ public PDDocument(COSDocument doc, RandomAccessRead source)
{
- this(doc, usedParser, null);
+ this(doc, source, null);
}
/**
* Constructor that uses an existing document. The COSDocument that is passed in must be valid.
*
* @param doc The COSDocument that this document wraps.
- * @param usedParser the parser which is used to read the pdf
+ * @param source the parser which is used to read the pdf
* @param permission he access permissions of the pdf
*
*/
- public PDDocument(COSDocument doc, BaseParser usedParser, AccessPermission permission)
+ public PDDocument(COSDocument doc, RandomAccessRead source, AccessPermission permission)
{
document = doc;
- parser = usedParser;
+ pdfSource = source;
accessPermission = permission;
}
@@ -1107,9 +1107,9 @@ public class PDDocument implements Close
document.close();
// close the source PDF stream, if we read from one
- if (parser != null)
+ if (pdfSource != null)
{
- parser.close();
+ pdfSource.close();
}
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java Sat Jun 6 16:53:24 2015
@@ -117,7 +117,6 @@ class AppearanceGeneratorHelper
PDFStreamParser parser = new PDFStreamParser(stream);
parser.parse();
List<Object> tokens = parser.getTokens();
- parser.close();
return tokens;
}
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=1683932&r1=1683931&r2=1683932&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 Jun 6 16:53:24 2015
@@ -67,7 +67,6 @@ class PDAppearanceString
PDFStreamParser parser = new PDFStreamParser(stream);
parser.parse();
tokens = parser.getTokens();
- parser.close();
this.defaultResources = defaultResources;
}
Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/TestPDFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/TestPDFParser.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/TestPDFParser.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/TestPDFParser.java Sat Jun 6 16:53:24 2015
@@ -29,7 +29,9 @@ import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
+import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.io.RandomAccessBufferedFileInputStream;
+import org.apache.pdfbox.io.RandomAccessRead;
import org.junit.Before;
import org.junit.Test;
@@ -81,42 +83,35 @@ public class TestPDFParser
@Test
public void testPDFParserFile() throws IOException
{
- PDFParser pdfParser = new PDFParser(new RandomAccessBufferedFileInputStream(new File(PATH_OF_PDF)));
- executeParserTest(pdfParser);
- pdfParser.close();
+ executeParserTest(new RandomAccessBufferedFileInputStream(new File(PATH_OF_PDF)), false);
}
@Test
public void testPDFParserInputStream() throws IOException
{
- PDFParser pdfParser = new PDFParser(new RandomAccessBufferedFileInputStream(
- new FileInputStream(PATH_OF_PDF)));
- executeParserTest(pdfParser);
- pdfParser.close();
+ executeParserTest(new RandomAccessBufferedFileInputStream(new FileInputStream(PATH_OF_PDF)), false);
}
@Test
public void testPDFParserFileScratchFile() throws IOException
{
- PDFParser pdfParser = new PDFParser(new RandomAccessBufferedFileInputStream(
- new File(PATH_OF_PDF)), true);
- executeParserTest(pdfParser);
- pdfParser.close();
+ executeParserTest(new RandomAccessBufferedFileInputStream(new File(PATH_OF_PDF)), true);
}
@Test
public void testPDFParserInputStreamScratchFile() throws IOException
{
- PDFParser pdfParser = new PDFParser(new RandomAccessBufferedFileInputStream(
- new FileInputStream(PATH_OF_PDF)), true);
- executeParserTest(pdfParser);
- pdfParser.close();
+ executeParserTest(new RandomAccessBufferedFileInputStream(new FileInputStream(PATH_OF_PDF)), true);
}
- private void executeParserTest(PDFParser pdfParser) throws IOException
+ private void executeParserTest(RandomAccessRead source, boolean useScratchFile) throws IOException
{
+ PDFParser pdfParser = new PDFParser(source, useScratchFile);
pdfParser.parse();
- assertNotNull(pdfParser.getDocument());
+ COSDocument doc = pdfParser.getDocument();
+ assertNotNull(doc);
+ doc.close();
+ source.close();
// number tmp file must be the same
assertEquals(numberOfTmpFiles, getNumberOfTempFile());
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/parser/PreflightParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/parser/PreflightParser.java?rev=1683932&r1=1683931&r2=1683932&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/parser/PreflightParser.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/parser/PreflightParser.java Sat Jun 6 16:53:24 2015
@@ -99,6 +99,7 @@ public class PreflightParser extends PDF
public PreflightParser(File file) throws IOException
{
+ // TODO move file handling outside of the parser
super(new RandomAccessBufferedFileInputStream(file));
this.setLenient(false);
this.originalDocument = new FileDataSource(file);
@@ -106,11 +107,13 @@ public class PreflightParser extends PDF
public PreflightParser(String filename) throws IOException
{
+ // TODO move file handling outside of the parser
this(new File(filename));
}
public PreflightParser(DataSource input) throws IOException
{
+ // TODO move file handling outside of the parser
super(new RandomAccessBufferedFileInputStream(input.getInputStream()));
this.setLenient(false);
this.originalDocument = input;
@@ -803,7 +806,6 @@ public class PreflightParser extends PDF
// parse object stream
PDFObjectStreamParser parser = new PDFObjectStreamParser((COSStream) objstmBaseObj, document);
parser.parse();
- parser.close();
// get set of object numbers referenced for this object stream
final Set<Long> refObjNrs = xrefTrailerResolver.getContainedObjectNumbers(objstmObjNr);