<< back
PD4ML: PDF Header/Footer GenerationPD4ML provides 3 types of headers/footers.
The first 2 options are available by PD4ML Java API calls (or as JSP custom tags mapped to PD4ML API): i.e. <pd4ml:footer> -> pd4ml.setPageFooter(); 1. Text only (in such form can be used only in JSP): <pd4ml:footer pageNumberTemplate="page $[page] of $[total]" titleAlignment="left" pageNumberAlignment="right" color="#008000" initialPageNumber="1" pagesToSkip="1" fontSize="14" areaHeight="18"/> Java version: PD4PageMark footer = new PD4PageMark(); footer.setPageNumberTemplate("page $[page] of $[total]"); footer.setTitleAlignment(PD4PageMark.LEFT_ALIGN); footer.setPageNumberAlignment(PD4PageMark.RIGHT_ALIGN); footer.setColor(new Color(0x008000)); footer.setInitialPageNumber(1); footer.setPagesToSkip(1); footer.setFontSize(14); footer.setAreaHeight(18); pd4ml.setPageFooter(footer); 2. HTML formatted footer (in such form can be used only in JSP) <pd4ml:footer areaHeight="-1"> <font color="red"><i>page $[page] of $[total]</i></font> </pd4ml:footer> Java version: PD4PageMark footer = new PD4PageMark(); footer.setHtmlTemplate("<font color=\"red\"><i>page $[page] of $[total]</i></font>"); footer.setAreaHeight(-1); pd4ml.setPageFooter(footer); areaHeight="-1" means "autocompute" there 3. The third option, inline footer, allows to define footer body in HTML/PHP document: <pd4ml:page.footer> footer: $[page] of $[total] </pd4ml:page.footer> The definition impacts all subsequent pages after the page, where the footer defined. A new appearance of the footer overrides previously defined one. In order to define the footer for the first page, you need to place the definition immediately after <body> tag or before <html>. Also you may explicitly define pages, where the footer needs to be applied: <pd4ml:page.footer scope="1"> first page footer: $[page] of $[total]<br> <img src="img1.gif"> </pd4ml:page.footer> <pd4ml:page.footer scope="2+"> footer: $[page] of $[total]<br> <img src="img2.gif"> </pd4ml:page.footer> <html> <head> ... The above defines different footers for the first page and for the rest of the pages (the second and others). Also "scope" understands "even", "odd" and "skiplast" modifiers. Example: scope="2,5-10,even,skiplast"
You may control header/footer appearance scope also if header/footer defined via API (the first two header/footer types). It can be achieved by an overriding relevant methods: PD4PageMark footer = new PD4PageMark() { public String getHtmlTemplate(int pageNumber) { if ( pageNumber % 2 == 0 ) { return "<html><body>some left aligned stuff..."; } else { return "<html><body>some right aligned stuff..."; } } }; pd4ml.setPageFooter(footer); The above example defines page-specific HTML footer. Such type of footers is not supported by PD4ML Std. For the Std verison you may override: PD4PageMark.getPageNumberTemplate(int pageNr); PD4PageMark.getPageNumberAlignment(int pageNr); PD4PageMark.getTitleTemplate(int pageNr); etc Note: by the approach it will allocate header or footer space even if for particular pages the overridden methods return no header/footer data.
PDF header/footer discussion is here |