0

XHTML テンプレートがあります。XHTML テンプレートから XSL FO を作成したいと考えています。XHTML を XSLFO に変換するにはどうすればよいですか? XHTMLファイルの文字列置換を利用してXSL FOを作成しました。文字列置換を使用せずにテンプレートの XSL FO を作成することは可能ですか? 以下は私のXHTMLテンプレートです。

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

2 に答える 2

1

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

XHTML を XSL-FO に変換するための包括的な XSLT があります。

概要: HTML 文書を PDF に変換するのに助けが必要ですか? このリファレンス ガイドでは、XSLT テンプレートを使用して一般的に使用される 45 の HTML 要素を (XSL-FO ボキャブラリから) 書式設定オブジェクトに変換し、XSLT を使用して PDF に簡単に変換する方法を例を挙げて示します。例では、Apache XML Project の FOP ツールを使用していることを前提としていますが、ほとんどの方法は他の XSL-FO ツールでも同様に機能します。

于 2013-03-27T10:12:17.190 に答える
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
        }
于 2013-02-12T14:03:25.613 に答える