2012-02-25 65 views
6

Tôi muốn tạo một phép chuyển đổi xslt thành xsl-fo nhưng tôi không thực sự chắc chắn rằng tôi có thể làm điều này. Tôi cố gắng chuyển đổi một danh sách XML thành một danh sách xsl-fo. Bất cứ ai có thể cho tôi biết nơi tôi có thể tìm tôi đang googling trong một thời gian dài là không có rất nhiều ví dụ về điều này. XML của tôi là như thế này.Xslt để xsl-fo chuyển đổi

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

Tôi thử sử dụng mẫu cho phép chuyển đổi này nhưng mẫu của tôi không hoạt động để lấy xsl-fo Ai có thể cho tôi biết các mẫu có hoạt động trong chuyển đổi này hay không. Nếu họ làm việc có thể chỉ cho tôi một ví dụ tôi không thể tìm thấy bất cứ ai. objetive của tôi là có được một pdf whit FOP

Cảm ơn


Đây là một phần của tài liệu XML của tôi, tôi recived một số bộ phận của nguồn trong HTML và tôi thay đổi HTML sang XML bây giờ tôi cố gắng chuyển đổi XML (whit một danh sách) vào XSL-FO whit XSLT. Vấn đề của tôi là tôi không thể sử dụng các mẫu aply để chuyển đổi này. Objetive cuối cùng của tôi là có được một pdf whit FOP.

Cảm ơn

CẬP NHẬT

Đây là XML của tôi:

<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> 

Tôi đang thử nghiệm giải pháp của bạn Cảm ơn tất cả

+1

HTML không có một bản dịch 100% để XSL-FO. – driis

+0

Kết quả mong muốn chính xác là gì? Vui lòng chỉnh sửa câu hỏi và cung cấp. Các chuyên gia XSLT hiếm khi cũng là xsl-fo - nhận thức. –

Trả lời

6

Nếu bạn đang gặp vấn đề với các mẫu của bạn không làm việc, nó có thể là một vấn đề không gian tên. Bạn nên cập nhật câu hỏi với một ví dụ chính xác hơn về XML của bạn.

Đây là một ví dụ.

XML Input (cố định được cũng như hình thành)

<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> 

đầu ra 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> 

Apache FOP đầu ra

enter image description here

0

Trước tiên, hãy chắc chắn rằng bạn có một file xhtml (không < br> etcetera). Sau đó, áp dụng một phép chuyển đổi xslt để tạo tệp fo, sau đó cấp dữ liệu đó cho fop và pdf xuất hiện.

Snippet của XSLT fo phong cách:

<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> 

Kiểm tra http://www.w3schools.com/xslfo/default.asp cho xslfo cú pháp.

Xem http://xmlgraphics.apache.org/fop/trunk/running.html để biết thông tin về chạy fop; tải xuống fop.jar phải ở gần.

Chạy từ VBA ví dụ như sau:

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) 

(tương tự từ dòng lệnh)

Các vấn đề liên quan