XGC-123: Decode image at page load rather than document load
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/commons/trunk@1881060 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/xmlgraphics/ps/ImageFormGenerator.java b/src/main/java/org/apache/xmlgraphics/ps/ImageFormGenerator.java
index a249a6d..8f7ee38 100644
--- a/src/main/java/org/apache/xmlgraphics/ps/ImageFormGenerator.java
+++ b/src/main/java/org/apache/xmlgraphics/ps/ImageFormGenerator.java
@@ -114,7 +114,7 @@
return "/ASCII85Decode filter " + implicitFilter + " filter";
} else {
if (gen.getPSLevel() >= 3) {
- return "/ASCII85Decode filter /FlateDecode filter";
+ return "/ASCII85Decode filter";
} else {
return "/ASCII85Decode filter /RunLengthDecode filter";
}
@@ -133,6 +133,12 @@
dataSource = "{ " + getDataName() + " i get /i i 1 add store } bind";
} else {
dataSource = getDataName();
+ if (gen.getPSLevel() >= 3) {
+ String implicitFilter = encoder.getImplicitFilter();
+ if (implicitFilter == null) {
+ dataSource += " /FlateDecode filter";
+ }
+ }
}
AffineTransform at = new AffineTransform();
at.scale(getDimensions().getWidth(), getDimensions().getHeight());
diff --git a/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java b/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java
new file mode 100644
index 0000000..1754906
--- /dev/null
+++ b/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.xmlgraphics.ps;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.color.ColorSpace;
+
+
+import java.awt.geom.Dimension2D;
+import java.awt.image.BufferedImage;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.xmlgraphics.java2d.Dimension2DDouble;
+import org.apache.xmlgraphics.java2d.color.NamedColorSpace;
+
+
+public class FormGeneratorTestCase {
+ @Test
+ public void testGeneratePaintProc() throws IOException {
+ Dimension2D dimension = new Dimension2DDouble(300, 500);
+ BufferedImage im = new BufferedImage(100, 75, BufferedImage.TYPE_INT_ARGB);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ImageFormGenerator formImageGen = new ImageFormGenerator("form", "title", dimension, im, false);
+ PSGenerator gen = new PSGenerator(out);
+ formImageGen.generatePaintProc(gen);
+ String test = out.toString("UTF-8");
+
+ String expected = " form:Data 0 setfileposition\n"
+ + "[300 0 0 500 0 0] CT\n"
+ + "/DeviceRGB setcolorspace\n"
+ + "<<\n";
+ Assert.assertTrue(test.contains(expected));
+ Assert.assertTrue(test.contains(" /DataSource form:Data"));
+ Assert.assertTrue(test.contains(" /ImageMatrix [100 0 0 75 0 0]\n"));
+ Assert.assertTrue(test.contains(" /BitsPerComponent 8\n"));
+ Assert.assertTrue(test.contains(" /Height 75\n"));
+ Assert.assertTrue(test.contains(" /ImageType 1\n"));
+ Assert.assertTrue(test.contains(" /Decode [0 1 0 1 0 1]\n"));
+ Assert.assertTrue(test.contains(">> image\n"));
+ out.reset();
+ im = null;
+
+ Color c = Color.BLUE;
+ Dimension dimensionPX = new Dimension(200, 400);
+ ImageEncoder enco = ImageEncodingHelper.createRenderedImageEncoder(im);
+ ColorSpace cs = new NamedColorSpace("myColor", c);
+ formImageGen = new ImageFormGenerator("form", "title", dimension, dimensionPX, enco, cs, false);
+ gen = new PSGenerator(out);
+ gen.setPSLevel(2);
+ formImageGen.generatePaintProc(gen);
+ test = out.toString("UTF-8");
+ expected = " userdict /i 0 put\n"
+ + "[300 0 0 500 0 0] CT\n"
+ + "/DeviceGray setcolorspace\n"
+ + "<<\n";
+ Assert.assertTrue(test.contains(expected));
+ Assert.assertTrue(test.contains(" /DataSource { form:Data i get /i i 1 add store } bind\n"));
+ Assert.assertTrue(test.contains(" /ImageMatrix [200 0 0 400 0 0]\n"));
+ Assert.assertTrue(test.contains(" /Height 400\n"));
+ Assert.assertTrue(test.contains(" /BitsPerComponent 8\n"));
+ Assert.assertTrue(test.contains(" /ImageType 1\n"));
+ Assert.assertTrue(test.contains(" /Decode [0 1]\n"));
+ Assert.assertTrue(test.contains(" /Width 200\n"));
+ Assert.assertTrue(test.contains(">> image\n"));
+ }
+
+ @Test
+ public void testFlateDecodeCommand() throws IOException {
+ Dimension2D dimension = new Dimension2DDouble(300, 500);
+ BufferedImage im = new BufferedImage(100, 75, BufferedImage.TYPE_INT_ARGB);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ImageFormGenerator formImageGen = new ImageFormGenerator("form", "title", dimension, im, false);
+ PSGenerator gen = new PSGenerator(out);
+ formImageGen.generate(gen);
+ String test = out.toString("UTF-8");
+ Assert.assertTrue(test.contains("/ASCII85Decode filter\n"));
+ //FlateDecode at DataSource so executed on page load rather than document load so viewer loads faster
+ Assert.assertTrue(test.contains("/DataSource form:Data /FlateDecode filter\n"));
+ }
+}