Index: tika-core/src/main/java/org/apache/tika/io/TikaInputStream.java
===================================================================
--- tika-core/src/main/java/org/apache/tika/io/TikaInputStream.java	(revision 1235132)
+++ 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 1235132)
+++ 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;
@@ -86,8 +89,17 @@
             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
+        TikaInputStream tikaStream = TikaInputStream.get(stream);
+        PDDocument pdfDocument;
+        if (tikaStream.isFileInputStream()) {
+            RandomAccess scratchFile = new RandomAccessFile(tikaStream.getFile(), "rw");
+            pdfDocument = PDDocument.load(new CloseShieldInputStream(stream), scratchFile, true);
+        } else {
+            pdfDocument = PDDocument.load(new CloseShieldInputStream(stream), true);
+        }
+
         try {
             if (pdfDocument.isEncrypted()) {
                 try {
