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]

Reply via email to