]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
improved support for margin-top and margin-bottom in fo:region-XXX
authorPeter Herweg <pherweg@apache.org>
Wed, 28 Jan 2004 19:00:09 +0000 (19:00 +0000)
committerPeter Herweg <pherweg@apache.org>
Wed, 28 Jan 2004 19:00:09 +0000 (19:00 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197283 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/render/rtf/PageAttributesConverter.java
src/java/org/apache/fop/render/rtf/RTFHandler.java
src/java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfPage.java

index f3030911b0b42556a013481eb217b0c2d93c54a8..994aacfaa0206c029a033060e289a51ad2128695 100644 (file)
@@ -56,6 +56,8 @@ import org.apache.avalon.framework.logger.ConsoleLogger;
 //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 @@ class PageAttributesConverter {
     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");
index 5f2f731149daeb43aae19e79ebdddd5786f8ddb8..72250b65013152abda7219ca31e5aa5ce4f020bd 100644 (file)
@@ -216,7 +216,7 @@ public class RTFHandler extends FOInputHandler {
                 if (pagemaster != null) {
                     sect.getRtfAttributes().set(
                         PageAttributesConverter.convertPageAttributes(
-                            pagemaster.propertyList, null));
+                                pagemaster));
                 }
             }
 
index 1d2a3a325ccb94b1a739d5eecb110967f45059f9..55f5a042a1bd1097caf6ef88fdb1f44e78036481 100644 (file)
@@ -84,11 +84,16 @@ extends RtfContainer {
     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