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 2014/01/16 08:11:30 UTC
svn commit: r1558705 - in /pdfbox/branches/1.8: ./
pdfbox/src/main/java/org/apache/pdfbox/pdfparser/
pdfbox/src/main/java/org/apache/pdfbox/pdmodel/
pdfbox/src/main/java/org/apache/pdfbox/util/
pdfbox/src/test/java/org/apache/pdfbox/
Author: lehmi
Date: Thu Jan 16 07:11:30 2014
New Revision: 1558705
URL: http://svn.apache.org/r1558705
Log:
PDFBOX-1808: release used resources
Modified:
pdfbox/branches/1.8/ (props changed)
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java
pdfbox/branches/1.8/pdfbox/src/test/java/org/apache/pdfbox/TestTextToPdf.java
Propchange: pdfbox/branches/1.8/
------------------------------------------------------------------------------
Merged /pdfbox/trunk:r1553175,1553220,1557374
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java?rev=1558705&r1=1558704&r2=1558705&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java Thu Jan 16 07:11:30 2014
@@ -38,6 +38,7 @@ import org.apache.pdfbox.cos.COSObject;
import org.apache.pdfbox.cos.COSStream;
import org.apache.pdfbox.cos.COSString;
import org.apache.pdfbox.exceptions.WrappedIOException;
+import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.io.PushBackInputStream;
import org.apache.pdfbox.io.RandomAccess;
import org.apache.pdfbox.persistence.util.COSObjectKey;
@@ -556,6 +557,10 @@ public abstract class BaseParser
PROP_PUSHBACK_SIZE, ioe );
}
// create new filtered stream
+ if (out != null)
+ {
+ IOUtils.closeQuietly(out);
+ }
out = stream.createFilteredStream( streamLength );
// scan until we find endstream:
readUntilEndStream( out );
@@ -1705,4 +1710,16 @@ public abstract class BaseParser
return buffer;
}
+ /**
+ * Release all used resources.
+ */
+ public void clearResources()
+ {
+ document = null;
+ if (pdfSource != null)
+ {
+ IOUtils.closeQuietly(pdfSource);
+ pdfSource = null;
+ }
+ }
}
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java?rev=1558705&r1=1558704&r2=1558705&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java Thu Jan 16 07:11:30 2014
@@ -442,7 +442,7 @@ public class PDFParser extends BaseParse
*/
public PDDocument getPDDocument() throws IOException
{
- return new PDDocument( getDocument() );
+ return new PDDocument( getDocument(), this );
}
/**
@@ -981,4 +981,22 @@ public class PDFParser extends BaseParse
}
return false;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void clearResources() {
+ super.clearResources();
+ if (conflictList != null)
+ {
+ conflictList.clear();
+ conflictList = null;
+ }
+ if (xrefTrailerResolver != null)
+ {
+ xrefTrailerResolver.clearResources();
+ xrefTrailerResolver = null;
+ }
+ }
}
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java?rev=1558705&r1=1558704&r2=1558705&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java Thu Jan 16 07:11:30 2014
@@ -489,4 +489,16 @@ public class PDFStreamParser extends Bas
return isSpaceOrReturn( pdfSource.peek() );
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void clearResources() {
+ super.clearResources();
+ if (streamObjects != null)
+ {
+ streamObjects.clear();
+ streamObjects = null;
+ }
+ }
}
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java?rev=1558705&r1=1558704&r2=1558705&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java Thu Jan 16 07:11:30 2014
@@ -65,11 +65,27 @@ public class XrefTrailerResolver
private final Map<COSObjectKey, Long> xrefTable = new HashMap<COSObjectKey, Long>();
/**
- * Default cosntructor.
+ * Default constructor.
*/
private XrefTrailerObj()
{
}
+
+ /**
+ * Release all used resources.
+ */
+ public void clearResources()
+ {
+ if (trailer != null)
+ {
+ trailer.clear();
+ trailer = null;
+ }
+ if (xrefTable != null)
+ {
+ xrefTable.clear();
+ }
+ }
}
private final Map<Long, XrefTrailerObj> bytePosToXrefMap = new HashMap<Long, XrefTrailerObj>();
@@ -283,4 +299,26 @@ public class XrefTrailerResolver
}
return refObjNrs;
}
+
+ /**
+ * Release all used resources.
+ */
+ public void clearResources()
+ {
+ if (curXrefTrailerObj != null)
+ {
+ curXrefTrailerObj.clearResources();
+ curXrefTrailerObj = null;
+ }
+ if (resolvedXrefTrailer != null)
+ {
+ resolvedXrefTrailer.clearResources();
+ resolvedXrefTrailer = null;
+ }
+ if (bytePosToXrefMap != null)
+ {
+ bytePosToXrefMap.clear();
+ }
+ }
+
}
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java?rev=1558705&r1=1558704&r2=1558705&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java Thu Jan 16 07:11:30 2014
@@ -48,6 +48,7 @@ import org.apache.pdfbox.exceptions.Cryp
import org.apache.pdfbox.exceptions.InvalidPasswordException;
import org.apache.pdfbox.exceptions.SignatureException;
import org.apache.pdfbox.io.RandomAccess;
+import org.apache.pdfbox.pdfparser.BaseParser;
import org.apache.pdfbox.pdfparser.NonSequentialPDFParser;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdfwriter.COSWriter;
@@ -124,7 +125,8 @@ public class PDDocument implements Pagea
*/
private Long documentId;
-
+ private BaseParser parser;
+
/**
* Constructor, creates a new PDF Document with no pages. You need to add
* at least one page for the document to be valid.
@@ -694,7 +696,19 @@ public class PDDocument implements Pagea
*/
public PDDocument( COSDocument doc )
{
+ this(doc, 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
+ */
+ public PDDocument(COSDocument doc, BaseParser usedParser)
+ {
document = doc;
+ parser = usedParser;
}
/**
@@ -1525,7 +1539,25 @@ public class PDDocument implements Pagea
*/
public void close() throws IOException
{
- document.close();
+ documentCatalog = null;
+ documentInformation = null;
+ encParameters = null;
+ if (pageMap != null)
+ {
+ pageMap.clear();
+ pageMap = null;
+ }
+ securityHandler = null;
+ if (document != null)
+ {
+ document.close();
+ document = null;
+ }
+ if (parser != null)
+ {
+ parser.clearResources();
+ parser = null;
+ }
}
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java?rev=1558705&r1=1558704&r2=1558705&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java Thu Jan 16 07:11:30 2014
@@ -281,6 +281,17 @@ public class PDFTextStripper extends PDF
{
super.resetEngine();
currentPageNo = 0;
+ document = null;
+ if (charactersByArticle != null)
+ {
+ charactersByArticle.clear();
+ }
+ if (characterListMapping != null)
+ {
+ characterListMapping.clear();
+ }
+ startBookmark = null;
+ endBookmark = null;
}
/**
@@ -1803,7 +1814,7 @@ public class PDFTextStripper extends PDF
*/
protected void setListItemPatterns(List<Pattern> patterns)
{
- listOfPatterns = patterns;
+ listOfPatterns = patterns;
}
/**
Modified: pdfbox/branches/1.8/pdfbox/src/test/java/org/apache/pdfbox/TestTextToPdf.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/test/java/org/apache/pdfbox/TestTextToPdf.java?rev=1558705&r1=1558704&r2=1558705&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/test/java/org/apache/pdfbox/TestTextToPdf.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/test/java/org/apache/pdfbox/TestTextToPdf.java Thu Jan 16 07:11:30 2014
@@ -54,7 +54,6 @@ public class TestTextToPdf extends TestC
StringReader reader = new StringReader("");
PDDocument pdfDoc = pdfCreator.createPDFFromText(reader);
reader.close();
- pdfDoc.close();
// In order for the PDF document to be openable by Adobe Reader, it needs
// to have some pages in it. So we'll check that.
@@ -62,6 +61,7 @@ public class TestTextToPdf extends TestC
List allPages = docCatalog.getAllPages();
assertNotNull("All Pages was unexpectedly null.", allPages);
assertEquals("Wrong number of pages.", 1, allPages.size());
+ pdfDoc.close();
}
/**