2012-02-25 14 views
6

Voglio trasformare xslt in xsl-fo ma non sono sicuro di poterlo fare. Provo a convertire una lista XML in una lista xsl-fo. Qualcuno può dirmi dove posso cercare sto cercando su Google per un lungo periodo? Non ci sono molti esempi di questo. Il mio XML è così.Trasformazione da xslt a xsl-fo

<p>TEXT</p> 
<ul> 
    <li>Item1</li> 
    <li>Item2</li> 
</ul> 
<p>ANOTHERTEXT</p> 

cerco utilizzare i modelli per questa trasformazione, ma i miei modelli non funzionano per ottenere XSL-FO Qualcuno può dirmi se i modelli lavorano in questa trasformazione. Se funzionano possono mostrarmi un esempio che non riesco a trovare nessuno. Il mio scopo principale è ottenere un bellimbusto pdf Pentecoste

Grazie


Questo fa parte del mio documento XML che hanno assegnato alcune parti della sorgente in HTML e cambiare HTML in XML ora cerco di convertire XML (Pentecoste un lista) in XSL-FO con un XSLT. Il mio problema è che non posso applicare modelli a questa trasformazione. Il mio obiettivo finale è ottenere un pdf con FOP.

Grazie

UPDATE

Questo è il mio XML:

<Memoria> 
    <name>TITLE</name> 
    <Index>INDEX 2010</Index> 
    <Seccion> 
    <name>INFORMATION</name> 
    <Contenido> 
     <p>TEXT</p> 
     <ul> 
    <li>ITEM1</li> 
    <li>ITEM2</li> 
     </ul> 
     <p>ANOTHER</p> 
    </Contenido> 
    </Seccion> 
</Memoria> 

sto testando la soluzione Grazie a tutti

+1

HTML non ha un dizionario 100% di XSL-FO. – driis

+0

Qual è il risultato esatto desiderato? Per favore, modifica la domanda e fornisci. Gli esperti XSLT raramente sono anche xsl-fo-cognizant. –

risposta

6

Se hai problemi con i modelli che non funziona, potrebbe essere un problema di spazio dei nomi. Dovresti aggiornare la domanda con un esempio più preciso del tuo XML.

Ecco un esempio.

input XML (fisso da ben formato-)

<root> 
    <p>TEXT</p> 
    <ul> 
    <li>Item1</li> 
    <li>Item2</li> 
    </ul> 
    <p>ANOTHERTEXT</p> 
</root> 

XSLT 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"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/root"> 
    <fo:root> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in"> 
      <fo:region-body margin="1in" margin-top="1.5in" margin-bottom="1.5in"/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="my-page"> 
     <fo:flow flow-name="xsl-region-body"> 
      <xsl:apply-templates/> 
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 

    <xsl:template match="p"> 
    <fo:block> 
     <xsl:apply-templates/> 
    </fo:block> 
    </xsl:template> 

    <xsl:template match="ul"> 
    <fo:list-block padding="4pt"> 
     <xsl:apply-templates/> 
    </fo:list-block> 
    </xsl:template> 

    <xsl:template match="li"> 
    <fo:list-item> 
     <fo:list-item-label end-indent="label-end()"> 
     <fo:block>&#x02022;</fo:block> 
     </fo:list-item-label> 
     <fo:list-item-body start-indent="body-start()"> 
     <fo:block> 
      <xsl:apply-templates/> 
     </fo:block> 
     </fo:list-item-body> 
    </fo:list-item>  
    </xsl:template> 
</xsl:stylesheet> 

uscita XSL-FO

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:layout-master-set> 
     <fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in"> 
     <fo:region-body margin="1in" margin-top="1.5in" margin-bottom="1.5in"/> 
     </fo:simple-page-master> 
    </fo:layout-master-set> 
    <fo:page-sequence master-reference="my-page"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:block>TEXT</fo:block> 
     <fo:list-block padding="4pt"> 
      <fo:list-item> 
       <fo:list-item-label end-indent="label-end()"> 
        <fo:block>•</fo:block> 
       </fo:list-item-label> 
       <fo:list-item-body start-indent="body-start()"> 
        <fo:block>Item1</fo:block> 
       </fo:list-item-body> 
      </fo:list-item> 
      <fo:list-item> 
       <fo:list-item-label end-indent="label-end()"> 
        <fo:block>•</fo:block> 
       </fo:list-item-label> 
       <fo:list-item-body start-indent="body-start()"> 
        <fo:block>Item2</fo:block> 
       </fo:list-item-body> 
      </fo:list-item> 
     </fo:list-block> 
     <fo:block>ANOTHERTEXT</fo:block> 
     </fo:flow> 
    </fo:page-sequence> 
</fo:root> 

uscita Apache FOP

enter image description here

0

In primo luogo, assicurarsi di avere un file XHTML (senza < br> eccetera). Quindi applica una trasformazione xslt per creare il file fo, quindi alimentalo per interromperlo e il pdf emerge.

frammento di XSLT fo stile:

<xsl:template match="html:body"> 
    <fo:page-sequence master-reference="all-pages"> 
     <fo:title> 
     <xsl:value-of select="/html:html/html:head/html:title"/> 
     </fo:title> 
     <fo:static-content flow-name="page-header"> 
     <fo:block font-weight="bold" font-size="16pt" space-before.conditionality="retain" xsl:use-attribute-sets="page-header"><!-- space-before="{$page-header-margin}" --> 
      <xsl:if test="$title-print-in-header = 'true'"> 
      <xsl:value-of select="/html:html/html:head/html:title"/> 
      </xsl:if> 
     </fo:block> 
     </fo:static-content> 
    </fo:page-sequence> 
    </xsl:template> 

Controllare http://www.w3schools.com/xslfo/default.asp per XSLFO sintassi.

Vedere http://xmlgraphics.apache.org/fop/trunk/running.html per informazioni su running fop; il download di fop.jar deve essere nelle vicinanze.

Esecuzione da VBA, ad esempio come segue:

Set shell = CreateObject("WScript.Shell") 
    cmd = "java -Dfop.home=" & baseDir & " -cp " & baseDir & "build\fop.jar org.apache.fop.cli.Main -fo " & foName & " -pdf " & pdfName 
Call shell.Run(cmd, vbWindowFrame, True) 

(in modo simile da linea di comando)