Back to demo start page
Demo: Xsl-fo transform for invoice
This demo shows a xsl-fo transformation template that takes a xml data document of invoice data and generates the invoice in pdf format.
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <fo:root> <fo:layout-master-set> <fo:simple-page-master master-name="A4" page-height="29.7cm" page-width="21.0cm" margin-top="1cm" margin-left="2cm" margin-right="2cm" margin-bottom="1cm"> <!-- Page template goes here --> <fo:region-before region-name="xsl-region-before" extent="3cm"/> <fo:region-after region-name="xsl-region-after" extent="4cm"/> <fo:region-body /> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="A4"> <!-- Page content goes here --> <fo:static-content flow-name="xsl-region-before"> <fo:block> <fo:table> <fo:table-column column-width="8.5cm"/> <fo:table-column column-width="8.5cm"/> <fo:table-body> <fo:table-row font-size="18pt" line-height="30px" background-color="#3e73b9" color="white"> <fo:table-cell padding-left="5pt"> <fo:block> Acme Incorporated </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="right"> INVOICE </fo:block> </fo:table-cell> </fo:table-row> <fo:table-row> <fo:table-cell padding-left="5pt" padding-top="5pt"> <fo:block> c/o Looney tunes
 Toontown </fo:block> </fo:table-cell> <fo:table-cell> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:block> </fo:static-content> <fo:static-content flow-name="xsl-region-after"> <fo:block line-height="20pt"> <fo:block font-weight="bold"> Terms & Conditions </fo:block> <fo:block space-after="15pt"> Payment is due within <xsl:value-of select="invoice/terms" /> </fo:block> <fo:block> Bank of Toontown
 Account number: 1234567890 </fo:block> </fo:block> </fo:static-content> <fo:flow flow-name="xsl-region-body" line-height="20pt"> <xsl:apply-templates /> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> <xsl:template match="invoice"> <fo:block space-before="120pt" width="17cm" > <fo:table> <fo:table-column column-width="5.5cm"/> <fo:table-column column-width="5.5cm"/> <fo:table-column column-width="3cm"/> <fo:table-column column-width="3cm"/> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block> <fo:inline font-weight="bold">Bill To</fo:inline> <xsl:call-template name="address"> <xsl:with-param name="address" select="./address[@type='billto']"></xsl:with-param> </xsl:call-template> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block> <fo:inline font-weight="bold">Ship To</fo:inline> <xsl:call-template name="address"> <xsl:with-param name="address" select="./address[@type='shipto']"></xsl:with-param> </xsl:call-template> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="right"> <fo:inline font-weight="bold">Invoice #</fo:inline>
 <fo:inline font-weight="bold">Invoice Date</fo:inline>
 <fo:inline font-weight="bold"> P.O.#</fo:inline>
 <fo:inline font-weight="bold">Due Date</fo:inline>
 </fo:block> </fo:table-cell> <fo:table-cell> <fo:block text-align="right"> <xsl:value-of select="./invoicenumber"></xsl:value-of>
 <xsl:value-of select="./invoicedate"></xsl:value-of>
 <xsl:value-of select="./purchaseordernumber"></xsl:value-of>
 <xsl:value-of select="./duedate"></xsl:value-of>
 </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:block> <fo:block space-before="35pt"> <fo:table line-height="30px"> <fo:table-column column-width="2cm"/> <fo:table-column column-width="8cm"/> <fo:table-column column-width="3.5cm"/> <fo:table-column column-width="3.5cm"/> <fo:table-header> <fo:table-row background-color="#f5f5f5" text-align="center" font-weight="bold"> <fo:table-cell border="1px solid #b8b6b6"> <fo:block>QTY</fo:block> </fo:table-cell> <fo:table-cell border="1px solid #b8b6b6"> <fo:block>DESCRIPTION</fo:block> </fo:table-cell> <fo:table-cell border="1px solid #b8b6b6"> <fo:block>UNIT PRICE</fo:block> </fo:table-cell> <fo:table-cell border="1px solid #b8b6b6"> <fo:block>AMOUNT</fo:block> </fo:table-cell> </fo:table-row> </fo:table-header> <fo:table-body> <xsl:apply-templates select="lineitems/lineitem"></xsl:apply-templates> <fo:table-row> <fo:table-cell number-columns-spanned="3" text-align="right" padding-right="3pt"> <fo:block>Subtotal</fo:block> </fo:table-cell> <fo:table-cell text-align="right" padding-right="3pt" border-left="1px solid #b8b6b6" border-right="1px solid #b8b6b6" > <fo:block> <xsl:value-of select="subtotal" /> </fo:block> </fo:table-cell> </fo:table-row> <fo:table-row> <fo:table-cell number-columns-spanned="3" text-align="right" padding-right="3pt"> <fo:block>Sales tax 5%</fo:block> </fo:table-cell> <fo:table-cell text-align="right" padding-right="3pt" border-left="1px solid #b8b6b6" border-right="1px solid #b8b6b6" > <fo:block> <xsl:value-of select="tax" /> </fo:block> </fo:table-cell> </fo:table-row> <fo:table-row font-weight="bold"> <fo:table-cell number-columns-spanned="3" text-align="right" padding-right="3pt"> <fo:block>Total</fo:block> </fo:table-cell> <fo:table-cell text-align="right" padding-right="3pt" background-color="#f5f5f5" border="1px solid #b8b6b6" > <fo:block> <xsl:value-of select="total" /> </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:block> </xsl:template> <xsl:template name="address"> <xsl:param name="address"></xsl:param> <fo:block> <xsl:value-of select="$address/name" />
 <xsl:value-of select="$address/street" />
 <xsl:value-of select="$address/zipcode" /> <xsl:value-of select="$address/city" /> </fo:block> </xsl:template> <xsl:template match="lineitem"> <fo:table-row> <fo:table-cell border="1px solid #b8b6b6" text-align="center"> <fo:block> <xsl:value-of select="quantity"/> </fo:block> </fo:table-cell> <fo:table-cell border="1px solid #b8b6b6" padding-left="3pt"> <fo:block> <xsl:value-of select="description"/> </fo:block> </fo:table-cell> <fo:table-cell border="1px solid #b8b6b6" text-align="right" padding-right="3pt"> <fo:block> <xsl:value-of select="unitprice"/> </fo:block> </fo:table-cell> <fo:table-cell border="1px solid #b8b6b6" text-align="right" padding-right="3pt"> <fo:block> <xsl:value-of select="amount"/> </fo:block> </fo:table-cell> </fo:table-row> </xsl:template> </xsl:stylesheet>
<?xml version="1.0" encoding="utf-8" ?> <invoice> <invoicenumber>INT-3343</invoicenumber> <invoicedate>2020-01-31</invoicedate> <purchaseordernumber>1949/2020</purchaseordernumber> <duedate>2020-02-14</duedate> <address type="shipto"> <name>Road Runner</name> <street>1 Desert road east</street> <zipcode>2014</zipcode> <city>SW Am. desert</city> </address> <address type="billto"> <name>Wile E. Coyote</name> <street>1 Desert road west</street> <zipcode>1949</zipcode> <city>SW Am. desert</city> </address> <lineitems> <lineitem> <quantity>20</quantity> <description>Explosive tennis balls</description> <unitprice>$5.00</unitprice> <amount>$100.00</amount> </lineitem> <lineitem> <quantity>100</quantity> <description>Earthquake pills</description> <unitprice>$0.50</unitprice> <amount>$50.00</amount> </lineitem> </lineitems> <subtotal>$150.00</subtotal> <tax>$7.50</tax> <total>$157.50</total> <terms>15 days</terms> </invoice>
Click run demo buttons to see result
Calling PdfBroker.io api