FOP-2445: PDF Linearization, fix images

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_PDFLinearization@1660083 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/java/org/apache/fop/render/pdf/PDFPainter.java b/src/java/org/apache/fop/render/pdf/PDFPainter.java
index cd99284..c43e634 100644
--- a/src/java/org/apache/fop/render/pdf/PDFPainter.java
+++ b/src/java/org/apache/fop/render/pdf/PDFPainter.java
@@ -171,7 +171,9 @@
                 prepareImageMCID(structElem);
             }
             drawImageUsingURI(uri, rect);
-            flushPDFDoc();
+            if (!getDocumentHandler().getPDFDocument().isLinearizationEnabled()) {
+                flushPDFDoc();
+            }
         }
     }
 
@@ -228,7 +230,9 @@
             prepareImageMCID(structElem);
         }
         drawImageUsingDocument(doc, rect);
-        flushPDFDoc();
+        if (!getDocumentHandler().getPDFDocument().isLinearizationEnabled()) {
+            flushPDFDoc();
+        }
     }
 
     private void flushPDFDoc() throws IFException {
diff --git a/src/java/org/apache/fop/svg/PDFGraphics2D.java b/src/java/org/apache/fop/svg/PDFGraphics2D.java
index 323d8ed..5a02992 100644
--- a/src/java/org/apache/fop/svg/PDFGraphics2D.java
+++ b/src/java/org/apache/fop/svg/PDFGraphics2D.java
@@ -475,7 +475,7 @@
     }
 
     private void flushPDFDocument() {
-        if (outputStream != null) {
+        if (outputStream != null && !pdfDoc.isLinearizationEnabled()) {
             try {
                 this.pdfDoc.output(outputStream);
             } catch (IOException ioe) {
diff --git a/test/java/org/apache/fop/pdf/PDFLinearizationTestCase.java b/test/java/org/apache/fop/pdf/PDFLinearizationTestCase.java
index ee46514..7b78c1f 100644
--- a/test/java/org/apache/fop/pdf/PDFLinearizationTestCase.java
+++ b/test/java/org/apache/fop/pdf/PDFLinearizationTestCase.java
@@ -18,9 +18,12 @@
 /* $Id$ */
 package org.apache.fop.pdf;
 
+import java.awt.Dimension;
+import java.awt.Rectangle;
 import java.awt.geom.Rectangle2D;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -28,10 +31,18 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.xml.transform.stream.StreamResult;
+
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.apps.FopFactory;
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.render.intermediate.IFContext;
 import org.apache.fop.render.pdf.PDFContentGenerator;
+import org.apache.fop.render.pdf.PDFDocumentHandler;
+import org.apache.fop.render.pdf.PDFPainter;
 
 public class PDFLinearizationTestCase {
     private int objectLeast;
@@ -50,7 +61,7 @@
             Rectangle2D.Float f = new Rectangle2D.Float();
             PDFPage page = new PDFPage(resources, i, f, f, f, f);
             doc.registerObject(page);
-//            doc.registerObject(gen.getStream());
+            doc.registerObject(gen.getStream());
             page.setContents(gen.getStream());
         }
         gen.flushPDFDoc();
@@ -58,6 +69,31 @@
         checkPDF(data);
     }
 
+    @Test
+    public void testImage() throws Exception {
+        String fopxconf = "<fop version=\"1.0\"><renderers>"
+                + "<renderer mime=\"application/pdf\">"
+                + "<linearization>true</linearization>"
+                + "</renderer></renderers></fop>";
+        FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI(),
+                new ByteArrayInputStream(fopxconf.getBytes()));
+        FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
+        IFContext ifContext = new IFContext(foUserAgent);
+        PDFDocumentHandler documentHandler = new PDFDocumentHandler(ifContext);
+        documentHandler.getConfigurator().configure(documentHandler);
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        documentHandler.setFontInfo(new FontInfo());
+        documentHandler.setResult(new StreamResult(out));
+        documentHandler.startDocument();
+        documentHandler.startPage(0, "", "", new Dimension());
+        PDFPainter pdfPainter = new PDFPainter(documentHandler, null);
+        pdfPainter.drawImage("test/resources/fop/svg/logo.jpg", new Rectangle());
+        documentHandler.endPage();
+        Assert.assertFalse(out.toString().contains("/Subtype /Image"));
+        documentHandler.endDocument();
+        Assert.assertTrue(out.toString().contains("/Subtype /Image"));
+    }
+
     private void checkPDF(byte[] data) throws IOException {
         checkHintTable(data);
         InputStream is = new ByteArrayInputStream(data);