Jens: Wie bekomm ich nun aus XSL eine XSL-FO?

Hier meine Datei!

XSL <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/"> <html>  <head>  </head>  <body>   <div align="center"><font face="3 of 9 Barcode" size="6"><xsl:value-of select="tabelle/auftragsdaten/auftragsnr" /></font></div>   <div align="center">   <table width="600" border="1">    <tr>    <td>    <table width="610" border="1">     <tr>     <xsl:for-each select="tabelle/kopf">     <td width="120">      <b><div align="center"><img><xsl:attribute name="src"><xsl:value-of select="logo" /></xsl:attribute></img></div></b>     </td>     <td>     <b><p align="center">      <font face="Arial"><xsl:value-of select="heading/heading1" /></font>      <br/>      <font face="Courier New"><xsl:value-of select="heading/heading2" /></font>     </p></b>     </td>     <td width="120">      <font face="Arial"><small><b>Datum:</b></small></font>&#160;<font face="Courier New"><small><xsl:value-of select="info/datum" /></small></font>      <br/>      <font face="Arial"><small><b>Zeit:</b></small></font>&#160;&#160;&#160;&#160;&#160;&#160;<font face="Courier New"><small><xsl:value-of select="info/zeit" /></small></font>      <br/>      <font face="Arial"><small><b>Seite:</b></small></font>&#160;&#160;&#160;&#160;<font face="Courier New"><small><xsl:value-of select="info/seite" /></small></font>     </td>     </xsl:for-each>     </tr>    </table>    </td>    </tr>    <tr>    <td>    <table width="600" border="0">     <tr>     <xsl:for-each select="tabelle">     <td>      <font face="Arial"><small><b>Sicherungsmaßnahmen durchführen für: </b></small></font><font face="Courier New"><xsl:value-of select="simtyp"/></font>     </td>     </xsl:for-each>     </tr>     </table>    </td>    </tr>    <tr>    <td>    <table width="600" border="0">     <tr>     <xsl:for-each select="tabelle">     <td width="200">      <font face="Arial"><small><b>Paket: </b></small></font><font face="Courier New"><xsl:value-of select="anlagenort/paket"/></font>     </td>     <td width="200">      <font face="Arial"><small><b>Block: </b></small></font><font face="Courier New"><xsl:value-of select="anlagenort/block"/></font>     </td>     <td width="200">      <font face="Arial"><small><b>Anlage: </b></small></font><font face="Courier New"><xsl:value-of select="anlagenort/anlage"/></font>     </td>     </xsl:for-each>     </tr>    </table>    </td>    </tr>    <tr>    <xsl:for-each select="tabelle">    <td>    <table width="600" border="0">     <tr>     <td>     <table width="600" border="0">      <tr>      <td>       <font face="Arial">Auftrag/Vorgang: </font><font face="Courier New"><i><b><big><xsl:value-of select="auftragsdaten/auftragsnr"/></big></b></i></font>      </td>      <td>       <font face="Arial">Freischalt-Nr: </font><font face="Courier New"><i><b><big><xsl:value-of select="auftragsdaten/freischaltnr"/></big></b></i></font>      </td>      </tr>     </table>     </td>     </tr>     <tr>     <td>      <font face="Arial"><small><b>&#160;Kurztext: </b></small></font><font face="Courier New"><xsl:value-of select="auftragsdaten/kurztext"/></font>     </td>     </tr>     <tr>     <td>     <table width="600" border="0">      <tr>      <td>       <font face="Arial"><small><b>Anlagenteil: </b></small></font><font face="Courier New"><xsl:value-of select="auftragsdaten/anlagenteil"/></font>      </td>      <td>       <font face="Arial"><small><b>Kurzbezeichnung: </b></small></font><font face="Courier New"><xsl:value-of select="auftragsdaten/kurzbez"/></font>      </td>      </tr>     </table>     </td>     </tr>     <tr>     <td>      <font face="Arial"><small><b>&#160;Klartext: </b></small></font> <font face="Courier New"><xsl:value-of select="auftragsdaten/klartext"/></font>     </td>     </tr>     <tr>     <td>     <table width="600" border="0">      <tr>      <td>       <font face="Arial"><small><b>Ort: </b></small></font><font face="Courier New"><xsl:value-of select="auftragsdaten/ort"/></font>      </td>      <td>       <font face="Arial"><small><b>RKZ: </b></small></font><font face="Courier New"><xsl:value-of select="auftragsdaten/rkz"/></font>      </td>      </tr>     </table>     </td>     </tr>    </table>    </td>    </xsl:for-each>    </tr>    <xsl:for-each select="tabelle/gruppe">    <tr>    <td>    <table width="600" border="0">     <tr>     <td>     <table width="400" border="0">      <tr>      <td>       <font face="Courier New"><b><xsl:value-of select="definition"/></b></font>      </td>      </tr>      <tr>      <td>       <pre style="font-family:'Courier New';"><xsl:value-of select="element"/></pre>      </td>      </tr>     </table>     </td>     <td>      <font face="Arial"><small><b>__________________________</b></small></font>     </td>     </tr>    </table>    </td>    </tr>    </xsl:for-each>    <xsl:for-each select="tabelle">    <tr>    <td>     <font face="Courier New"><b>Sonstiges/Bemerkungen/besondere Massnahmen/Brandwachenmat.:</b></font><pre style="font-family:'Courier New';"><xsl:value-of select="sonstiges"/></pre>    </td>    </tr>    </xsl:for-each>    </table>   <br/>   <table width="620" border="1">    <tr>    <td width="250">     <p align="center"><font face="Arial"><b>Leitweg</b></font></p>    </td>    <td width="50">     <p align="center"><font face="Arial"><b>Abt.</b></font></p>    </td>    <td width="100">     <p align="center"><font face="Arial"><b>Datum</b></font></p>    </td>    <td width="50">     <p align="center"><font face="Arial"><b>Zeit</b></font></p>    </td>    <td width="150">     <p align="center"><font face="Arial"><b>Name</b></font></p>    </td>    </tr>    <tr>    <xsl:for-each select="tabelle/leitweg">    <th width="250" align="left" valign="top" >     <pre style="font-family:'Courier New';"><xsl:value-of select="lw"/></pre>    </th>    <th width="90" align="left" valign="top"  >     <pre style="font-family:'Courier New';"><xsl:value-of select="lwabt"/></pre>    </th>    <th width="60" align="left" valign="top"  >     <pre style="font-family:'Courier New';"><xsl:value-of select="lwdatum"/></pre>    </th>    <th width="50" align="left" valign="top" >     <pre style="font-family:'Courier New';"><xsl:value-of select="lwzeit"/></pre>    </th>    <th width="150" align="left" valign="top" >     <pre style="font-family:'Courier New';"><xsl:value-of select="lwname"/></pre>    </th>    </xsl:for-each>    </tr>

</table>   </div>

</body> </html> </xsl:template> </xsl:stylesheet>


Nun ist meine Frage! Wie bekomm ich aus diesen Datein eine XSL-FO so das ich dann mit hilfe von FOP eine PDF erzeugen kann! Mir ist der Unterschied absolut nicht klar! Und im Netz finde ich zur Zeit keine Beispiele die mir das verdeutlichen!

Auf http://www.hta-be.bfh.ch/~amrhein/XSL steht das ich mit hilfe von Saxon eine Fo Datei erstellen kann, aber bei mir steht dann immer der HTML Quell Code in der FO-Datei, und das ist ja wohl nicht richtig! Oder muß ich den ganzen Kladeradatsch per Hand transformieren? Dann wüßte ich gerne wie das gehen soll? Kann mir einer dazu ein Beispiel geben? Viele haben mir in vorherigen Threads gesagt ich müßte mich mit FO beschäftigen! Das habe ich auch gemacht, aber es kam bei mir nie eine PDF Datei zum Schluss raus!

Naja vielleicht erklärt sich einer von euch bereit mir zu Helfen und diesen großen Haufen in einen kleinen Umzuwandeln! Wie gesagt vor einer Woche wußte ich noch nicht mal was XML macht, und nun habe ich die HTML Ausgabe schon fertig, nur mit der PDF haperts noch! Und das ist das was ich brauche!!! Also danke erst einmal fürs zuhören! Und danke auch für eure etwaige Mithilfe! MfG Jens

  1. Hallo Jens,

    ich glaube Du hast das Prinzip noch nicht verstanden:

    Du benötigst ein XSLT-Stylesheet, das Dir statt HTML. XSL-FO erzeugt. Das musst du Dir selber schreiben, dass kann Dir kein Werkzeug abnehmen.

    Die Template Rules sehen dann eben statt so

    <xsl:template match="knoten">
    <html>
      <body>
    ....
    xsl:template

    so aus

    <xsl:template match="knoten">
      fo:block
     ....
    </xsl:template>

    Dann jagst du die FO-Datei durch FOP und schwupp gibts PDF gemäß dem vorgegebenn Layout

    Alles ganz einfach, wenn man weiss, wie man sein gewünschtes Layout mit FOP ausdrücken kann. Um die Beschäftigung mit XSL-FO kommst du nicht rum, ausser du beauftragst jemanden Dir Dein HTML-Layout 1:1 in XSL-FO umzusetzen.....

    Gruß
    Franz

    1. Ok ich glaube das habe ich jetzt drin! Nur wie sieht der Kopf der XSL-FO Datei aus?

      Ich habe es mal mit

      <?xml version="1.0" ?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

      Ist das so richtig?
      Wie muß dann der Rest aufgebaut sein? Habe da was von root und ästen gelesen!
      Kann ich auch per E-Mail an dich rantreten?

      MfG

      Jens

      1. Hallo Jens,

        <?xml version="1.0" ?>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

        Ist das so richtig?

        Na, hats denn funktioniert?

        Wie muß dann der Rest aufgebaut sein? Habe da was von root und ästen gelesen!

        Ja, und was ist nun das Problem bei den Ästen?

        Anbei mal ein Stylesheet, das eine Hallo-Welt-XML-Datei in FO transformiert. (s.u.)

        Aber das Konzept kann ich Dir jetzt gerade nicht erklären, sitze hier auffer Arbeit ;-) Und das ist doch ne recht komplexe Angelegenheit. Also um eine intensive Einarbeitung wirst Du nicht runkommen. Bei _konkreten_ Problemen, kannst Du dich ja dann wieder ans Forum wenden.

        XML:

        <?xml version="1.0" encoding="iso-8859-1"?>
        <gruss>Hallo Welt</gruss>

        XSLT

        <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format">
          <xsl:template match="/">
           fo:root
             fo:layout-master-set
               <fo:simple-page-master master-name="meineSeite"
                   page-width="21cm"
                   page-height="29.7cm"
                   margin="2cm">
               fo:region-body/
               <fo:region-after extent="1.5cm"/>
               </fo:simple-page-master>
             </fo:layout-master-set>

        <fo:page-sequence master-reference="meineSeite">
              <fo:static-content flow-name="xsl-region-after">
                fo:block
                  fo:page-number/
                </fo:block>
              </fo:static-content>
              <fo:flow flow-name="xsl-region-body">
                  xsl:apply-templates/
               </fo:flow>
             </fo:page-sequence>
           </fo:root>
          </xsl:template>

        <xsl:template match="gruss">
            fo:block
              <xsl:value-of select="."/>
            </fo:block>
          </xsl:template>
        </xsl:stylesheet>
          <xsl:template match="gruss">
            fo:block
              <xsl:value-of select="."/>
            </fo:block>
          </xsl:template>
        </xsl:stylesheet>

        Kann ich auch per E-Mail an dich rantreten?

        Da kann ich Dir erstmal auch nicht mehr erzählen... Das Medium ändert nichts..

        Gruß
        Franz

        PS: Na, Thomas kennste das wieder. Habs mal entwendet ;-)

        1. hallo Franz,

          fo:layout-master-set
                 <fo:simple-page-master master-name="meineSeite"

          ab da habe ich lachen müssen ;-)

          PS: Na, Thomas kennste das wieder. Habs mal entwendet ;-)

          hmm... *schwer kopf zerbrich* irgendwie kommt es mir auf eine merkwürdiga art recht bekannt vor :-)

          bzw. ich habe auch schon überlegt, dass ich jens eine der dateien poste *g*

          grüße
          thomas