|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- <HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>FOP Mechanics</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/architecture-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
- <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
- <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
- <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
- <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
- <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
- <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
- <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
- <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
- <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
- <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
- <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
- <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
- <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
-
- <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
- <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
- <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
- <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
-
- <IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
-
- <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Introduction</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
-
- <P>
- The overall process is controlled by <B>org.apache.fop.apps.Driver</B>. In
- this class, a typical sequence is:</P>
-
- <P><CODE><FONT face="courier, monospaced">Driver driver = new Driver();</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">driver.setWriter(new PrintWriter(new FileWriter(args[1])));</FONT></CODE></P>
- <P></P>
- <P><CODE><FONT face="courier, monospaced">driver.buildFOTree(parser, fileInputSource(args[0]));</FONT></CODE></P>
- <P></P>
- <P><CODE><FONT face="courier, monospaced">driver.format();</FONT></CODE></P>
- <P></P>
- <P><CODE><FONT face="courier, monospaced">driver.render();</FONT></CODE></P>
- </FONT></TD></TR></TABLE><BR>
-
- <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Formatting Object Tree</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
- <P>The class <B>org.apache.fop.fo.FOTreeBuilder</B> is responsible for actually
- constructing the FO tree. The key SAX events used are </P>
- <P><CODE><FONT face="courier, monospaced">startElement()</FONT></CODE>,</P>
- <P><CODE><FONT face="courier, monospaced">endElement()</FONT></CODE> and <CODE><FONT face="courier, monospaced">characters()</FONT></CODE>.</P>
-
- <P>All formatting objects derive from abstract class
- <B>org.apache.fop.fo.FONode</B>. The other FO classes inherit from
- <B>FONode</B> as follows:</P>
-
- <P><CODE><FONT face="courier, monospaced"> FONode</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> |</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> __________|________</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> | |</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> FObj FOText</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> |</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> |___________________</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> | |</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> FObjMixed SequenceSpecifier
- </FONT></CODE></P>
-
- <P>FO's extending FObj:</P>
-
- <P>Package org.apache.fop.fo.pagination:</P>
-
-
- <P><CODE><FONT face="courier, monospaced"> LayoutMasterSet</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> PageSequence</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> RegionAfter</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> RegionBefore</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> RegionBody</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> Root</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> SequenceSpecification</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> SimplePageMaster</FONT></CODE></P>
-
-
- <P>Package org.apache.fop.fo.flow:</P>
-
-
- <P><CODE><FONT face="courier, monospaced">BlockContainer</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">DisplayGraphic</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">DisplayRule</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">DisplaySequence</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">Flow</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">InlineGraphic</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">ListBlock</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">ListItem</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">ListItemBody</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">ListItemLabel</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">PageNumber</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">StaticContent</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">Table</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">TableBody</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">TableCell</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">TableColumn</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">TableRow</FONT></CODE></P>
-
- <P>FO's extending SequenceSpecifier:</P>
-
- <P>Package org.apache.fop.fo.pagination:</P>
-
-
- <P><CODE><FONT face="courier, monospaced">SequenceSpecifierAlternating</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">SequenceSpecifierRepeating</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">SequenceSpecifierSingle</FONT></CODE></P>
-
- <P>FO's extending FObjMixed:</P>
-
- <P>Package org.apache.fop.fo.flow:</P>
-
-
- <P><CODE><FONT face="courier, monospaced">Block</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">InlineSequence</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">SimpleLink</FONT></CODE></P>
-
- </FONT></TD></TR></TABLE><BR>
-
- <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>FONode</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
- <P>
- The class inheritance described above only describes the nature of the
- content. Every FO in FOP also has a parent, and a Vector of children. The
- parent attribute (in the Java sense), in particular, is used to enforce
- constraints required by the FO hierarchy.
- </P>
-
- <P>
- FONode, among other things, ensures that FO's have a parent, that they
- have children, that they maintain a marker of where the layout was up to
- (for FObj's it is the child number, and for FOText's it is the character
- number), and that they have a <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method.
- </P>
- </FONT></TD></TR></TABLE><BR>
-
- <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Making FO's</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
-
- <P>
- Every FO class has code that looks something like this:
- </P>
-
- <P><CODE><FONT face="courier, monospaced">public static class Maker extends FObj.Maker {</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> public FObj make(FObj parent, PropertyList propertyList)</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> throws FOPException</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> {</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> return new SimplePageMaster(parent, propertyList);</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> }</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced">}</FONT></CODE></P>
-
-
- <P>
- The class also has a static method that resembles
- </P>
-
- <P><CODE><FONT face="courier, monospaced">public static FObj.Maker maker()</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> {</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> return new PageSequence.Maker();</FONT></CODE></P>
- <P><CODE><FONT face="courier, monospaced"> }</FONT></CODE></P>
-
- <P>
- A hash 'fobjTable' exists in <B>FOTreeBuilder</B>, and maps the FO names (such as
- 'fo:table') to object references to the appropriate factories
- (such as <B>Table.Maker</B>).
- </P>
-
- <P>
- Properties (recall that FO's have properties, areas have traits, and XML
- nodes have attributes) are also a concern of <B>FOTreeBuilder</B>. It
- accomplishes this by using <B>PropertyListBuilder</B>, which contains a hash of
- property names and <I>their</I> respective makers. The base class for
- properties is <B>Property</B>, and the property makers extend
- <B>Property.Maker</B>.
- </P>
- </FONT></TD></TR></TABLE><BR>
- <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>FO Formatting</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
-
- <P>
- <B>FOTreeBuilder</B> calls <CODE><FONT face="courier, monospaced">format()</FONT></CODE> on the root FO, passing
- it the <B>AreaTree</B>
- reference. In turn, <B>Root</B> calls <CODE><FONT face="courier, monospaced">format()</FONT></CODE> on each
- <B>PageSequence</B>, passing <I>it</I>
- the <B>AreaTree</B> reference.
- </P>
-
- <P>
- The <B>PageSequence</B> <CODE><FONT face="courier, monospaced">format()</FONT></CODE> method does the following things:
- </P>
-
- <OL>
- <LI>Makes a <B>Page</B>, using <B>PageMasterFactory</B> to produce a
- <B>PageMaster</B>, and
- using <CODE><FONT face="courier, monospaced">makePage()</FONT></CODE> in the latter class. In the simplest picture,
- a <B>Page</B> has
- 5 areas represented by <B>AreaContainers</B>;</LI>
-
- <LI>Handles layout for <B>StaticContent</B> objects in the 'before' and 'after'
- regions, if set. This uses the <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method in
- <B>StaticContent</B>;</LI>
-
- <LI>If a page break is not forced, it will continue to layout the flow into
- the body area (<B>AreaContainer</B>) of the current page;</LI>
-
- <LI>It continues with (1) when layout into the current page is done, but
- the flow is not empty.</LI>
- </OL>
- </FONT></TD></TR></TABLE><BR>
-
- <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Area Layout</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
-
- <P>
- FO's that represent actual areas, starting with <B>Flow</B> and
- <B>StaticContent</B>, have
- a <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method, with the following signature:
- </P>
-
- <P>
- <CODE><FONT face="courier, monospaced">
- public Status layout(Area area)
- </FONT></CODE>
- </P>
-
- <P>
- The fundamental role of the <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method is to manage the layout of
- children and/or to generate new areas.
- </P>
-
- <P>
- <B>Example</B>: the <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method for <B>Flow</B> generates no new areas - it manages the
- layout of the flow children.
- </P>
-
- <P>
- <B>Example</B>: the <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method for <B>Block</B>
- generates a new <B>BlockArea</B> in and of
- itself, and also manages the layout of the block children, which are added
- to the <B>BlockArea</B> before that is itself added to its parent
- <B>Area</B>.
- </P>
-
- <P>
- <CODE><FONT face="courier, monospaced">Layout()</FONT></CODE> methods are subject to the general constraint that possibly not
- all of their children can be accommodated, and they report back accordingly
- with an appropriate <B>Status</B>.
- </P>
- </FONT></TD></TR></TABLE><BR>
-
- <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Rendering</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
-
- <P>
- This is a separate process. The <CODE><FONT face="courier, monospaced">render()</FONT></CODE> method in
- <B>Driver</B> is invoked (say,
- by <B>CommandLine</B>) with the laid-out <B>AreaTree</B> and a
- <B>PrintWriter</B> as arguments.
- This actually calls the <CODE><FONT face="courier, monospaced">render()</FONT></CODE> method in a specific implementation of
- the <B>Renderer</B> interface, typically <B>PDFRenderer</B> or
- <B>AWTRenderer</B>.
- </P>
-
- <P>
- At the highest level <B>PDFRenderer</B>, for example, begins by rendering each
- <B>Page</B>. The <CODE><FONT face="courier, monospaced">render()</FONT></CODE> method in <B>Page</B> (as is the case for other areas),
- invokes a particular method in the renderer of choice, e.g.
- <CODE><FONT face="courier, monospaced">renderPage()</FONT></CODE>.
- <B>NOTE</B>: this system is bypassed for <B>Page</B>, incidentally.
- </P>
-
- <P>
- Rendering will not be discussed further in this document, as most of our
- current effort must concentrate on layout. Section 4.12 in the XSL WD
- discusses some issues applicable to rendering.
- </P>
- </FONT></TD></TR></TABLE><BR>
-
- </TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
- Copyright © 1999 The Apache Software Foundation.
- All Rights Reserved.
- </I></FONT></TD></TR></TABLE></BODY></HTML>
|