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