2013-02-12 29 views
0

我有一個XHTML模板。 我想從XHTML模板創建一個XSL FO。 我該如何將XHTML轉換爲XSLFO? 我使用XHTML文件的字符串替換創建了XSL FO。 是否有可能爲沒有使用字符串替換的模板創建XSL FO? 以下是我的XHTML模板。如何從XHTML文件創建XSL FO?我怎樣才能將XHTML轉換爲XSLFO?

< div> 

{:header:}{:date:} 

< p> 

{:mailingattn:} < br /> 

{:facilityname:} < br /> 

{:facilitystreet:} < br /> 

{:facilitystreet2:} <br /> 

{:facilitycity:}, {:facilitystate:} {:facilityzip:} < br /> 

{:facilitycountry:} 

< /p> 

< br /> 

< p>abcd,</p> 

< p>The Department of abcd:< /p> 

< p>{:checkreturnreason:}< /p> 

< p>{:message:}< /p> 

< pnext>If you have any questions or need assistance, please feel free to abcd:< /pnext> 

< pnext>Sincerely, <br /> 

{:signature:} 

< /pnext> 

{:footer:} 

< /div> 

預定義的XSL FO模板

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

    < xsl:output method="xml"/> 


    < !-- 
    expects a rootpath attribute in one of the tags. this should correspond to the 
    physical path of the apps folder without the ending slash 
    --> 
    < xsl:variable name="rootpath" 
       select="//@rootpath" /> 


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

    < xsl:template match="div"> 
     < xsl:apply-templates/> 
    < /xsl:template> 


< xsl:template match="img"> 
    < fo:external-graphic height="auto" width="auto"> 
     < xsl:attribute name="src"> 
     < xsl:value-of select="concat($rootpath, substring-after(@src,'../..'))" /> 
     < /xsl:attribute> 
    < /fo:external-graphic> 
    < /xsl:template> 


    < xsl:template match="xsl:value-of"> 
    < xsl:copy-of select="." /> 
    < /xsl:template> 


    < xsl:template match="br"> 
    < fo:block> 
    < /fo:block> 
    < /xsl:template> 


    < xsl:template match="p"> 
    < fo:block space-before="8pt" space-after="4pt"> 
     < xsl:apply-templates/> 
    < /fo:block> 
    < /xsl:template> 

    < xsl:template match="pnext"> 
    < fo:block keep-with-next="always" space-before="8pt" space-after="4pt"> 
     < xsl:apply-templates/> 
    < /fo:block> 
    < /xsl:template> 


    < xsl:template match="table"> 
    < fo:table width="100%" font-family="Arial"> 
     < fo:table-body> 
     < xsl:for-each select="tr"> 
      < fo:table-row> 
      < xsl:for-each select="td"> 
       < xsl:variable name="width"> 
       < xsl:value-of select="@width"/> 
       < /xsl:variable> 
       < fo:table-cell padding-top='4pt' width="{$width}"> 
       < xsl:for-each select="span"> 
        < xsl:variable name="fsize"> 
        < xsl:value-of select="@size"/> 
        < /xsl:variable> 
        < fo:block font-size="{$fsize}pt" text-align="right"> 
        < xsl:apply-templates/> 
        < /fo:block> 
       < /xsl:for-each> 
       < /fo:table-cell> 
      < /xsl:for-each> 
      < /fo:table-row> 
     < /xsl:for-each> 
     < fo:table-row> 
      < fo:table-cell border=".2pt solid black"> 
      < /fo:table-cell> 
      < fo:table-cell border=".2pt solid black"> 
      < /fo:table-cell> 
     < /fo:table-row> 
     < /fo:table-body> 
    < /fo:table> 
    < /xsl:template> 


< /xsl:stylesheet> 
+0

請顯示您想要的XSL-FO以及您當前擁有的XSLT。 – 2013-02-12 13:31:04

+0

嗨丹尼爾我必須使用預定義的模板生成XSL FO。現在我在問題下面添加了預定義的模板。 – Krishnan 2013-02-12 13:36:22

+0

現在你的實際問題是什麼? – 2013-02-12 13:44:40

回答

0

這工作對我來說:

 // 
     // Transform well-stuctured XHTML into XSL-FO. 
     // 
     var trans = new XslCompiledTransform(); 
     var xml = new MemoryStream(); 
     XmlWriter writer = new XmlTextWriter(xml, System.Text.Encoding.Default); 

     var converterStream = File.Open("YourXsl.xsl"); 

     trans.Load(new XmlTextReader(converterStream));   

     // Load XHTML 
     var html = File.Open("YourHtml.html"); 

     var outputStream = new MemoryStream(Encoding.ASCII.GetBytes(viewOutput)); 

     outputStream.Position = 0; 

     using (var input = new XmlTextReader(outputStream)) { 
      // Transform XHTML to XSL-FO 
      trans.Transform(input, writer); 
      writer.Flush(); 
      xml.Position = 0; 

      // Do something with your XSL-FO 
     } 
1

http://www.ibm.com/developerworks/xml/library/x-xslfo2app/index.html

有一個全面的XSLT把XHTML轉換爲XSL-FO

總結:需要幫助將HTML文檔轉換爲PDF?本參考指南通過示例演示如何使用XSLT模板將45個常用HTML元素轉換爲格式化對象(來自XSL-FO詞彙表),以便使用XSLT輕鬆轉換爲PDF。這些示例假定您正在使用Apache XML Project的FOP工具,但大多數方法與其他XSL-FO工具一樣正常工作。