Index: tika-core/src/main/java/org/apache/tika/io/TikaInputStream.java
===================================================================
--- tika-core/src/main/java/org/apache/tika/io/TikaInputStream.java	(revision 1235140)
+++ tika-core/src/main/java/org/apache/tika/io/TikaInputStream.java	(working copy)
@@ -74,6 +74,19 @@
     }
 
     /**
+     * Checks whether the given stream wrapped  by the TikaInputStreaminstance
+     * instance holds a file or not. This knowledge may enable parsers to 
+     * use in-memory or temporary file memory for parsing.
+     * 
+     * @return <code>true</code> if the wrapped stream is a FileInputStream 
+     *         instance,  <code>false</code> otherwise
+     *         
+     */
+    public boolean isFileInputStream() {
+        return (in instanceof BufferedInputStream  ||  in instanceof FileInputStream);
+    }
+
+    /**
      * Casts or wraps the given stream to a TikaInputStream instance.
      * This method can be used to access the functionality of this class
      * even when given just a normal input stream instance.
Index: tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java	(revision 1235140)
+++ tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java	(working copy)
@@ -28,10 +28,13 @@
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSString;
+import org.apache.pdfbox.io.RandomAccess;
+import org.apache.pdfbox.io.RandomAccessFile;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDDocumentInformation;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.io.CloseShieldInputStream;
+import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.PagedText;
 import org.apache.tika.metadata.Property;
@@ -77,8 +80,21 @@
             InputStream stream, ContentHandler handler,
             Metadata metadata, ParseContext context)
             throws IOException, SAXException, TikaException {
-        PDDocument pdfDocument =
-            PDDocument.load(new CloseShieldInputStream(stream), true);
+
+        // Choose in-memory or temp file based on stream type
+        PDDocument pdfDocument = null;
+        if (TikaInputStream.isTikaInputStream(stream)) {
+	        if (((TikaInputStream) stream).isFileInputStream()) {
+	            RandomAccess scratchFile = new RandomAccessFile(((TikaInputStream) stream).getFile(), "rw");
+	            pdfDocument = PDDocument.load(new CloseShieldInputStream(stream), scratchFile, true);
+	        } 
+        } 
+        
+        // If we didn't populate pdfDocument, use in memory approach
+        if (pdfDocument == null) {
+        	pdfDocument = PDDocument.load(new CloseShieldInputStream(stream), true);
+        }
+
         try {
             if (pdfDocument.isEncrypted()) {
                 try {
