pherweg 2004/01/28 11:00:10 Modified: src/java/org/apache/fop/render/rtf PageAttributesConverter.java RTFHandler.java src/java/org/apache/fop/render/rtf/rtflib/rtfdoc RtfPage.java Log: improved support for margin-top and margin-bottom in fo:region-XXX Revision Changes Path 1.4 +89 -25 xml-fop/src/java/org/apache/fop/render/rtf/PageAttributesConverter.java Index: PageAttributesConverter.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/rtf/PageAttributesConverter.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- PageAttributesConverter.java 29 Dec 2003 23:28:47 -0000 1.3 +++ PageAttributesConverter.java 28 Jan 2004 19:00:09 -0000 1.4 @@ -56,6 +56,8 @@ //FOP import org.apache.fop.apps.FOPException; import org.apache.fop.fo.Constants; +import org.apache.fop.fo.pagination.Region; +import org.apache.fop.fo.pagination.SimplePageMaster; import org.apache.fop.fo.Property; import org.apache.fop.fo.PropertyList; import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfAttributes; @@ -72,48 +74,110 @@ private static Logger log = new ConsoleLogger(); /** convert xsl:fo attributes to RTF text attributes */ - static RtfAttributes convertPageAttributes(PropertyList props, PropertyList defProps) { - RtfAttributes attrib = null; - + static RtfAttributes convertPageAttributes(SimplePageMaster pagemaster) { + RtfAttributes attrib = new RtfAttributes(); + try { - Property p; - - if (defProps != null) { - attrib = convertPageAttributes(defProps, null); - } else { - attrib = new RtfAttributes(); - } - + FoUnitsConverter converter = FoUnitsConverter.getInstance(); + + float fPageTop = 0; + float fPageBottom = 0; + PropertyList props = null; + Property p = null; + Float f = null; + + Region before = pagemaster.getRegion("before"); + Region body = pagemaster.getRegion("body"); + Region after = pagemaster.getRegion("after"); + + //page attributes + props = pagemaster.propertyList; + if ((p = props.get(Constants.PR_PAGE_WIDTH)) != null) { - Float f = new Float(p.getLength().getValue() / 1000f); + f = new Float(p.getLength().getValue() / 1000f); attrib.set(RtfPage.PAGE_WIDTH, - (int)FoUnitsConverter.getInstance().convertToTwips(f.toString() + "pt")); + (int)converter.convertToTwips(f.toString() + "pt")); } + if ((p = props.get(Constants.PR_PAGE_HEIGHT)) != null) { - Float f = new Float(p.getLength().getValue() / 1000f); + f = new Float(p.getLength().getValue() / 1000f); attrib.set(RtfPage.PAGE_HEIGHT, - (int)FoUnitsConverter.getInstance().convertToTwips(f.toString() + "pt")); + (int)converter.convertToTwips(f.toString() + "pt")); } + if ((p = props.get(Constants.PR_MARGIN_TOP)) != null) { - Float f = new Float(p.getLength().getValue() / 1000f); - attrib.set(RtfPage.MARGIN_TOP, - (int)FoUnitsConverter.getInstance().convertToTwips(f.toString() + "pt")); + fPageTop = p.getLength().getValue() / 1000f; } + if ((p = props.get(Constants.PR_MARGIN_BOTTOM)) != null) { - Float f = new Float(p.getLength().getValue() / 1000f); - attrib.set(RtfPage.MARGIN_BOTTOM, - (int)FoUnitsConverter.getInstance().convertToTwips(f.toString() + "pt")); + fPageBottom = p.getLength().getValue() / 1000f; } + if ((p = props.get(Constants.PR_MARGIN_LEFT)) != null) { - Float f = new Float(p.getLength().getValue() / 1000f); + f = new Float(p.getLength().getValue() / 1000f); attrib.set(RtfPage.MARGIN_LEFT, - (int)FoUnitsConverter.getInstance().convertToTwips(f.toString() + "pt")); + (int)converter.convertToTwips(f.toString() + "pt")); } if ((p = props.get(Constants.PR_MARGIN_RIGHT)) != null) { - Float f = new Float(p.getLength().getValue() / 1000f); + f = new Float(p.getLength().getValue() / 1000f); attrib.set(RtfPage.MARGIN_RIGHT, - (int)FoUnitsConverter.getInstance().convertToTwips(f.toString() + "pt")); + (int)converter.convertToTwips(f.toString() + "pt")); } + + //region-body attributes + float fBodyTop = fPageTop; + float fBodyBottom = fPageBottom; + + if (body != null) { + props = body.propertyList; + + if ((p = props.get(Constants.PR_MARGIN_TOP)) != null) { + fBodyTop += p.getLength().getValue() / 1000f; + } + + if ((p = props.get(Constants.PR_MARGIN_BOTTOM)) != null) { + fBodyBottom += p.getLength().getValue() / 1000f; + } + } + + f = new Float(fBodyTop); + attrib.set(RtfPage.MARGIN_TOP, + (int)converter.convertToTwips(f.toString() + "pt")); + + f = new Float(fBodyBottom); + attrib.set(RtfPage.MARGIN_BOTTOM, + (int)converter.convertToTwips(f.toString() + "pt")); + + //region-before attributes + float fBeforeTop = fPageTop; + + if (before != null) { + props = before.propertyList; + + if ((p = props.get(Constants.PR_MARGIN_TOP)) != null) { + fBeforeTop += p.getLength().getValue() / 1000f; + } + } + + f = new Float(fBeforeTop); + attrib.set(RtfPage.HEADERY, + (int)converter.convertToTwips(f.toString() + "pt")); + + //region-after attributes + float fAfterBottom = fPageBottom; + + if (after != null) { + props = after.propertyList; + + if ((p = props.get(Constants.PR_MARGIN_BOTTOM)) != null) { + fAfterBottom += p.getLength().getValue() / 1000f; + } + } + + f = new Float(fAfterBottom); + attrib.set(RtfPage.FOOTERY, + (int)converter.convertToTwips(f.toString() + "pt")); + } catch (FOPException e) { log.error("Exception in convertPageAttributes: " + e.getMessage() + "- page attributes ignored"); 1.16 +2 -2 xml-fop/src/java/org/apache/fop/render/rtf/RTFHandler.java Index: RTFHandler.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/rtf/RTFHandler.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- RTFHandler.java 27 Jan 2004 16:51:29 -0000 1.15 +++ RTFHandler.java 28 Jan 2004 19:00:09 -0000 1.16 @@ -216,7 +216,7 @@ if (pagemaster != null) { sect.getRtfAttributes().set( PageAttributesConverter.convertPageAttributes( - pagemaster.propertyList, null)); + pagemaster)); } } 1.2 +7 -2 xml-fop/src/java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfPage.java Index: RtfPage.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfPage.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- RtfPage.java 4 Nov 2003 23:59:11 -0000 1.1 +++ RtfPage.java 28 Jan 2004 19:00:09 -0000 1.2 @@ -84,11 +84,16 @@ public static final String MARGIN_LEFT = "margl"; /** constant for right margin */ public static final String MARGIN_RIGHT = "margr"; + + /** constant for header position */ + public static final String HEADERY = "headery"; + /** constant for footer position */ + public static final String FOOTERY = "footery"; /** String array of RtfPage attributes */ public static final String[] PAGE_ATTR = new String[]{ PAGE_WIDTH, PAGE_HEIGHT, MARGIN_TOP, MARGIN_BOTTOM, - MARGIN_LEFT, MARGIN_RIGHT + MARGIN_LEFT, MARGIN_RIGHT, HEADERY, FOOTERY }; /** RtfPage creates new page attributes with the parent container, the writer
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]