<?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 > 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 > 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 > 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' ]) > 0"> <xsl:choose> <xsl:when test="count(sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '4']) > 0"> <xsl:text>4</xsl:text> </xsl:when> <xsl:when test="count(sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '3']) > 0"> <xsl:text>3</xsl:text> </xsl:when> <xsl:when test="count(sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '2']) > 0"> <xsl:text>2</xsl:text> </xsl:when> <xsl:when test="count(sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '1']) > 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) > 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>: </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) < 50"> <![CDATA[]]><xsl:value-of select="value_caption" /><![CDATA[]]> </xsl:if> <xsl:if test="string-length(value_caption) > 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> ; </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>