SuperX-Kernmodul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

476 lines
18 KiB

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:import href="pageComponents_html.xsl" />
<!--In diesem Stylesheet können Sie individuelle templates unterbringen,
die in ihrer Präzedenz das normale Stylesheet
pageComponents_html.xsl überragt. -->
<xsl:import href="pageComponents_html_final.xsl" />
<xsl:import href="resultset_html.xsl" />
<xsl:decimal-format name="German" grouping-separator="." NaN="" zero-digit ="0" decimal-separator="," />
<!--Wenn Sie ein eigenes PDF-Stylesheet erstellen, sollten Sie die u. aufgeführte Routine zur
Berechnung der Spaltenbreite übernehmen
Wenn Sie nur das Seitenlayout ändern wollen, z.B. auf A4, dann reicht es, hier die Variablen seitenbreite_mm,
die druckbreite_mm und das Attribut page-height anzupassen.
-->
<xsl:variable name="seitenbreite_mm">300</xsl:variable>
<!--Die Breite der Tabelle in mm bei A4 Querformat:-->
<xsl:variable name="druckbreite_mm">280</xsl:variable>
<!-- Wenn keine Spaltenbreite definiert ist, wird 12 (Einheit Applet-Breite) verwendet. -->
<xsl:variable name="std_spaltenbreite">12</xsl:variable>
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<!-- start allg-->
<fo:layout-master-set>
<fo:simple-page-master master-name="first"
page-height="200mm" page-width="{concat($seitenbreite_mm,'mm')}"
margin-top="10mm" margin-bottom="10mm"
margin-left="8mm" margin-right="8mm">
<fo:region-body
margin-top="0mm" margin-bottom="20mm"
margin-left="0mm" margin-right="0mm"/>
<fo:region-before extent="10mm"/>
<fo:region-after extent="10mm"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="rest"
page-height="200mm" page-width="{concat($seitenbreite_mm,'mm')}"
margin-top="10mm" margin-bottom="10mm"
margin-left="8mm" margin-right="8mm">
<fo:region-body
margin-top="0mm" margin-bottom="20mm"
margin-left="0mm" margin-right="0mm"/>
<fo:region-before extent="10mm"/>
<fo:region-after extent="10mm"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="sequence">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="first"
/>
<fo:conditional-page-master-reference master-reference="rest"
page-position="rest" />
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
<!-- end allg-->
<!-- start seite-->
<fo:page-sequence master-name="sequence" master-reference="sequence">
<fo:static-content flow-name="xsl-region-after">
<fo:block text-align="center" font-size="12pt">Seite <fo:page-number />
<!-- kosten zuviel Speicher von <fo:page-number-citation ref-id="endofdoc" /> -->
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<!-- start Titel -->
<fo:block font-family="serif" line-height="20pt" font-size="20pt" font-weight="bolder" color="rgb(0,0,255)" margin-bottom="20mm" text-align="end">
<fo:external-graphic>
<xsl:choose>
<xsl:when test="/ergebnisse/generalinfo/REPORT_LOGO_FILE!='' and /ergebnisse/generalinfo/REPORT_LOGO_FILE!='@@REPORT_LOGO_FILE@@'">
<xsl:attribute name="src"><xsl:text>servlet/</xsl:text><xsl:value-of select="/ergebnisse/generalinfo/REPORT_LOGO_FILE"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="src"><xsl:text>servlet/</xsl:text><xsl:call-template name="logo_path"></xsl:call-template></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</fo:external-graphic>
</fo:block>
<xsl:if test="/ergebnisse/makro/@id !=''">
<fo:block font-family="sans-serif" line-height="20pt" font-size="20pt" font-weight="bolder" margin-bottom="20mm">
<xsl:value-of select="/ergebnisse/makro/name" />
</fo:block>
</xsl:if>
<!-- end TItel-->
<!-- start Tabelle-->
<xsl:for-each select="ergebnisse/ergebnis/ergebniselement">
<xsl:choose>
<xsl:when test="@typ='image'">
<!-- klappt noch nciht<img>
<xsl:attribute name="src"><xsl:value-of select="@url" /></xsl:attribute>
</img>
<hr/>-->
<xsl:text>
</xsl:text>
</xsl:when>
<xsl:when test="@typ='tabelle'">
<fo:block font-family="sans-serif" line-height="48pt" font-size="20pt" font-weight="bold" color="rgb(0,0,255)" space-after="10mm">
<xsl:value-of select="../maskenname" /></fo:block>
<xsl:call-template name="legende_fo" />
<!--<fo:block font-family="sans-serif" line-height="26pt" font-size="14pt">Stand: <xsl:value-of select="stand" /></fo:block>-->
<xsl:if test="errmsg !=''">
<fo:block font-family="sans-serif" line-height="20pt" font-size="20pt"><!---->
<xsl:copy-of select="errmsg" /></fo:block></xsl:if>
<fo:table border="solid" border-collapse="collapse" table-layout="fixed"><xsl:text>
</xsl:text>
<!-- start Spaltenbreite-->
<xsl:variable name="gesamtbreite_str">
<xsl:text>0</xsl:text>
<xsl:for-each select="sqlerg/headers/header">
<xsl:if test="starts-with(f_name,'next') = false"> <!--MB 10.6.09 keine Linkspalten-->
<xsl:text>+</xsl:text><xsl:value-of select="@width" />
</xsl:if>
</xsl:for-each>
</xsl:variable>
<!--MB 10.6.09 keine Linkspalten-->
<xsl:variable name="defbreite" ><xsl:value-of select="sum(sqlerg/headers/header[ @width &gt; 0 and starts-with(f_name,'next') = false ]/@width )" /></xsl:variable>
<xsl:variable name="ndefbreite" ><xsl:value-of select="count(sqlerg/headers/header[ @width = '' and starts-with(f_name,'next') = false])" /></xsl:variable>
<xsl:variable name="gesamtbreite" ><xsl:value-of select="$defbreite+($ndefbreite* $std_spaltenbreite)" /></xsl:variable>
<xsl:for-each select="sqlerg/headers/header">
<xsl:if test="starts-with(f_name,'next') = false"> <!--MB 10.6.09 keine Linkspalten-->
<xsl:text>
</xsl:text>
<xsl:comment><xsl:value-of select="$defbreite" /></xsl:comment>
<fo:table-column>
<xsl:attribute name="column-width">
<xsl:choose>
<!--Wenn Tabelle zu breit ist
<xsl:when test="$defbreite &gt; 320" >
<xsl:variable name="spbreite"><xsl:value-of select="@width * (12 div 20)" />
</xsl:variable>
<xsl:value-of select="concat($spbreite,'em')" />
</xsl:when>
-->
<xsl:when test="@width != ''" >
<!--Im Applet ist die Breite definiert als Multiplikator von einem Schriftzeichen (em).
In FOP ist 1em=ca.20pt, d.h. um zur Schriftgröße 12pt zu kommen, wird Faktor benutzt.-->
<!--<xsl:variable name="spbreite"><xsl:value-of select="@width * (12 div 20)" />
</xsl:variable>
<xsl:value-of select="concat($spbreite,'em')" />
-->
<xsl:variable name="spbreite"><xsl:value-of select="$druckbreite_mm*(@width div $gesamtbreite)" />
</xsl:variable>
<xsl:choose>
<xsl:when test="$spbreite &gt; 2" >
<xsl:value-of select="concat($spbreite,'mm')" />
</xsl:when>
<xsl:otherwise >
<xsl:text>auto</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$druckbreite_mm*($std_spaltenbreite div $gesamtbreite)" />
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<!--
<xsl:attribute name="column-number">
<xsl:value-of select="(@id+1)" />
</xsl:attribute>-->
</fo:table-column>
</xsl:if>
</xsl:for-each>
<!-- end Spaltenbreite -->
<!-- start Header-->
<fo:table-header>
<!--Spaltenüberschriften: zunächst wird geprüft, ob Spaltenüberschriften verknüpft werden sollen -->
<xsl:variable name="spanned_cols">
<xsl:for-each select="sqlerg/headers/header">
<xsl:if test="contains(wert,'\000')">
<xsl:text>true</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:choose>
<xsl:when test="sqlerg/headers/@hasAggregationHeaders='true'">
<xsl:for-each select="sqlerg/aggregationHeaders">
<xsl:for-each select="tr">
<fo:table-row>
<xsl:for-each select="th [ @isHidden='false' and starts-with(@f_name,'next') = false] ">
<fo:table-cell border-width="0.5mm" padding="1mm" border-style="solid">
<xsl:if test="@rowspan != ''">
<xsl:attribute name="number-rows-spanned"><xsl:value-of select="@rowspan" /></xsl:attribute>
</xsl:if>
<xsl:if test="@colspan != ''">
<xsl:attribute name="number-columns-spanned"><xsl:value-of select="@colspan" /></xsl:attribute>
</xsl:if>
<!--language =en wg. hyphenation-->
<fo:block text-align="center" font-size="9pt" font-weight="bold" language="en" hyphenate="true"><!-- hyphenation raus, fop kommt sonst in Endlosschleife -->
<xsl:call-template name="removeBackslashN" >
<xsl:with-param name="derwert"><xsl:value-of select="." /></xsl:with-param>
<xsl:with-param name="format"><xsl:value-of select="'html'" /></xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell><xsl:text>
</xsl:text>
</xsl:for-each>
</fo:table-row><xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<!--Normale headers-->
<fo:table-row>
<xsl:for-each select="sqlerg/headers/header">
<xsl:if test="starts-with(f_name,'next') = false"> <!--MB 10.6.09 keine Linkspalten-->
<xsl:call-template name="foheader">
<xsl:with-param name="derwert" select="wert" />
</xsl:call-template>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</fo:table-row>
</xsl:otherwise>
</xsl:choose>
</fo:table-header>
<!-- end header-->
<!-- start body-->
<xsl:choose>
<xsl:when test="count(sqlerg/row) = 0">
<!-- saxon verlangt hier mind. eine Zeile -->
<fo:table-body>
<fo:table-row >
<fo:table-cell><fo:block> </fo:block></fo:table-cell></fo:table-row>
</fo:table-body>
</xsl:when>
<xsl:otherwise>
<fo:table-body>
<xsl:variable name="erglevelmax">
<xsl:if test="count(sqlerg/row/col [ f_name = 'ebene' ]) &gt; 0">
<xsl:choose>
<xsl:when test="count(sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '4']) &gt; 0">
<xsl:text>4</xsl:text>
</xsl:when>
<xsl:when test="count(sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '3']) &gt; 0">
<xsl:text>3</xsl:text>
</xsl:when>
<xsl:when test="count(sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '2']) &gt; 0">
<xsl:text>2</xsl:text>
</xsl:when>
<xsl:when test="count(sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '1']) &gt; 0">
<xsl:text>1</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>5</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:variable>
<xsl:for-each select="sqlerg/row">
<fo:table-row>
<xsl:choose>
<xsl:when test="col/f_name = 'ebene'">
<!-- DQ 14.12.07 In Zukunft noch erglevelmax auswerten when$erglevelmax = 5 and -->
<xsl:choose>
<xsl:when test="6-$erglevelmax+col[ f_name = 'ebene' ] /wert='1'">
<xsl:attribute name="background-color"><xsl:text>#cccccc</xsl:text></xsl:attribute>
<xsl:attribute name="border-width"><xsl:text>1mm</xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test="6-$erglevelmax+col[ f_name = 'ebene' ] /wert='2'">
<xsl:attribute name="border-width"><xsl:text>1mm</xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test="6-$erglevelmax+col[ f_name = 'ebene' ] /wert='3'">
<xsl:attribute name="border-width"><xsl:text>0.5mm</xsl:text></xsl:attribute>
<xsl:attribute name="background-color"><xsl:text>#cccccc</xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test="6-$erglevelmax+col[ f_name = 'ebene' ] /wert='4'">
<xsl:attribute name="background-color"><xsl:text>#e6e6e6</xsl:text></xsl:attribute>
<xsl:attribute name="border-width"><xsl:text>0.5mm</xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test="6-$erglevelmax+ col[ f_name = 'ebene' ] /wert='5'">
<xsl:attribute name="background-color"><xsl:text>#e6e6e6</xsl:text></xsl:attribute>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="@issumme='true'">
<xsl:attribute name="background-color"><xsl:text>#cccccc</xsl:text></xsl:attribute>
<xsl:attribute name="border-width"><xsl:text>1mm</xsl:text></xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:text>
</xsl:text>
<xsl:for-each select="col">
<xsl:if test="starts-with(f_name,'next') = false"> <!--MB 10.6.09 keine Linkspalten-->
<xsl:call-template name="spalte" /><xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</fo:table-row><xsl:text>
</xsl:text>
</xsl:for-each>
<!--end body-->
</fo:table-body>
</xsl:otherwise>
</xsl:choose>
</fo:table>
</xsl:when>
<xsl:otherwise>
<xsl:text>
Nicht unterstützter Ergebnistyp </xsl:text><xsl:value-of select="@type" />
</xsl:otherwise>
</xsl:choose>
<!-- end Tabelle-->
<xsl:call-template name="datensatzzaehler" />
</xsl:for-each>
<!-- end Tabelle-->
<!-- Ende des Dokuments zur Ermitttlung der maximalen Seitenzahl zu Speicherintensiv-->
<fo:block id="endofdoc" />
</fo:flow>
</fo:page-sequence>
<!-- end Seite-->
</fo:root>
</xsl:template>
<!-- start template spalte wird für Linkspalten gar nicht aufgerufen!!-->
<xsl:template name="spalte">
<fo:table-cell border-width="0.1mm" border-style="solid" padding-left="0.5mm" padding-right="0.5mm">
<xsl:if test="starts-with(f_name,'next') = false">
<fo:block font-size="10pt" font-family="serif" line-height="9pt" space-before.optimum="6pt" space-after.optimum="6pt"
language="en" hyphenate="true">
<xsl:choose>
<xsl:when test="@typ='2' or @typ='8' or @typ='3'"> <!-- DecimalFormat -->
<xsl:attribute name="text-align">end</xsl:attribute>
<xsl:value-of select="format-number(wert,'###.###.###.###.##0,00','German')" />
</xsl:when>
<xsl:when test="@typ='4'"> <!-- Integer -->
<xsl:attribute name="text-align">end</xsl:attribute>
<!--<xsl:attribute name="class">integer</xsl:attribute>-->
<!--<xsl:value-of select="wert" />-->
<xsl:value-of select="format-number(wert,'###.###.###.###.###','German')" />
</xsl:when>
<xsl:otherwise>
<!--Typ=1 ist string und wird defaultmäßig behandelt -->
<xsl:attribute name="text-align">start</xsl:attribute>
<xsl:choose>
<xsl:when test="f_name='email'">
<xsl:value-of select="wert" />
</xsl:when>
<xsl:when test="f_name='url'">
<!--<a target="_blank"><xsl:attribute name="href"><xsl:value-of select="wert" /></xsl:attribute>-->
<xsl:value-of select="wert" /><!--</a>-->
</xsl:when>
<xsl:when test="f_name='nextmask'">
</xsl:when>
<xsl:when test="f_name='nexttable'">
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="wert" />
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</fo:block>
</xsl:if>
</fo:table-cell><xsl:text>
</xsl:text>
</xsl:template>
<!-- end template-->
<!-- start legende-->
<xsl:template name="legende_fo">
<fo:block font-family="sans-serif" line-height="20pt" font-size="14pt" border-width="0.5mm" border-style="solid" border-color="gray" space-after="10mm">
<xsl:for-each select="../felder/feld">
<xsl:if test="(value !='' or sicht/@isFirstInGroup='false' or @isstandtoday='false') and @varname != 'sort' and @varname != 'maxoffset'">
<fo:inline>
<xsl:choose>
<xsl:when test="string-length(caption_short) &gt; 0 and caption_short != 'null'" >
<![CDATA[]]><xsl:value-of select="caption_short" /><![CDATA[]]>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@varname" />
</xsl:otherwise>
</xsl:choose></fo:inline><fo:inline>:&#160;</fo:inline>
<fo:inline font-style="italic" font-weight="bold">
<![CDATA[]]><xsl:value-of select="value_caption" /><![CDATA[]]>
<!-- MB 12.6.09 bei Mehrfachauswahl werden alle Auswahl benötigt in Legende
<xsl:if test="string-length(value_caption) &lt; 50">
<![CDATA[]]><xsl:value-of select="value_caption" /><![CDATA[]]>
</xsl:if>
<xsl:if test="string-length(value_caption) &gt; 49">
<![CDATA[]]><xsl:value-of select="substring(value_caption,0,50)" />...<![CDATA[]]>
</xsl:if> -->
<xsl:if test="sicht!=''">
<![CDATA[]]><xsl:text> (</xsl:text><xsl:value-of select="sicht" />
<xsl:if test="@stand!=''"><xsl:text> - Stand:</xsl:text><xsl:value-of select="@stand"/></xsl:if>
<xsl:text>)</xsl:text><![CDATA[]]>
</xsl:if>
;&#160;</fo:inline>
</xsl:if>
</xsl:for-each>
<xsl:text>User: </xsl:text><xsl:value-of select="/ergebnisse/user" />
<xsl:text>; Stand: </xsl:text><xsl:value-of select="../stand" />
</fo:block>
<!--
<xsl:for-each select="/ergebnis/felder/msgs/msg">
<xsl:if test="wert !=''">
<fo:block space-after="10mm" font-family="sans-serif" line-height="16pt" font-size="14pt">
<xsl:value-of select="wert" />
</fo:block>
</xsl:if>
</xsl:for-each>-->
</xsl:template>
<!-- end legende-->
<!--start foheader-->
<xsl:template name="foheader">
<xsl:param name="derwert" />
<fo:table-cell border-width="0.5mm" padding-left="1mm" border-style="solid"><xsl:text>
</xsl:text>
<fo:block font-size="9pt"
font-weight="bold"
language="en" hyphenate="true">
<xsl:variable name="header1">
<xsl:choose>
<xsl:when test="(contains(string($derwert),'\n'))">
<xsl:value-of select="substring-before($derwert,'\n') "/>
<xsl:text>
</xsl:text>
<xsl:value-of select="substring-after($derwert,'\n') "/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$derwert" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="header2">
<xsl:choose>
<xsl:when test="(contains(string($header1),'\n'))">
<xsl:value-of select="substring-before($header1,'\n') "/>
<xsl:text>
</xsl:text>
<xsl:value-of select="substring-after($header1,'\n') "/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$header1" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="(contains(string($header2),'\000'))">
<xsl:value-of select="substring-before($header2,'\000') "/>
<xsl:text>
</xsl:text>
<xsl:value-of select="substring-after($header2,'\000') "/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$header2" />
</xsl:otherwise>
</xsl:choose><xsl:text>
</xsl:text>
</fo:block>
</fo:table-cell><xsl:text>
</xsl:text>
</xsl:template>
<!--end foheader-->
</xsl:stylesheet>