FO is a web standard to generate pdf file from xml document. For detail information, pls click on the link provided, which is a good place to learn FO, surely better then FOP(an open source project in apache to generate pdf using java) document.
below is a snippet from the link:
XSL-FO Documents
XSL-FO documents are XML files with output information. They contain information about the output layout and output contents.
XSL-FO documents are stored in files with a *.fo or a *.fob extension. It is also quite normal to see XSL-FO documents stored with the *.xml extension, because this makes them more accessible to XML editors.
XSL-FO Document Structure
XSL-FO documents have a structure like this:
< ?xml version="1.0" encoding="ISO-8859-1"? >
< fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" >
< fo:layout-master-set >
< fo:simple-page-master master-name="A4" >
< !-- Page template goes here -- >
< /fo:simple-page-master >
< /fo:layout-master-set >
< fo:page-sequence master-reference="A4" >
< !-- Page content goes here -- >
< /fo:page-sequence >
< /fo:root >
Structure explained
XSL-FO documents are XML documents, and must always start with an XML declaration:
< ?xml version="1.0" encoding="ISO-8859-1"? >
The < fo:root > element contains the XSL-FO document. It also declares the namespace for XSL-FO:
< fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" >
< !-- The full XSL-FO document goes here -- >
< /fo:root >
The < fo:layout-master-set > element contains one or more page templates:
< fo:layout-master-set >
< !-- All page templates go here -- >
< /fo:layout-master-set >
Each < fo:simple-page-master > element contains a single page template. Each template must have a unique name (master-name):
< fo:simple-page-master master-name="A4" >
< !-- One page template goes here -- >
< /fo:simple-page-master >
One or more < fo:page-sequence > elements describe page contents. The master-reference attribute refers to the simple-page-master template with the same name:
< fo:page-sequence master-reference="A4" >
< !-- Page content goes here -- >
< /fo:page-sequence >
Note: The master-reference "A4" does not actually describe a predefined page format. It is just a name. You can use any name like "MyPage", "MyTemplate", etc.
/************************************************
One tricky thing when dealing with multiple items in one document, like you have 6 invoices, you want to generate one pdf document contains all of them and print it all at once.
in such situation, you need to have 6 < page-sequence >
to add pagging, you need to add initial-page-number="1" to tell FO that each invoice has its own paging
to remove blank page interval, you need to add force-page-count="odd" to tell FO do not add stupid blank interval page, which is default.
/************************************************