FOP-2753: PDF to PS allow fop fonts as fallback, add close

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop-pdf-images/trunk@1812128 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java b/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
index e46a176..c9bcb1c 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
@@ -147,6 +147,7 @@
 
         /** {@inheritDoc} */
         public void paint(Graphics2D g2d, Rectangle2D area) {
+            fopFontProvider.start();
             try {
                 PDRectangle mediaBox = page.getCropBox();
                 AffineTransform at = new AffineTransform();
@@ -156,17 +157,19 @@
                 }
                 if (g2d instanceof PSGraphics2D && new PageUtil().pageHasTransparency(page.getResources())) {
                     drawPageAsImage(at, g2d);
-                    return;
+                } else {
+                    at.translate(area.getX(), area.getY());
+                    at.scale(area.getWidth() / mediaBox.getWidth(),
+                            area.getHeight() / mediaBox.getHeight());
+                    g2d.transform(at);
+                    new PDFRenderer(pdDocument).renderPageToGraphics(selectedPage, g2d);
                 }
-                at.translate(area.getX(), area.getY());
-                at.scale(area.getWidth() / mediaBox.getWidth(),
-                        area.getHeight() / mediaBox.getHeight());
-                g2d.transform(at);
-                new PDFRenderer(pdDocument).renderPageToGraphics(selectedPage, g2d);
             } catch (UnsupportedOperationException e) {
                 throw e;
             } catch (Throwable t) {
                 throw new RuntimeException("Error while painting PDF page: " + uri + " " + t.getMessage(), t);
+            } finally {
+                fopFontProvider.close();
             }
         }
 
@@ -243,10 +246,14 @@
         private Map<String, Object> fonts = new HashMap<String, Object>();
         private Map<String, TrueTypeFont> ttFonts = new HashMap<String, TrueTypeFont>();
 
-        FopFontProvider() {
+        void start() {
             fopFontMapper.fopFontProvider.set(this);
         }
 
+        void close() {
+            fopFontMapper.fopFontProvider.remove();
+        }
+
         private CustomFont getFont(String name) throws IOException {
             Object typeface = fonts.get(name);
             if (typeface instanceof LazyFont) {
@@ -285,8 +292,16 @@
             defaultFontMapper = FontMappers.instance();
         }
 
+        private TrueTypeFont getTrueTypeFont(String baseFont) {
+            FopFontProvider fontProvider = fopFontProvider.get();
+            if (fontProvider == null) {
+                return null;
+            }
+            return fontProvider.getTrueTypeFont(baseFont);
+        }
+
         public FontMapping<TrueTypeFont> getTrueTypeFont(String baseFont, PDFontDescriptor fontDescriptor) {
-            TrueTypeFont fopFont = fopFontProvider.get().getTrueTypeFont(baseFont);
+            TrueTypeFont fopFont = getTrueTypeFont(baseFont);
             if (fopFont != null) {
                 return new FontMapping<TrueTypeFont>(fopFont, true);
             }
@@ -295,7 +310,7 @@
 
 
         public FontMapping<FontBoxFont> getFontBoxFont(String baseFont, PDFontDescriptor fontDescriptor) {
-            TrueTypeFont fopFont = fopFontProvider.get().getTrueTypeFont(baseFont);
+            TrueTypeFont fopFont = getTrueTypeFont(baseFont);
             if (fopFont != null) {
                 return new FontMapping<FontBoxFont>(fopFont, true);
             }