You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ss...@apache.org on 2017/02/28 11:53:25 UTC

svn commit: r1784729 - in /xmlgraphics/fop-pdf-images/trunk: src/java/org/apache/fop/render/pdf/pdfbox/ test/java/org/apache/fop/render/pdf/

Author: ssteiner
Date: Tue Feb 28 11:53:25 2017
New Revision: 1784729

URL: http://svn.apache.org/viewvc?rev=1784729&view=rev
Log:
FOP-2693: PDF plugin document cache may return closed document

Modified:
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImagePDF.java
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDF.java
    xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PreloaderPDFTestCase.java

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImagePDF.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImagePDF.java?rev=1784729&r1=1784728&r2=1784729&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImagePDF.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/ImagePDF.java Tue Feb 28 11:53:25 2017
@@ -66,18 +66,15 @@ public class ImagePDF extends AbstractIm
 
     /** {@inheritDoc} */
     public boolean isCacheable() {
-        return true;
+        return false;
     }
 
-    /** {@inheritDoc} */
-    @Override
-    protected void finalize() throws Throwable {
+    public void close() {
         try {
-            this.pddoc.close();
-        } catch (IOException ioe) {
-            //ignore
+            pddoc.close();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
         }
-        super.finalize();
     }
 
 }

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java?rev=1784729&r1=1784728&r2=1784729&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java Tue Feb 28 11:53:25 2017
@@ -79,6 +79,7 @@ public class PDFBoxImageHandler extends
                 pageAdjust.translate(x * (1 / pageAdjust.getScaleX()), -y * (1 / -pageAdjust.getScaleY()));
             }
             generator.placeImage(pageAdjust, stream);
+            pdfImage.close();
         } catch (Throwable t) {
             throw new RuntimeException(
                     "Error on PDF page: " + pdfImage.getInfo().getOriginalURI() + " " + t.getMessage(), t);

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDF.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDF.java?rev=1784729&r1=1784728&r2=1784729&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDF.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDF.java Tue Feb 28 11:53:25 2017
@@ -23,10 +23,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.util.Collections;
-import java.util.Locale;
-import java.util.Map;
-import java.util.WeakHashMap;
 
 import javax.imageio.stream.ImageInputStream;
 import javax.xml.transform.Source;
@@ -54,15 +50,6 @@ public class PreloaderPDF extends Abstra
     /** PDF header text */
     private static final String PDF_HEADER = "%PDF-";
 
-    /** static PDDocument cache for faster multi-page processing */
-    private static final Cache.Type CACHE_TYPE = Cache.Type.valueOf(
-            System.getProperty("fop.pdfbox.preloader-cache", Cache.Type.WEAK.name()).toUpperCase(Locale.ENGLISH));
-
-    private static Map<Object, Cache<URI, PDDocument>> documentCacheMap
-            = Collections.synchronizedMap(new WeakHashMap<Object, Cache<URI, PDDocument>>());
-    //the cache here can cause problems because PDDocument that have been closed might still
-    //be accessed. Example: java.io.IOException: The handle is invalid
-
     /** {@inheritDoc} */
     public ImageInfo preloadImage(String uri, Source src, ImageContext context)
                 throws IOException, ImageException {
@@ -162,7 +149,7 @@ public class PreloaderPDF extends Abstra
     private PDDocument getDocument(Object context, URI uri, Source src)
             throws IOException {
         try {
-            return getDocumentCache(context).getValue(uri, createDocumentMaker(src, uri));
+            return createDocumentMaker(src, uri).make();
         } catch (IOException ioe) {
             throw ioe;
         } catch (Exception e) {
@@ -171,16 +158,6 @@ public class PreloaderPDF extends Abstra
         }
     }
 
-    private Cache<URI, PDDocument> getDocumentCache(Object context) {
-        Cache<URI, PDDocument> documentCache = documentCacheMap.get(context);
-
-        if (documentCache == null) {
-            documentCache = Cache.createCache(CACHE_TYPE);
-            documentCacheMap.put(context, documentCache);
-        }
-        return documentCache;
-    }
-
     private ValueMaker<PDDocument> createDocumentMaker(final Source src, final URI docURI) {
         return new DocumentMaker(src, docURI);
     }

Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PreloaderPDFTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PreloaderPDFTestCase.java?rev=1784729&r1=1784728&r2=1784729&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PreloaderPDFTestCase.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PreloaderPDFTestCase.java Tue Feb 28 11:53:25 2017
@@ -29,12 +29,15 @@ import javax.imageio.stream.MemoryCacheI
 
 import org.junit.Test;
 
+import org.apache.pdfbox.pdmodel.PDDocument;
+
 import org.apache.xmlgraphics.image.loader.ImageException;
 import org.apache.xmlgraphics.image.loader.ImageInfo;
 import org.apache.xmlgraphics.image.loader.ImageSource;
 import org.apache.xmlgraphics.image.loader.impl.DefaultImageContext;
 import org.apache.xmlgraphics.image.loader.impl.ImageRendered;
 
+import org.apache.fop.render.pdf.pdfbox.ImagePDF;
 import org.apache.fop.render.pdf.pdfbox.PreloaderImageRawData;
 import org.apache.fop.render.pdf.pdfbox.PreloaderPDF;
 
@@ -63,4 +66,21 @@ public class PreloaderPDFTestCase {
         ImageInfo imageInfo = new PreloaderPDF().preloadImage("", imageSource, new DefaultImageContext());
         Assert.assertEquals(imageInfo.getMimeType(), "application/pdf");
     }
+
+    @Test
+    public void testPreloaderPDFCache() throws IOException, ImageException {
+        DefaultImageContext context = new DefaultImageContext();
+        readPDF(context);
+        readPDF(context);
+    }
+
+    private void readPDF(DefaultImageContext context) throws IOException, ImageException {
+        ImageSource imageSource = new ImageSource(
+                ImageIO.createImageInputStream(new File(PDFBoxAdapterTestCase.ROTATE)), "", true);
+        ImageInfo imageInfo = new PreloaderPDF().preloadImage("", imageSource, context);
+        ImagePDF img = (ImagePDF) imageInfo.getOriginalImage();
+        PDDocument doc = img.getPDDocument();
+        doc.save(new ByteArrayOutputStream());
+        img.close();
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org