1

次のxmlファイルの場合、pdfに変換するxsl-foファイルを生成する必要があります。

私はスタイルシートに不慣れで、動的テーブルの作成に苦労しています。助けてください。

また、各列の幅は列によって異なりますが、これをコードに含めるにはどうすればよいですか?

列ヘッダーと列値は、xmlファイルに動的に入力されます。以下はサンプルです。

誰かがxsl-foまたはxsltコードの生成を手伝ってもらえますか?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ReportData>

    <ColumnHeaders>
       <ColumnHeader>
           <Name>Col-Header1</Name>
           <Width>5</Length>
       </ColumnHeader>
       <ColumnHeader>
           <Name>Col-Header2</Name>
           <Width>10</Length>
       </ColumnHeader>
       <ColumnHeader>
           <Name>Col-Header3</Name>
           <Width>8</Length>
        </ColumnHeader>
    </ColumnHeaders>

<Rows>
       <Row>
          <Column>Row1-Col1</Column>
          <Column>Row1-Col2</Column>
          <Column>Row1-Col3</Column>              
       </Row>
       <Row>
          <Column>Row2-Col1</Column>
          <Column>Row2-Col2</Column>
          <Column>Row2-Col3</Column>
       </Row>
    </Rows>
</ReportData>
4

1 に答える 1

7

これで始められるはずです。列幅に使用cmしましたが、ページは11 "x 8.5"(横向き)なので、テーブルはページに収まります。これは簡単に変更できるはずです。

XML入力(整形式に修正)

<ReportData>

    <ColumnHeaders>
        <ColumnHeader>
            <Name>Col-Header1</Name>
            <Width>5</Width>
        </ColumnHeader>
        <ColumnHeader>
            <Name>Col-Header2</Name>
            <Width>10</Width>
        </ColumnHeader>
        <ColumnHeader>
            <Name>Col-Header3</Name>
            <Width>8</Width>
        </ColumnHeader>
    </ColumnHeaders>

    <Rows>
        <Row>
            <Column>Row1-Col1</Column>
            <Column>Row1-Col2</Column>
            <Column>Row1-Col3</Column>              
        </Row>
        <Row>
            <Column>Row2-Col1</Column>
            <Column>Row2-Col2</Column>
            <Column>Row2-Col3</Column>
        </Row>
    </Rows>
</ReportData>

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="/">
        <fo:root>
            <fo:layout-master-set>
                <fo:simple-page-master master-name="my-page" page-height="8.5in" page-width="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="ReportData">
        <fo:table>
            <fo:table-header>
                <fo:table-row>
                    <xsl:apply-templates select="ColumnHeaders/ColumnHeader"/>                  
                </fo:table-row>
            </fo:table-header>
            <fo:table-body>
                <xsl:apply-templates select="Rows/Row"/>
            </fo:table-body>
        </fo:table>
    </xsl:template>

    <xsl:template match="ColumnHeader">
        <fo:table-cell width="{Width}cm" border="solid black 1px" padding="2px" font-weight="bold" text-align="center">
            <fo:block><xsl:value-of select="Name"/></fo:block>
        </fo:table-cell>
    </xsl:template>

    <xsl:template match="Row">
        <fo:table-row>
            <xsl:apply-templates/>
        </fo:table-row>
    </xsl:template>

    <xsl:template match="Column">
        <fo:table-cell border="solid black 1px" padding="2px">
            <fo:block><xsl:value-of select="."/></fo:block>
        </fo:table-cell>
    </xsl:template>     

</xsl:stylesheet>

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-height="8.5in" page-width="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:table>
            <fo:table-header>
               <fo:table-row>
                  <fo:table-cell width="5cm"
                                 border="solid black 1px"
                                 padding="2px"
                                 font-weight="bold"
                                 text-align="center">
                     <fo:block>Col-Header1</fo:block>
                  </fo:table-cell>
                  <fo:table-cell width="10cm"
                                 border="solid black 1px"
                                 padding="2px"
                                 font-weight="bold"
                                 text-align="center">
                     <fo:block>Col-Header2</fo:block>
                  </fo:table-cell>
                  <fo:table-cell width="8cm"
                                 border="solid black 1px"
                                 padding="2px"
                                 font-weight="bold"
                                 text-align="center">
                     <fo:block>Col-Header3</fo:block>
                  </fo:table-cell>
               </fo:table-row>
            </fo:table-header>
            <fo:table-body>
               <fo:table-row>
                  <fo:table-cell border="solid black 1px" padding="2px">
                     <fo:block>Row1-Col1</fo:block>
                  </fo:table-cell>
                  <fo:table-cell border="solid black 1px" padding="2px">
                     <fo:block>Row1-Col2</fo:block>
                  </fo:table-cell>
                  <fo:table-cell border="solid black 1px" padding="2px">
                     <fo:block>Row1-Col3</fo:block>
                  </fo:table-cell>
               </fo:table-row>
               <fo:table-row>
                  <fo:table-cell border="solid black 1px" padding="2px">
                     <fo:block>Row2-Col1</fo:block>
                  </fo:table-cell>
                  <fo:table-cell border="solid black 1px" padding="2px">
                     <fo:block>Row2-Col2</fo:block>
                  </fo:table-cell>
                  <fo:table-cell border="solid black 1px" padding="2px">
                     <fo:block>Row2-Col3</fo:block>
                  </fo:table-cell>
               </fo:table-row>
            </fo:table-body>
         </fo:table>
      </fo:flow>
   </fo:page-sequence>
</fo:root>

PDF出力

ここに画像の説明を入力してください

于 2013-03-19T21:44:08.223 に答える