Page Hooks
XTS provides two hooks that let you run commands at specific points in a page’s lifecycle:
AtPageCreation
Commands inside <AtPageCreation> run when a new page is created, before any content is placed. This is the right place for:
- Background images or stationery
- Watermarks
- Repeating page headers or footers
<DefineMasterPage name="default" test="true()" margin="1cm">
<AtPageCreation>
<PlaceObject row="1" column="1" allocate="no">
<Image href="letterhead.pdf" width="210mm" height="297mm"/>
</PlaceObject>
</AtPageCreation>
</DefineMasterPage>AtPageShipout
Commands inside <AtPageShipout> run when a page is finalized and written to the PDF. This is the place for:
- Page numbers (you now know the final page number)
- Running headers with chapter titles
- Content that depends on what’s on the page
<DefineMasterPage name="default" test="true()" margin="1cm">
<AtPageShipout>
<PlaceObject column="{sd:number-of-columns()}" row="{sd:number-of-rows()}"
hreference="right" halign="right">
<TextBlock>
<Paragraph>
<Value select="sd:current-page()"/>
</Paragraph>
</TextBlock>
</PlaceObject>
</AtPageShipout>
</DefineMasterPage>Combining both
A typical setup uses <AtPageCreation> for the background and <AtPageShipout> for page-dependent content:
<DefineMasterPage name="standard" test="true()" margin="2cm 1cm 1cm 1cm">
<AtPageCreation>
<!-- Company logo in the top-right corner -->
<PlaceObject column="{sd:number-of-columns()}" row="1"
hreference="right" allocate="no">
<Image href="logo.pdf" width="3cm"/>
</PlaceObject>
</AtPageCreation>
<AtPageShipout>
<!-- Page number at the bottom center -->
<PlaceObject column="1" row="{sd:number-of-rows()}" allocate="no">
<TextBlock>
<Paragraph style="text-align: center;">
<Value select="sd:current-page()"/>
</Paragraph>
</TextBlock>
</PlaceObject>
</AtPageShipout>
</DefineMasterPage>