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