hh: xsl mit html zu xsl:fo - Software bzw. Referenzseiten?

Hallo,

ich habe meine xsl:stylesheets vorliegen mit <xsl:output method="html"/>. Nun möchte ich aber auch, dass die entsprechende Auswertung als pdf ausgegeben wird. Die PDF-Erstellung erfoglt durch FOP (Habe nun FOP einigermaßen am laufen, leider nur mit win2003 server und asp, anstatt mit ubuntu und php5, apache2 tomcat, aber das ist eine andere Sache ;-). Da auch in der PDF-Ausgabe einige Sachen anders aussehen sollen (Seitenkopf, links usw.), muss ich sowieso die xsl:fo stylesheets anpassen.

Nun meine Frage, gibt es Software, die eine Konvertierung zu xsl:fo durchführen kann (Beispiel:<tr> in fo:table-row)? Ich vermute bald nicht, da ich nicht fündig geworden bin. Das bedeutet also manuell anpassen, was mich zur zweiten Frage führt.

Gibt es eine gute Seite, in der alle fo: elemente erklärt werden, damit ich nicht bei jeder Frage einen Forumseintrag generieren muss ;-) Sind eigentlich alle xsl elemente und xpath funktionen & syntax auch in xsl:fo bzw. mit fop möglich?

Gruß, Holger

  1. Hallo,

    Nun meine Frage, gibt es Software, die eine Konvertierung zu xsl:fo durchführen kann (Beispiel:<tr> in fo:table-row)? Ich vermute bald nicht, da ich nicht fündig geworden bin.

    Eine Moeglichkeit waere das Laden der HTML-Seite in Word 2003 mit Ausgabe als WordML und anschließender Konvertierung nach XSL-FO. Alternativ RTF produzieren und dann RTF2FO bemuehen.

    Gibt es eine gute Seite, in der alle fo: elemente erklärt werden, damit ich nicht bei jeder Frage einen Forumseintrag generieren muss ;-)

    Diese Tutorials bieten viel:
    http://www.w3schools.com/xslfo/
    http://www.data2type.de/xml/XSL-FO.html
    http://www.ibiblio.org/xml/books/bible2/chapters/ch18.html

    Ansonsten in der Spezifikation nachschlagen.

    Sind eigentlich alle xsl elemente und xpath funktionen & syntax auch in xsl:fo bzw. mit fop möglich?

    Die XSLT-Elemente und XPath gibt es in FO nicht, aber man kann XML-Dokumente mittels XSLT nach FO transformieren und dann ueber einen Formatter die Ausgabe in Formate wie PDF erreichen.

    Dieser Vergleich von Formatter-Software behandelt auch FOP.

    MfG, Thomas

    1. Hallo Thomas,

      vielen Dank für deine Antwort. Viel Nachtlektüre ;-)

      " Die XSLT-Elemente und XPath gibt es in FO nicht, aber man kann XML-Dokumente mittels XSLT nach FO transformieren und dann ueber einen Formatter die Ausgabe in Formate wie PDF erreichen."

      Hm, ich will ein xsl-fo konformes stylesheet schreiben, welches ich dann über den fop mit der befehlszeile

      fop -xml quelle.xml -xsl quellexsl-fokonform.xsl -pdf ergebnis.pdf

      aufrufen. Kann man da wirklich nicht xsl elemente und xpath verwenden? dann brauch ich erst gar nicht anfangen ;-(

      Gruß, Holger

      1. Hallo,

        fop -xml quelle.xml -xsl quellexsl-fokonform.xsl -pdf ergebnis.pdf

        aufrufen. Kann man da wirklich nicht xsl elemente und xpath verwenden?

        Der XSLT-Prozess erzeugt FO und sofern von der Software unterstuetzt, kann direkt PDF generiert werden. FOP kann das (AFAIK ist dort der XSLT-Prozessor Xalan angebunden) und auch der XSLFormatter von AntennaHouse.

        Insofern kommen durchaus xsl:elemente und XPath-Regeln vor, allerdings nicht mehr in einem standalone *.fo-Dokument (und das meinte ich).

        Das Grundgeruest des XSL-Dokuments sieht dann uebelicherweise so aus:

          
        <?xml version="1.0" encoding="ISO-8859-1"?>  
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">  
          
        <xsl:output method="xml" ... />  
          
        <xsl:template match="/">  
          
          <fo:root>  
            <!-- Generierung der FO-Inhalte -->  
          </fo:root>  
          
        </xsl:template>  
          
        </xsl:stylesheet>
        

        MfG, Thomas

  2. Hallo,

    Die PDF-Erstellung erfoglt durch FOP [...]

    Nun meine Frage, gibt es Software, die eine Konvertierung zu xsl:fo durchführen kann (Beispiel:<tr> in fo:table-row)?

    Ich würde hier an deiner Stelle das Ergebnis der (einer) Transformation nicht nochmal transformieren  und das Ergebnis nochmal transformieren: also nicht XML --> HTML --> XSL-FO --> PDF, sondern XML --> XSLT (-->XSL-FO) --> PDF anstreben.

    D.h. du schreibst ein zweites XSLT, dass dein XML nach XSL-FO transformiert.
    FOP unterstützt ja das Aufrufen einer XML-Datei mit einer XSLT-Datei, wobei die Umwandlung nach XSL-FO intern geschiet, und generiert so die PDF-Datei.

    Gibt es eine gute Seite, in der alle fo: elemente erklärt werden, damit ich nicht bei jeder Frage einen Forumseintrag generieren muss ;-)

    Die Sepz.? ;-)
    Für FOP wird dich besondern die Seite http://xmlgraphics.apache.org/fop/compliance.html iteressieren.

    Eine Tutorial findest du z.B. unter http://www.renderx.net/Content/support/xep/tutorial.html (oder: http://www.renderx.com/tutorial.html)

    Grüße
    Thomas

    1. Hallo Thomas,

      wie immer natürlich besten Dank für die Links! Viel Stoff zum lesen ;-)

      Ich hatte es mir auch so vorgestellt (xml - xsl-fo - pdf & xml - xsl- html), dass ich ein zweites xsl-fo konformes Stylesheet schreibe. Allerdings wäre es schön, wenn ich dieses zweite Stylesheet mit einem Konvertierprogramm erst einmal aus den bestehenden stylesheets erstellen könnte (sozusagen als Vorlage). Nun gut, werde mich daran machen, heute abend die html stylesheets xsl-fo konform zu schreiben.

      Aber stimmt es wirklich, dass ich keine xsl elemente und xpath in einem xsl-fo stylesheet verwenden kann (siehe Antwort von Thomas M. - oder habe ich mich nur unverständlich in meiner Frage gegeben)? Dann bräuchte ich erst gar nicht anfangen ;-(

      Grüße,

      Holger

      1. Hallo,

        Allerdings wäre es schön, wenn ich dieses zweite Stylesheet mit einem Konvertierprogramm erst einmal aus den bestehenden stylesheets erstellen könnte (sozusagen als Vorlage).

        Würde ich nicht machen, weil die anschießende Bearbeitung und Korrektur und/oder Fehlersuche mehr Zeit in Anspruch nimmt, als wenn du ein neues XSLT schreibst.

        Aber stimmt es wirklich, dass ich keine xsl elemente und xpath in einem xsl-fo stylesheet verwenden kann (siehe Antwort von Thomas M. - oder habe ich mich nur unverständlich in meiner Frage gegeben)? Dann bräuchte ich erst gar nicht anfangen ;-(

        Du hast die Antwort missverstanden. Zu Thomas bereits vorhandenen Antwort auf diese Frage, hier ein Beispiel:

        XML-Datei:
        ---
        <?xml version="1.0" encoding="iso-8859-1"?>
        <text>Meine erste XSL-FO Seite</text>
        ---

        XSL-Datei, dass als Ausgabe ein XSL-FO-Dokument zu/aus diesem XML erzugt:
        ---
        <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format">
          <xsl:output method="xml" indent="yes" encoding="iso-8859-1" />
          <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="text">
            fo:block
              <xsl:value-of select="."/>
            </fo:block>
          </xsl:template>
        </xsl:stylesheet>
        ---

        Du kannst natürlich direkt ohne Umweg eine XSL-FO Datei schreiben, aber dann muss du darin auch die Inhalte (die sonst im XML stehen) direkt hineinschreiben.
        Hier die XSL-FO Datei, die entweder aus dem XML mit der XSLT erzeugt oder direkt so wie sie ist (von Hand in einem Editor) geschrieben werden kann.
        (FOP übernimmt die Arbeit, eine FO-Datei zu erzeugen (er macht das intern) und so kannst du XML-->XSLT-->PDF generieren)
        ---
        <?xml version="1.0"?>
         <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
             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">
                  fo:block
                   Meine erste XSL-FO Seite
                  </fo:block>
               </fo:flow>
             </fo:page-sequence>
         </fo:root>
        ---

        Grüße
        Thomas