aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Steiner <ssteiner@apache.org>2015-02-16 12:15:36 +0000
committerSimon Steiner <ssteiner@apache.org>2015-02-16 12:15:36 +0000
commit5809d2a35cb2607a9f205a04d0e48ceee5d2e593 (patch)
treeea3172708fca892d0308c5eecea7d05b55615880
parent361eded8caf9a2d0b833dcc9930efbb5ca8a40e8 (diff)
downloadxmlgraphics-fop-Temp_PDFLinearization.tar.gz
xmlgraphics-fop-Temp_PDFLinearization.zip
FOP-2445: PDF Linearization, fix imagesTemp_PDFLinearization
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_PDFLinearization@1660083 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/fop/render/pdf/PDFPainter.java8
-rw-r--r--src/java/org/apache/fop/svg/PDFGraphics2D.java2
-rw-r--r--test/java/org/apache/fop/pdf/PDFLinearizationTestCase.java38
3 files changed, 44 insertions, 4 deletions
diff --git a/src/java/org/apache/fop/render/pdf/PDFPainter.java b/src/java/org/apache/fop/render/pdf/PDFPainter.java
index cd992841e..c43e6347a 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 @@ public class PDFPainter extends AbstractIFPainter<PDFDocumentHandler> {
prepareImageMCID(structElem);
}
drawImageUsingURI(uri, rect);
- flushPDFDoc();
+ if (!getDocumentHandler().getPDFDocument().isLinearizationEnabled()) {
+ flushPDFDoc();
+ }
}
}
@@ -228,7 +230,9 @@ public class PDFPainter extends AbstractIFPainter<PDFDocumentHandler> {
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 323d8ede1..5a0299281 100644
--- a/src/java/org/apache/fop/svg/PDFGraphics2D.java
+++ b/src/java/org/apache/fop/svg/PDFGraphics2D.java
@@ -475,7 +475,7 @@ public class PDFGraphics2D extends AbstractGraphics2D implements NativeImageHand
}
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 ee46514c4..7b78c1f5b 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.LinkedHashMap;
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 @@ public class PDFLinearizationTestCase {
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 @@ public class PDFLinearizationTestCase {
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);