2016-04-16 8 views
1

Ich bin neu in der XSL-FO-Programmierung und brauche Hilfe. Ich muss im Grunde eine XSL-FO-Datei in PDF mit Daten aus XML rendern.Konvertierung von XSL-FO nach PDF mit Apache FOP ausgehend von einer XML-Datei

Aber wenn ich versuche, erscheint alles richtig in der PDF (Hintergrund, manuell eingegebenen Text), aber nicht Daten, die aus XML gelesen werden sollten.

Beachten Sie, dass ich nur mit dem Element "idShip" versucht habe.

Meine XML-Datei:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE shipment SYSTEM "C:\Users\informatica\Documents\workspace\PrintTest\shipment.dtd"> 
<?xml-stylesheet href="shipment_to_pdf.xsl" ?> 

<shipment> 
    <idShip>111</idShip> 
    <fare></fare> 
    <to> 
     <name></name> 
     <surname></surname> 
     <address1></address1> 
     <address2></address2> 
     <zip></zip> 
     <city></city> 
     <country></country> 
     <email></email> 
     <phone></phone> 
    </to> 
    <from> 
     <name></name> 
     <surname></surname> 
    </from> 
</shipment> 

XSL:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <fo:layout-master-set> 
       <fo:simple-page-master page-height="135mm" 
        page-width="216mm" margin-top="10mm" margin-left="20mm" 
        margin-right="20mm" margin-bottom="10mm" master-name="PageMaster"> 
        <fo:region-body background-color="#EFAFAF" 
         margin-top="20mm" margin-left="10mm" margin-right="10mm" 
         margin-bottom="20mm" /> 

       </fo:simple-page-master> 
      </fo:layout-master-set> 
      <fo:page-sequence initial-page-number="1" 
       master-reference="PageMaster"> 
       <fo:flow flow-name="xsl-region-body"> 
        <fo:block text-indent="1em" font-family="sans-serif" 
         font-size="20pt" font-weight="bold" background-color="#EEEEEE" 
         line-height="20mm"> 

         //this should be the problem 
         <xsl:for-each select="shipment"> 
          <xsl:value-of select="idShip" /> 
         </xsl:for-each> 

        </fo:block> 
       </fo:flow> 


      </fo:page-sequence>  
</fo:root> 

PDF rechts macht jetzt als Block mit einem roten Hintergrund, aber keine Daten von XML.

+0

Was ist mit '/ shipment' und' idShip'? –

+0

Bereits versucht, dass :(es scheint, dass ich nicht eine xsl-Datei schreiben kann, die sowohl xsl-fo und xslt-Befehle enthält ... Aber wie gesagt, ich bin neu, also vielleicht fehlt mir etwas – Ekos

+0

Sie sind Mischen von XSL und XSL-FO. Es sind zwei nahe, aber verschiedene Dinge. XSL-FO ('.fo') -Datei sollte ein Produkt der Umwandlung sein:' XML> XSL> XSL-FO> PDF' Versuchen Sie, mit zu beginnen langsames Aufbauen der Datei 'test.fo' Normalerweise müssen Sie jeden Teil des XML, der im Ergebnis benötigt wird, mit einem XSL-Templates holen ... Zu breit für die Erklärung hier.Sie können sie wie Sie, aber in einem Stück mischen Anders sieht es aus: Sehen Sie das Diagramm [hier] (https://www.webucator.com/tutorial/learn-xsl-fo/formatting-objects-basics.cfm) und versuchen Sie [hier] zu folgen (http: // www. w3schools.com/xsl/) –

Antwort

1

Sie verwenden einen sogenannten vereinfachte XSLT Modul (XSLT 1.1 recommendation, XSLT 2.0 recommendation), die fast richtig ist, es die xsl:version Attribut in dem Wurzelelement nur fehlt.

Fügen Sie einfach xsl:version="1.0" zum fo:root Element (oder 2.0, wenn Sie die neuen Funktionen und Ihr XSLT-Prozessor unterstützt sie benötigen), und Sie sollten das erwartete Ergebnis.

Beachten Sie, dass ein vereinfachtes Stylesheet einige Einschränkungen aufweist, da Sie Parameter, globale Variablen, Funktionen (bei Verwendung von XSLT 2.0), Schlüssel und andere Vorlagen nicht definieren können.

Verwandte Themen