PDF: Header und Footer

Erweiterungsobjekt: eo:iduPdf

Kopf- und Fußzeile können über das Erweiterungsobjekt eo:iduPdf über die Methode SetPdfHeaderAndFooter  definiert werden.

Fügen Sie am Anfang der Transformationsdatei die hier aufgeführten Namespaces hinzu um alle Funktionen nutzen zu können:

<xsl:stylesheet version="1.0"
    ...
    xmlns:iduCore="eo:iduCore"
    xmlns:iduPdf="eo:iduPdf"
    xmlns:btn="http://schemas.webs.idu.de/cardo3/Button"
    ...
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="btn http://webs.idu.de/xsdschemas/cardo/Button/Button.xsd">
 
Hinweis: Header und Footer werden auf jeder Seite des Dokumentes angezeigt.

Die Methode SetPdfHeaderAndFooter erwartet als einzigen Parameter ein XML-Fragment aus dem Button-Namespace (http://schemas.webs.idu.de/cardo3/Button) mit den entsprechenden Angaben zu Header und Footer. Es bietet sich an, dieses Fragment als XSLT-Variable zu definieren und diese dann als Funktionsargument zu übergeben.

Beispiel Header

Nachfolgend eine Definition eines Headers mit Überschrift und Logo:

<xsl:variable name="HeaderAndFooter">
  <btn:ButtonPdfHeaderAndFooter>
    <!--Header und Footer für alle Seiten gleich-->
    <btn:AllPages>
      <btn:Header>
        <!--fixe Höhe des Headers in mm-->
        <btn:HeightMm>25</btn:HeightMm>
        <!--der Header wird als eigenständiges HTML-Dokument definiert-->
        <btn:HtmlWithPlaceHolders>
          <body style="margin: 0;padding: 0;font-family: Arial;">
            <!--über eine zweispaltige Tabelle werden die Informationen links und rechts ausgerichtet-->
            <table style="border: 1pt solid black;width: 100%;">
              <tbody>
                <tr style="vertical-align:top">
                  <!--Links eine Überschrift-->
                  <td style="text-align:left;">
                    <h1>
                      Dokumentenüberschrift
                    </h1>
                  </td>
                  <!--Rechts das Logo-->
                  <td style="text-align:right;">
                    <img alt="Logo" height="60">
                      <xsl:attribute name="src">
                        <xsl:value-of select="iduCore:ResolveImageUrlToLocalFile('idu.png')"/>
                      </xsl:attribute>
                    </img>
                  </td>
                </tr>
              </tbody>
            </table>
          </body>
        </btn:HtmlWithPlaceHolders>
        <!--Wichtig: für exakte HTML-Umsetzung Skalierung bei übergroßem Inhalt verhindern-->
        <btn:FitDestHeight>false</btn:FitDestHeight>
      </btn:Header>
    </btn:AllPages>
  </btn:ButtonPdfHeaderAndFooter>
</xsl:variable>

 

Obige Variable kann nun als Parameter an SetPdfHeaderAndFooter übergeben werden. Zum Ausführen der Erweiterungsfunktion wird wiederum das XSLT-Konstrukt Variable verwendet. Die Variable hat aber keine weitere Bedeutung und dient nur dem Start der Funktion. Der Name der Variable spielt daher keine Rolle (hier 'unused'):

<xsl:variable name="unused" select="iduPdf:SetPdfHeaderAndFooter($HeaderAndFooter)"/>

 

Das PDF aus obigem Beispiel:

Beachten Sie, dass eine exakte Positionierung erreicht wurde. Sowohl der Body des Headers als auch der Body des Dokumentes wurden mit Padding/Margin 0 initialisiert und grenzen so direkt an die per PDF-Lib definierten Seitenränder.

FitDestHeight

Die Tabelle des Headers im obigen Beispiel (Rahmen zur besseren Sichtbarkeit) füllt nicht ganz den Header in der Höhe aus. Würde das Html des Headers höher ausfallen als der Header wird bei eingeschalteter Skalierung das Html komplett verkleinert bis es in den Header passt, entspricht dann aber nicht mehr der HTML-Definition. Bei ausgeschalteter Skalierung wird das Header-Html in originaler Größe dargestellt und an den Rändern des Headers abgeschnitten.

FitDestHeight = true (Standard) - Skalierung eingeschaltet (eventuell sinnvoll, wenn mit verschiedenen Papiergrößen gearbeitet wird)

FitDestHeight = false - sinnvoll für exakte Ausrichtung des Headers

Beispiel Footer

Nachfolgend ein Beispiel, in welchem ein Footer definiert wird. In diesem wird linksbündig das aktuelle Datum und rechtsbündig die aktuelle und Gesamtseitenzahl ausgegeben. 


<xsl:variable name="HeaderAndFooter">
  <btn:ButtonPdfHeaderAndFooter>
    <!--Header und Footer für alle Seiten gleich-->
    <btn:AllPages>
      <!--in diesem Beispiel wird nur ein Footer definiert-->
      <btn:Footer>
        <!--Höhe des Footers in mm-->
        <btn:HeightMm>15</btn:HeightMm>
        <!--Angabe eines Html-Fragmentes in welchem vorgegebene Platzhalter verwendet werden können-->
        <btn:HtmlWithPlaceHolders>
          <body style="margin: 0;padding: 0;font-family: Arial;font-size: 8pt;">
            <!--über eine zweispaltige Tabelle werden die Informationen links und rechts ausgerichtet-->
            <table style="width:100%; border: 1px solid black;">
              <tbody>
                <tr style="vertical-align:top">
                  <!--linke Spalte beispielsweise mit Datum-->
                  <td style="text-align:left;">
                    Erstellt am: <xsl:value-of select="iduCore:FormatDateTime(iduCore:Now(),'dd.MM.yyyy',true())" />
                  </td>
                  <!--rechte Spalte mit aktueller Seitenzahl und Gesamtzahl-->
                  <td style="text-align:right;">Seite {CrtPage} von {PageCount}</td>
                </tr>
              </tbody>
            </table>
          </body>
        </btn:HtmlWithPlaceHolders>
        <btn:FitDestHeight>false</btn:FitDestHeight>
      </btn:Footer>
    </btn:AllPages>
  </btn:ButtonPdfHeaderAndFooter>
</xsl:variable>

 

PDF-Dokument aus obigem Beispiel:

Soll sowohl Header als auch Footer definiert werden, werden diese nacheinander in ein XML-Fragment geschrieben.

 

Zur Beschreibung aller weiteren Optionen im XML-Fragment ButtonPdfHeaderAndFooter nutzen Sie bitte die Autovervollständigung und die Hilfetexte über das XML-Schema.