2013-02-12 1 views
0

У меня есть шаблон XHTML. Я хочу создать XSL FO из шаблона XHTML. Как я могу преобразовать XHTML в XSLFO? Я создал XSL FO, используя замену строки XHTML File. Возможно ли создать XSL FO для шаблона без использования замены строки? Ниже представлен мой шаблон XHTML.Как создать XSL FO из файла XHTML? Как я могу преобразовать 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, который у вас есть. –

+0

Привет, Даниэль Мне нужно создать XSL FO с помощью предопределенного шаблона. Теперь я добавил предопределенный шаблон под вопрос. – Krishnan

+0

И какова ваша фактическая проблема сейчас? –

ответ

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) для легкого преобразования в PDF с использованием XSLT. В примерах предполагается, что вы используете инструмент FOP Apache XML Project, но большинство методов работают так же хорошо с другими инструментами XSL-FO.