From de3f6e8dd080ab546e4b3b15119509228dc03a2b Mon Sep 17 00:00:00 2001 From: Chris Bowditch Date: Mon, 12 Oct 2009 07:26:03 +0000 Subject: add support for positioning Page Overlay in AFP Renderer/Painter git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@824249 13f79535-47bb-0310-9956-ffa450edef68 --- .../render/afp/extensions/AFPElementMapping.java | 2 +- .../fop/render/afp/extensions/AFPPageOverlay.java | 107 +++++++++++++++++++++ .../afp/extensions/AFPPageOverlayElement.java | 97 +++++++++++++++++++ 3 files changed, 205 insertions(+), 1 deletion(-) create mode 100644 src/java/org/apache/fop/render/afp/extensions/AFPPageOverlay.java create mode 100644 src/java/org/apache/fop/render/afp/extensions/AFPPageOverlayElement.java (limited to 'src/java/org/apache/fop/render/afp/extensions') diff --git a/src/java/org/apache/fop/render/afp/extensions/AFPElementMapping.java b/src/java/org/apache/fop/render/afp/extensions/AFPElementMapping.java index cb5478340..d77e21db2 100755 --- a/src/java/org/apache/fop/render/afp/extensions/AFPElementMapping.java +++ b/src/java/org/apache/fop/render/afp/extensions/AFPElementMapping.java @@ -97,7 +97,7 @@ public class AFPElementMapping extends ElementMapping { static class AFPIncludePageOverlayMaker extends ElementMapping.Maker { public FONode make(FONode parent) { - return new AFPPageSetupElement(parent, INCLUDE_PAGE_OVERLAY); + return new AFPPageOverlayElement(parent, INCLUDE_PAGE_OVERLAY); } } diff --git a/src/java/org/apache/fop/render/afp/extensions/AFPPageOverlay.java b/src/java/org/apache/fop/render/afp/extensions/AFPPageOverlay.java new file mode 100644 index 000000000..68a626aae --- /dev/null +++ b/src/java/org/apache/fop/render/afp/extensions/AFPPageOverlay.java @@ -0,0 +1,107 @@ +/* + * 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: AFPIncludeFormMap.java 798207 2009-07-27 16:33:01Z jeremias $ */ + +package org.apache.fop.render.afp.extensions; + +import java.net.URI; + +import org.xml.sax.ContentHandler; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.AttributesImpl; + +import org.apache.fop.fo.extensions.ExtensionAttachment; + +/** + * This extension allows to include an AFP Page Overlay resource. It is implemented as an extension + * attachment ({@link ExtensionAttachment}). + */ +public class AFPPageOverlay extends AFPExtensionAttachment { + + private static final long serialVersionUID = 8548056652642588919L; + + /** X coordinate attribute */ + protected static final String ATT_X = "X"; + /** X coordinate attribute */ + protected static final String ATT_Y = "Y"; + + /** + * The x coordinate + */ + private int x = 0; + + /** + * The y coordinate + */ + private int y = 0; + + /** + * Default constructor. + */ + public AFPPageOverlay() { + super(AFPElementMapping.INCLUDE_PAGE_OVERLAY); + } + + /** + * returns X coordinate + * @return x integer + */ + public int getX() { + return x; + } + + /** + * Sets the X coordinate + * @param x The integer to be set. + */ + public void setX(int x) { + this.x = x; + } + + /** + * returns Y coordinate + * @return y integer + */ + public int getY() { + return y; + } + + /** + * Sets the Y coordinate + * @param y The integer to be set. + */ + public void setY(int y) { + this.y = y; + } + + /** {@inheritDoc} */ + public void toSAX(ContentHandler handler) throws SAXException { + AttributesImpl atts = new AttributesImpl(); + if (name != null && name.length() > 0) { + atts.addAttribute(null, ATT_NAME, ATT_NAME, "CDATA", name); + } + handler.startElement(CATEGORY, elementName, elementName, atts); + handler.endElement(CATEGORY, elementName, elementName); + } + + /** {@inheritDoc} */ + public String toString() { + return getClass().getName() + "(element-name=" + getElementName() + + " name=" + getName() + " x=" + getX() + " y=" + getY() + ")"; + } +} diff --git a/src/java/org/apache/fop/render/afp/extensions/AFPPageOverlayElement.java b/src/java/org/apache/fop/render/afp/extensions/AFPPageOverlayElement.java new file mode 100644 index 000000000..c025f4972 --- /dev/null +++ b/src/java/org/apache/fop/render/afp/extensions/AFPPageOverlayElement.java @@ -0,0 +1,97 @@ +/* + * 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: AFPPageSetupElement.java 798207 2009-07-27 16:33:01Z jeremias $ */ + +package org.apache.fop.render.afp.extensions; + +import org.xml.sax.Attributes; +import org.xml.sax.Locator; + +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.Constants; +import org.apache.fop.fo.FONode; +import org.apache.fop.fo.PropertyList; +import org.apache.fop.fo.extensions.ExtensionAttachment; +import org.apache.fop.afp.AFPPaintingState; +import org.apache.fop.afp.AFPUnitConverter; +import org.apache.xmlgraphics.util.UnitConv; + +/** + * This class extends the org.apache.fop.render.afp.extensions.AbstractAFPExtensionObject class. + * This object will be used to map the page overlay object in AFPElementMapping. + *

+ */ +public class AFPPageOverlayElement extends AbstractAFPExtensionObject { + + private static final String ATT_X = "x"; + private static final String ATT_Y = "y"; + + /** + * Constructs an AFP object (called by Maker). + * + * @param parent the parent formatting object + * @param name the name of the afp element + */ + public AFPPageOverlayElement(FONode parent, String name) { + super(parent, name); + } + + private AFPPageOverlay getPageSetupAttachment() { + return (AFPPageOverlay)getExtensionAttachment(); + } + + /** {@inheritDoc} */ + protected void startOfNode() throws FOPException { + super.startOfNode(); + if (AFPElementMapping.INCLUDE_PAGE_OVERLAY.equals(getLocalName())) { + if (parent.getNameId() != Constants.FO_SIMPLE_PAGE_MASTER + && parent.getNameId() != Constants.FO_PAGE_SEQUENCE) { + invalidChildError(getLocator(), parent.getName(), getNamespaceURI(), getName(), + "rule.childOfPageSequenceOrSPM"); + } + } else { + if (parent.getNameId() != Constants.FO_SIMPLE_PAGE_MASTER) { + invalidChildError(getLocator(), parent.getName(), getNamespaceURI(), getName(), + "rule.childOfSPM"); + } + } + } + + + /** {@inheritDoc} */ + public void processNode(String elementName, Locator locator, + Attributes attlist, PropertyList propertyList) + throws FOPException { + super.processNode(elementName, locator, attlist, propertyList); + AFPPageOverlay pageOverlay = getPageSetupAttachment(); + if (AFPElementMapping.INCLUDE_PAGE_OVERLAY.equals(elementName)) { + // convert user specific units to mpts and set the coordinates for the page overlay + AFPPaintingState paintingState = new AFPPaintingState(); + AFPUnitConverter unitConverter = new AFPUnitConverter(paintingState); + int x = (int)unitConverter.mpt2units(UnitConv.convert(attlist.getValue(ATT_X))); + int y = (int)unitConverter.mpt2units(UnitConv.convert(attlist.getValue(ATT_Y))); + pageOverlay.setX(x); + pageOverlay.setY(y); + } + } + + /** {@inheritDoc} */ + protected ExtensionAttachment instantiateExtensionAttachment() { + return new AFPPageOverlay(); + } +} -- cgit v1.2.3