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 je...@apache.org on 2007/12/13 13:17:58 UTC
svn commit: r603902 - in
/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java:
META-INF/services/ org/apache/fop/render/pdf/
Author: jeremias
Date: Thu Dec 13 04:17:56 2007
New Revision: 603902
URL: http://svn.apache.org/viewvc?rev=603902&view=rev
Log:
Factored out all image handling code in the PDFRenderer into PDFImageHandler classes. The interface was introduced to handle PDF-in-PDF images.
The PDFImageHandler interface changes in a backwards-incompatible way but since the PDF-in-PDF plug-in probably has the only implementation, that's not very problematic. I'll release a new version as soon as the image stuff is merged back into Trunk.
Added:
xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/META-INF/services/org.apache.fop.render.pdf.PDFImageHandler
xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java (with props)
xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java (with props)
xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java (with props)
xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerXML.java (with props)
Modified:
xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandler.java (contents, props changed)
xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRegistry.java (contents, props changed)
xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRenderer.java
xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java (contents, props changed)
Added: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/META-INF/services/org.apache.fop.render.pdf.PDFImageHandler
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/META-INF/services/org.apache.fop.render.pdf.PDFImageHandler?rev=603902&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/META-INF/services/org.apache.fop.render.pdf.PDFImageHandler (added)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/META-INF/services/org.apache.fop.render.pdf.PDFImageHandler Thu Dec 13 04:17:56 2007
@@ -0,0 +1,4 @@
+org.apache.fop.render.pdf.PDFImageHandlerRawJPEG
+org.apache.fop.render.pdf.PDFImageHandlerGraphics2D
+org.apache.fop.render.pdf.PDFImageHandlerRenderedImage
+org.apache.fop.render.pdf.PDFImageHandlerXML
\ No newline at end of file
Modified: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandler.java?rev=603902&r1=603901&r2=603902&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandler.java (original)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandler.java Thu Dec 13 04:17:56 2007
@@ -19,11 +19,14 @@
package org.apache.fop.render.pdf;
+import java.awt.Point;
+import java.awt.Rectangle;
import java.io.IOException;
-import org.apache.fop.image.FopImage;
-import org.apache.fop.pdf.PDFDocument;
+import org.apache.fop.image2.Image;
+import org.apache.fop.image2.ImageFlavor;
import org.apache.fop.pdf.PDFXObject;
+import org.apache.fop.render.RendererContext;
/**
* This interface is used for handling all sorts of image type for PDF output.
@@ -31,20 +34,38 @@
public interface PDFImageHandler {
/**
- * Returns the MIME type supported by this instance.
- * @return the MIME type
+ * Returns the priority for this image handler. A lower value means higher priority. This
+ * information is used to build the ordered/prioritized list of supported ImageFlavors for
+ * the PDF renderer. The built-in handlers use priorities between 100 and 999.
+ * @return a positive integer (>0) indicating the priority
*/
- String getSupportedMimeType();
+ int getPriority();
/**
- * Generates the PDF objects for the given FopImage instance and returns
- * the resulting XObject.
+ * Returns the {@link ImageFlavor}s supported by this instance
+ * @return the supported image flavors
+ */
+ ImageFlavor[] getSupportedImageFlavors();
+
+ /**
+ * Returns the {@link Image} subclass supported by this instance.
+ * @return the Image type
+ */
+ Class getSupportedImageClass();
+
+ /**
+ * Generates the PDF objects for the given {@link Image} instance. If the handler generates
+ * an XObject, it shall return it or otherwise return null. A generated XObject shall be
+ * placed in the current viewport according to the two parameters "origin" and "pos".
+ * @param context the PDF renderer context
* @param image the image to be handled
- * @param uri the URI of the image
- * @param pdfDoc the target PDF document
- * @return the generated XObject
+ * @param origin the current position in the current viewport (in millipoints)
+ * @param pos the position and scaling of the image relative to the origin point
+ * (in millipoints)
+ * @return the generated XObject or null if no XObject was generated
* @throws IOException if an I/O error occurs
*/
- PDFXObject generateImage(FopImage image, String uri, PDFDocument pdfDoc) throws IOException;
+ PDFXObject generateImage(RendererContext context, Image image,
+ Point origin, Rectangle pos) throws IOException;
}
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandler.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java?rev=603902&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java (added)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java Thu Dec 13 04:17:56 2007
@@ -0,0 +1,67 @@
+/*
+ * 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.fop.render.pdf;
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.io.IOException;
+
+import org.apache.fop.image2.Image;
+import org.apache.fop.image2.ImageFlavor;
+import org.apache.fop.image2.impl.ImageGraphics2D;
+import org.apache.fop.pdf.PDFXObject;
+import org.apache.fop.render.RendererContext;
+
+/**
+ * PDFImageHandler implementation which handles Graphics2D images.
+ */
+public class PDFImageHandlerGraphics2D implements PDFImageHandler {
+
+ private static final ImageFlavor[] FLAVORS = new ImageFlavor[] {
+ ImageFlavor.GRAPHICS2D,
+ };
+
+ /** {@inheritDoc} */
+ public PDFXObject generateImage(RendererContext context, Image image,
+ Point origin, Rectangle pos)
+ throws IOException {
+ PDFRenderer renderer = (PDFRenderer)context.getRenderer();
+ ImageGraphics2D imageG2D = (ImageGraphics2D)image;
+ renderer.getGraphics2DAdapter().paintImage(imageG2D.getGraphics2DImagePainter(),
+ context, origin.x + pos.x, origin.y + pos.y, pos.width, pos.height);
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ public int getPriority() {
+ return 200;
+ }
+
+ /** {@inheritDoc} */
+ public Class getSupportedImageClass() {
+ return ImageGraphics2D.class;
+ }
+
+ /** {@inheritDoc} */
+ public ImageFlavor[] getSupportedImageFlavors() {
+ return FLAVORS;
+ }
+
+}
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerGraphics2D.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java?rev=603902&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java (added)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java Thu Dec 13 04:17:56 2007
@@ -0,0 +1,82 @@
+/*
+ * 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.fop.render.pdf;
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.io.IOException;
+
+import org.apache.fop.image2.Image;
+import org.apache.fop.image2.ImageFlavor;
+import org.apache.fop.image2.impl.ImageRawJPEG;
+import org.apache.fop.pdf.PDFDocument;
+import org.apache.fop.pdf.PDFImage;
+import org.apache.fop.pdf.PDFResourceContext;
+import org.apache.fop.pdf.PDFXObject;
+import org.apache.fop.render.RendererContext;
+
+/**
+ * PDFImageHandler implementation which handles Graphics2D images.
+ */
+public class PDFImageHandlerRawJPEG implements PDFImageHandler {
+
+ private static final ImageFlavor[] FLAVORS = new ImageFlavor[] {
+ ImageFlavor.RAW_JPEG,
+ };
+
+ /** {@inheritDoc} */
+ public PDFXObject generateImage(RendererContext context, Image image,
+ Point origin, Rectangle pos)
+ throws IOException {
+ PDFRenderer renderer = (PDFRenderer)context.getRenderer();
+ ImageRawJPEG jpeg = (ImageRawJPEG)image;
+ PDFDocument pdfDoc = (PDFDocument)context.getProperty(
+ PDFRendererContextConstants.PDF_DOCUMENT);
+ PDFResourceContext resContext = (PDFResourceContext)context.getProperty(
+ PDFRendererContextConstants.PDF_CONTEXT);
+
+ PDFImage pdfimage = new ImageRawJPEGAdapter(jpeg, image.getInfo().getOriginalURI());
+ PDFXObject xobj = pdfDoc.addImage(resContext, pdfimage);
+
+ float x = (float)pos.getX() / 1000f;
+ float y = (float)pos.getY() / 1000f;
+ float w = (float)pos.getWidth() / 1000f;
+ float h = (float)pos.getHeight() / 1000f;
+ renderer.placeImage(x, y, w, h, xobj);
+
+ return xobj;
+ }
+
+ /** {@inheritDoc} */
+ public int getPriority() {
+ return 100;
+ }
+
+ /** {@inheritDoc} */
+ public Class getSupportedImageClass() {
+ return ImageRawJPEG.class;
+ }
+
+ /** {@inheritDoc} */
+ public ImageFlavor[] getSupportedImageFlavors() {
+ return FLAVORS;
+ }
+
+}
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRegistry.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRegistry.java?rev=603902&r1=603901&r2=603902&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRegistry.java (original)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRegistry.java Thu Dec 13 04:17:56 2007
@@ -19,13 +19,19 @@
package org.apache.fop.render.pdf;
+import java.util.Comparator;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
+import java.util.SortedSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.xmlgraphics.util.Service;
+import org.apache.fop.image2.Image;
+import org.apache.fop.image2.ImageFlavor;
+
/**
* This class holds references to various image handlers used by the PDF renderer. It also
* supports automatic discovery of additional handlers available through
@@ -36,9 +42,22 @@
/** the logger */
private static Log log = LogFactory.getLog(PDFImageHandlerRegistry.class);
+ private static final Comparator HANDLER_COMPARATOR = new Comparator() {
+ public int compare(Object o1, Object o2) {
+ PDFImageHandler h1 = (PDFImageHandler)o1;
+ PDFImageHandler h2 = (PDFImageHandler)o2;
+ return h1.getPriority() - h2.getPriority();
+ }
+ };
+
/** Map containing PDF image handlers for various MIME types */
private Map handlers = new java.util.HashMap();
+ /** Sorted Set of registered handlers */
+ private ImageFlavor[] supportedFlavors = new ImageFlavor[0];
+ private int handlerRegistrations;
+ private int lastSync;
+
/**
* Default constructor.
*/
@@ -75,24 +94,66 @@
* Add an image handler. The handler itself is inspected to find out what it supports.
* @param handler the PDFImageHandler instance
*/
- public void addHandler(PDFImageHandler handler) {
- String mime = handler.getSupportedMimeType();
- handlers.put(mime, handler);
+ public synchronized void addHandler(PDFImageHandler handler) {
+ Class imageClass = handler.getSupportedImageClass();
+ this.handlers.put(imageClass, handler);
+ this.handlerRegistrations++;
}
/**
* Returns an PDFImageHandler which handles an specific image type given the MIME type
* of the image.
- * @param mime the requested MIME type
+ * @param img the Image to be handled
* @return the PDFImageHandler responsible for handling the image or null if none is available
*/
- public PDFImageHandler getHandler(String mime) {
- PDFImageHandler handler;
+ public PDFImageHandler getHandler(Image img) {
+ return getHandler(img.getClass());
+ }
- handler = (PDFImageHandler)handlers.get(mime);
+ /**
+ * Returns an PDFImageHandler which handles an specific image type given the MIME type
+ * of the image.
+ * @param imageClass the Image subclass for which to get a handler
+ * @return the PDFImageHandler responsible for handling the image or null if none is available
+ */
+ protected synchronized PDFImageHandler getHandler(Class imageClass) {
+ PDFImageHandler handler = null;
+ Class cl = imageClass;
+ while (cl != null) {
+ handler = (PDFImageHandler)handlers.get(cl);
+ if (handler != null) {
+ break;
+ }
+ cl = cl.getSuperclass();
+ }
return handler;
}
+ /**
+ * Returns the ordered array of supported image flavors.
+ * @return the array of image flavors
+ */
+ public synchronized ImageFlavor[] getSupportedFlavors() {
+ if (this.lastSync != this.handlerRegistrations) {
+ //Sort...
+ SortedSet sorted = new java.util.TreeSet(HANDLER_COMPARATOR);
+ sorted.addAll(this.handlers.values());
+
+ //...and extract all ImageFlavors into a single array
+ List flavors = new java.util.ArrayList();
+ Iterator iter = sorted.iterator();
+ while (iter.hasNext()) {
+ ImageFlavor[] f = ((PDFImageHandler)iter.next()).getSupportedImageFlavors();
+ for (int i = 0; i < f.length; i++) {
+ flavors.add(f[i]);
+ }
+ }
+ this.supportedFlavors = (ImageFlavor[])flavors.toArray(new ImageFlavor[flavors.size()]);
+ this.lastSync = this.handlerRegistrations;
+ }
+ return this.supportedFlavors;
+ }
+
/**
* Discovers PDFImageHandler implementations through the classpath and dynamically
* registers them.
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRegistry.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java?rev=603902&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java (added)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java Thu Dec 13 04:17:56 2007
@@ -0,0 +1,83 @@
+/*
+ * 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.fop.render.pdf;
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.io.IOException;
+
+import org.apache.fop.image2.Image;
+import org.apache.fop.image2.ImageFlavor;
+import org.apache.fop.image2.impl.ImageRendered;
+import org.apache.fop.pdf.PDFDocument;
+import org.apache.fop.pdf.PDFImage;
+import org.apache.fop.pdf.PDFResourceContext;
+import org.apache.fop.pdf.PDFXObject;
+import org.apache.fop.render.RendererContext;
+
+/**
+ * PDFImageHandler implementation which handles RenderedImage instances.
+ */
+public class PDFImageHandlerRenderedImage implements PDFImageHandler {
+
+ private static final ImageFlavor[] FLAVORS = new ImageFlavor[] {
+ ImageFlavor.BUFFERED_IMAGE,
+ ImageFlavor.RENDERED_IMAGE
+ };
+
+ /** {@inheritDoc} */
+ public PDFXObject generateImage(RendererContext context, Image image,
+ Point origin, Rectangle pos)
+ throws IOException {
+ PDFRenderer renderer = (PDFRenderer)context.getRenderer();
+ ImageRendered imageRend = (ImageRendered)image;
+ PDFDocument pdfDoc = (PDFDocument)context.getProperty(
+ PDFRendererContextConstants.PDF_DOCUMENT);
+ PDFResourceContext resContext = (PDFResourceContext)context.getProperty(
+ PDFRendererContextConstants.PDF_CONTEXT);
+
+ PDFImage pdfimage = new ImageRenderedAdapter(imageRend, image.getInfo().getOriginalURI());
+ PDFXObject xobj = pdfDoc.addImage(resContext, pdfimage);
+
+ float x = (float)pos.getX() / 1000f;
+ float y = (float)pos.getY() / 1000f;
+ float w = (float)pos.getWidth() / 1000f;
+ float h = (float)pos.getHeight() / 1000f;
+ renderer.placeImage(x, y, w, h, xobj);
+
+ return xobj;
+ }
+
+ /** {@inheritDoc} */
+ public int getPriority() {
+ return 300;
+ }
+
+ /** {@inheritDoc} */
+ public Class getSupportedImageClass() {
+ return ImageRendered.class;
+ }
+
+ /** {@inheritDoc} */
+ public ImageFlavor[] getSupportedImageFlavors() {
+ return FLAVORS;
+ }
+
+}
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerXML.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerXML.java?rev=603902&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerXML.java (added)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerXML.java Thu Dec 13 04:17:56 2007
@@ -0,0 +1,73 @@
+/*
+ * 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.fop.render.pdf;
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.util.Map;
+
+import org.w3c.dom.Document;
+
+import org.apache.fop.image2.Image;
+import org.apache.fop.image2.ImageFlavor;
+import org.apache.fop.image2.impl.ImageXMLDOM;
+import org.apache.fop.pdf.PDFXObject;
+import org.apache.fop.render.RendererContext;
+
+/**
+ * PDFImageHandler implementation which handles XML-based images.
+ */
+public class PDFImageHandlerXML implements PDFImageHandler {
+
+ private static final ImageFlavor[] FLAVORS = new ImageFlavor[] {
+ ImageFlavor.XML_DOM,
+ };
+
+ /** {@inheritDoc} */
+ public PDFXObject generateImage(RendererContext context, Image image,
+ Point origin, Rectangle pos)
+ throws IOException {
+ PDFRenderer renderer = (PDFRenderer)context.getRenderer();
+ ImageXMLDOM imgXML = (ImageXMLDOM)image;
+ Document doc = imgXML.getDocument();
+ String ns = imgXML.getRootNamespace();
+ Map foreignAttributes = (Map)context.getProperty(
+ PDFRendererContextConstants.FOREIGN_ATTRIBUTES);
+ renderer.renderDocument(doc, ns, pos, foreignAttributes);
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ public int getPriority() {
+ return 400;
+ }
+
+ /** {@inheritDoc} */
+ public Class getSupportedImageClass() {
+ return ImageXMLDOM.class;
+ }
+
+ /** {@inheritDoc} */
+ public ImageFlavor[] getSupportedImageFlavors() {
+ return FLAVORS;
+ }
+
+}
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerXML.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFImageHandlerXML.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRenderer.java?rev=603902&r1=603901&r2=603902&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRenderer.java (original)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRenderer.java Thu Dec 13 04:17:56 2007
@@ -21,6 +21,8 @@
// Java
import java.awt.Color;
+import java.awt.Point;
+import java.awt.Rectangle;
import java.awt.color.ColorSpace;
import java.awt.color.ICC_Profile;
import java.awt.geom.AffineTransform;
@@ -37,8 +39,6 @@
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
-import org.w3c.dom.Document;
-
import org.apache.commons.io.IOUtils;
import org.apache.xmlgraphics.xmp.Metadata;
import org.apache.xmlgraphics.xmp.schemas.XMPBasicAdapter;
@@ -73,15 +73,9 @@
import org.apache.fop.fonts.Font;
import org.apache.fop.fonts.Typeface;
import org.apache.fop.image2.ImageException;
-import org.apache.fop.image2.ImageFlavor;
import org.apache.fop.image2.ImageInfo;
import org.apache.fop.image2.ImageManager;
import org.apache.fop.image2.ImageSessionContext;
-import org.apache.fop.image2.impl.ImageGraphics2D;
-import org.apache.fop.image2.impl.ImageRawJPEG;
-import org.apache.fop.image2.impl.ImageRawStream;
-import org.apache.fop.image2.impl.ImageRendered;
-import org.apache.fop.image2.impl.ImageXMLDOM;
import org.apache.fop.image2.util.ImageUtil;
import org.apache.fop.pdf.PDFAMode;
import org.apache.fop.pdf.PDFAction;
@@ -96,7 +90,6 @@
import org.apache.fop.pdf.PDFGoTo;
import org.apache.fop.pdf.PDFICCBasedColorSpace;
import org.apache.fop.pdf.PDFICCStream;
-import org.apache.fop.pdf.PDFImage;
import org.apache.fop.pdf.PDFInfo;
import org.apache.fop.pdf.PDFLink;
import org.apache.fop.pdf.PDFMetadata;
@@ -1656,29 +1649,38 @@
public void renderImage(Image image, Rectangle2D pos) {
endTextObject();
String url = image.getURL();
- putImage(url, pos);
+ putImage(url, pos, image.getForeignAttributes());
}
/** {@inheritDoc} */
protected void drawImage(String url, Rectangle2D pos, Map foreignAttributes) {
endTextObject();
- putImage(url, pos);
+ putImage(url, pos, foreignAttributes);
}
- private final ImageFlavor[] supportedFlavors = new ImageFlavor[]
- {ImageFlavor.RAW_JPEG,
- //ImageUndecodedPNG.UNDECODED_PNG,
- ImageFlavor.GRAPHICS2D,
- ImageFlavor.BUFFERED_IMAGE,
- ImageFlavor.RENDERED_IMAGE,
- ImageFlavor.XML_DOM};
/**
* Adds a PDF XObject (a bitmap or form) to the PDF that will later be referenced.
* @param uri URL of the bitmap
* @param pos Position of the bitmap
+ * @deprecated Use {@link @putImage(String, Rectangle2D, Map)} instead.
*/
protected void putImage(String uri, Rectangle2D pos) {
- //TODO No foreign attributes here like for PSRenderer
+ putImage(uri, pos, null);
+ }
+
+ /**
+ * Adds a PDF XObject (a bitmap or form) to the PDF that will later be referenced.
+ * @param uri URL of the bitmap
+ * @param pos Position of the bitmap
+ * @param foreignAttributes foreign attributes associated with the image
+ */
+ protected void putImage(String uri, Rectangle2D pos, Map foreignAttributes) {
+ Rectangle posInt = new Rectangle(
+ (int)pos.getX(),
+ (int)pos.getY(),
+ (int)pos.getWidth(),
+ (int)pos.getHeight());
+
uri = URISpecification.getURL(uri);
PDFXObject xobject = pdfDoc.getXObject(uri);
if (xobject != null) {
@@ -1688,6 +1690,7 @@
(float)pos.getY() / 1000f, w, h, xobject);
return;
}
+ Point origin = new Point(currentIPPosition, currentBPPosition);
int x = currentIPPosition + (int)Math.round(pos.getX());
int y = currentBPPosition + (int)Math.round(pos.getY());
@@ -1696,54 +1699,33 @@
try {
ImageSessionContext sessionContext = getUserAgent().getImageSessionContext();
info = manager.getImageInfo(uri, sessionContext);
+
+
+
Map hints = ImageUtil.getDefaultHints(sessionContext);
int width = (int)pos.getWidth();
int height = (int)pos.getHeight();
org.apache.fop.image2.Image img = manager.getImage(
- info, supportedFlavors, hints, sessionContext);
- if (img instanceof ImageGraphics2D) {
- ImageGraphics2D imageG2D = (ImageGraphics2D)img;
- RendererContext context = createRendererContext(
- x, y, width, height, null);
- getGraphics2DAdapter().paintImage(imageG2D.getGraphics2DImagePainter(),
- context, x, y, width, height);
- } else if (img instanceof ImageRendered) {
- ImageRendered imgRend = (ImageRendered)img;
- PDFImage pdfimage = new ImageRenderedAdapter(imgRend, uri);
- PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
-
- float w = (float)pos.getWidth() / 1000f;
- float h = (float)pos.getHeight() / 1000f;
- placeImage((float) pos.getX() / 1000,
- (float) pos.getY() / 1000, w, h, xobj);
- } else if (img instanceof ImageXMLDOM) {
- ImageXMLDOM imgXML = (ImageXMLDOM)img;
- Document doc = imgXML.getDocument();
- String ns = imgXML.getRootNamespace();
- renderDocument(doc, ns, pos, null);
- } else if (img instanceof ImageRawStream) {
- final ImageRawStream raw = (ImageRawStream)img;
- /*if (raw instanceof ImageUndecodedPNG) {
- ImageUndecodedPNG png = (ImageUndecodedPNG)raw;
- PDFImage pdfimage = new ImageUndecodedPNGAdapter(png, uri);
- PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
-
- float w = (float)pos.getWidth() / 1000f;
- float h = (float)pos.getHeight() / 1000f;
- placeImage((float) pos.getX() / 1000,
- (float) pos.getY() / 1000, w, h, xobj);
- } else*/ if (raw instanceof ImageRawJPEG) {
- ImageRawJPEG jpeg = (ImageRawJPEG)raw;
- PDFImage pdfimage = new ImageRawJPEGAdapter(jpeg, uri);
- PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
-
- float w = (float)pos.getWidth() / 1000f;
- float h = (float)pos.getHeight() / 1000f;
- placeImage((float) pos.getX() / 1000,
- (float) pos.getY() / 1000, w, h, xobj);
- } else {
- throw new UnsupportedOperationException("Unsupported raw image: " + info);
+ info, imageHandlerRegistry.getSupportedFlavors(), hints, sessionContext);
+
+ //First check for a dynamically registered handler
+ PDFImageHandler handler = imageHandlerRegistry.getHandler(img.getClass());
+ if (handler != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Using PDFImageHandler: " + handler.getClass().getName());
+ }
+ try {
+ RendererContext context = createRendererContext(
+ x, y, width, height, foreignAttributes);
+ handler.generateImage(context, img, origin, posInt);
+ } catch (IOException ioe) {
+ log.error("I/O error while handling image: " + info, ioe);
+ return;
}
+ } else {
+ throw new UnsupportedOperationException(
+ "No PDFImageHandler available for image: "
+ + info + " (" + img.getClass().getName() + ")");
}
} catch (ImageException ie) {
log.error("Error while processing image: "
@@ -1752,81 +1734,6 @@
log.error("I/O error while processing image: "
+ (info != null ? info.toString() : uri), ioe);
}
-
- /*
- //ImageFactory fact = userAgent.getFactory().getImageFactory();
- //FopImage fopimage = fact.getImage(url, userAgent);
- //if (fopimage == null) {
- // return;
- //}
- //if (!fopimage.load(FopImage.DIMENSIONS)) {
- // return;
- //}
- String mime = fopimage.getMimeType();
-
- //First check for a dynamically registered handler
- PDFImageHandler handler = imageHandlerRegistry.getHandler(mime);
- if (handler != null) {
- PDFXObject xobj;
- try {
- xobj = handler.generateImage(fopimage, url, pdfDoc);
- } catch (IOException ioe) {
- log.error("I/O error while handling " + mime + " image", ioe);
- return;
- }
- fact.releaseImage(url, userAgent);
-
- float w = (float)pos.getWidth() / 1000f;
- float h = (float)pos.getHeight() / 1000f;
- placeImage((float) pos.getX() / 1000,
- (float) pos.getY() / 1000, w, h, xobj);
- } else if ("text/xml".equals(mime)) {
- if (!fopimage.load(FopImage.ORIGINAL_DATA)) {
- return;
- }
- Document doc = ((XMLImage) fopimage).getDocument();
- String ns = ((XMLImage) fopimage).getNameSpace();
-
- renderDocument(doc, ns, pos, null);
- } else if ("image/svg+xml".equals(mime)) {
- if (!fopimage.load(FopImage.ORIGINAL_DATA)) {
- return;
- }
- Document doc = ((XMLImage) fopimage).getDocument();
- String ns = ((XMLImage) fopimage).getNameSpace();
-
- renderDocument(doc, ns, pos, null);
- } else if ("image/eps".equals(mime)) {
- FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
- PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
- fact.releaseImage(url, userAgent);
-
- float w = (float)pos.getWidth() / 1000f;
- float h = (float)pos.getHeight() / 1000f;
- placeImage((float) pos.getX() / 1000,
- (float) pos.getY() / 1000, w, h, xobj);
- } else if ("image/jpeg".equals(mime) || "image/tiff".equals(mime)) {
- FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
- PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
- fact.releaseImage(url, userAgent);
-
- float w = (float)pos.getWidth() / 1000f;
- float h = (float)pos.getHeight() / 1000f;
- placeImage((float) pos.getX() / 1000,
- (float) pos.getY() / 1000, w, h, xobj);
- } else {
- if (!fopimage.load(FopImage.BITMAP)) {
- return;
- }
- FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
- PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
- fact.releaseImage(url, userAgent);
-
- float w = (float) pos.getWidth() / 1000f;
- float h = (float) pos.getHeight() / 1000f;
- placeImage((float) pos.getX() / 1000f,
- (float) pos.getY() / 1000f, w, h, xobj);
- }*/
// output new data
try {
@@ -1844,7 +1751,7 @@
* @param h height for image
* @param xobj the image XObject
*/
- protected void placeImage(float x, float y, float w, float h, PDFXObject xobj) {
+ public void placeImage(float x, float y, float w, float h, PDFXObject xobj) {
saveGraphicsState();
currentStream.add(format(w) + " 0 0 "
+ format(-h) + " "
@@ -1854,10 +1761,7 @@
restoreGraphicsState();
}
- /**
- * {@inheritDoc}
- * int, int, int, int, java.util.Map)
- */
+ /** {@inheritDoc} */
protected RendererContext createRendererContext(int x, int y, int width, int height,
Map foreignAttributes) {
RendererContext context = super.createRendererContext(
Modified: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java?rev=603902&r1=603901&r2=603902&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java (original)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java Thu Dec 13 04:17:56 2007
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-/* $Id: $ */
+/* $Id$ */
package org.apache.fop.render.pdf;
Propchange: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java
------------------------------------------------------------------------------
svn:keywords = Id
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org