格式化需要在xsl中完成

时间:2012-11-05 17:49:25

标签: xml xslt

我有以下pdf报告,该报告由xsl文件构成,xsl文件定义下面这个pdf报告的样式是url,请查看pdf报告.. Pdf Report

使用的xsl文件是..

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:set="http://exslt.org/sets" extension-element-prefixes="set" exclude-result-prefixes="fo">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/>
   <xsl:template match="/">
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
      <fo:layout-master-set>
        <fo:simple-page-master master-name="A4" page-width="21cm" page-height="29.7cm" margin-top="2cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm">
           <fo:region-body margin-bottom="2cm" margin-top="4cm"/>
          <fo:region-after extent="2cm"/>
          <fo:region-before extent="4cm"/>
        </fo:simple-page-master>
              </fo:layout-master-set>
      <fo:page-sequence master-reference="A4" initial-page-number="1">
        <fo:static-content flow-name="xsl-region-after">
            <fo:block border-bottom-style="solid" 
                               text-align="left" font-size="9pt"  >
               </fo:block>
          <fo:block font-size="9pt" text-align="end">
            <fo:table table-layout="fixed">
              <fo:table-column column-width="9.5cm"/>
              <fo:table-column column-width="9.5cm"/>
               <fo:table-body>
                <fo:table-row>
                        <fo:table-cell
                                        text-align="center">
                    <fo:block text-align="left">
                                            Run:
                                    <xsl:value-of select="substring(  DepartmentSalesReport/CurrentDate , 6, 2 )" />
                                        /
                                    <xsl:value-of select="substring(  DepartmentSalesReport/CurrentDate , 9, 2 )" />
                                        /
                                    <xsl:value-of select="substring(  DepartmentSalesReport/CurrentDate , 1, 4 )" />
                                        @
                                    <xsl:value-of select="DepartmentSalesReport/currentTime" />
                                        </fo:block>
                            </fo:table-cell>
                   <fo:table-cell text-align="right">
                    <!--fo:block space-before="8mm">
                      <xsl:text>Keep this report for 6 months</xsl:text>
                    </fo:block-->
                  </fo:table-cell>
                  <fo:table-cell >
                    <fo:block space-before="8mm">Page <fo:page-number/> of <fo:page-number-citation ref-id="terminator"/></fo:block>
                  </fo:table-cell>
                </fo:table-row>
              </fo:table-body>
            </fo:table>

          </fo:block>
        </fo:static-content>

        <fo:static-content flow-name="xsl-region-before">
          <fo:block text-align-last="center" space-after="1.5cm">
            <fo:table table-layout="fixed">
              <fo:table-column column-width="4cm"/>
              <fo:table-column column-width="10cm"/>
               <fo:table-column column-width="2cm"/>
               <fo:table-column column-width="2cm"/>
              <fo:table-body>
                <fo:table-row>
                  <fo:table-cell  font-size="9pt">
                    <fo:block>Store Number:
                      <xsl:value-of select="DepartmentSalesReport/store_code"/>
                    </fo:block>
                  </fo:table-cell>
                   <fo:table-cell text-align="center">
                             <fo:block  text-align-last="center" font-size="14pt" font-weight="bold" space-after="1mm">
                                <fo:inline text-decoration="underline">Department Sales Report</fo:inline>
                               </fo:block>
                  </fo:table-cell>
                  <fo:table-cell text-align="right"   font-size="9pt">
                     <fo:block > 
                        <xsl:value-of select="DepartmentSalesReport/tradingday"/>   
                     </fo:block>
                  </fo:table-cell>
                  <fo:table-cell text-align="right" font-size="9pt">
                    <xsl:variable name="date"><xsl:value-of select="DepartmentSalesReport/tradingdate"/></xsl:variable>
                    <fo:block> 
                        <xsl:value-of select="substring($date,5,2)"/>/<xsl:value-of select="substring($date,7,2)"/>/<xsl:value-of select="substring($date,1,4)"/>
                    </fo:block>
                  </fo:table-cell>
                </fo:table-row>
              </fo:table-body>
            </fo:table>
          <fo:table table-layout="fixed">
              <fo:table-column column-width="19cm"/>
          <fo:table-body>
                <fo:table-row>
                   <fo:table-cell text-align="center">
                                      <fo:block text-align-last="center" font-size="9pt" >
                                        Summary of Sales by department, only those
                                            departments with activity (Sales,
                                            refunds, voids) will appear on this
                                            report.Use this report to monitor sales in
                                            key departments and make merchandising
                                            decisions as needed.
                          </fo:block>
                  </fo:table-cell>
                </fo:table-row>
              </fo:table-body>
            </fo:table>
          </fo:block>
          <fo:block font-size="9pt" >
           <fo:table table-layout="fixed" >
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-column
                                column-width="6cm"
                                text-align="center"/>
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-column
                                column-width="1.8cm" 
                                text-align="center"/>
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-column
                                column-width="1.6cm"
                                text-align="center"/>
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-body>
                            <fo:table-row>
                            <fo:table-cell number-columns-spanned="9"> <fo:block color="black"
                        space-before.optimum="-8pt">
                        <fo:block border-bottom-style="solid" 
                               text-align="left" font-size="9pt"  />

                    </fo:block></fo:table-cell>
                            </fo:table-row>
                            <fo:table-row font-weight="bold">
                                <fo:table-cell number-columns-spanned="2">
                            <fo:block text-align="left"><xsl:text>-------------------------Department-------------------</xsl:text></fo:block>
                            </fo:table-cell>
                            <fo:table-cell number-rows-spanned="2">
                            <fo:block text-align="right"><xsl:text>Net Sales</xsl:text></fo:block>
                            </fo:table-cell>
                            <fo:table-cell number-rows-spanned="2">
                            <fo:block text-align="right"><xsl:text>Qty</xsl:text></fo:block>
                            </fo:table-cell>
                            <fo:table-cell number-rows-spanned="2">
                            <fo:block text-align="right"><xsl:text>% of Sales</xsl:text></fo:block>
                            </fo:table-cell>
                            <fo:table-cell number-columns-spanned="2">
                            <fo:block text-align="right"><xsl:text>--------Void--------</xsl:text></fo:block>
                            </fo:table-cell>
                                <fo:table-cell number-columns-spanned="2">
                            <fo:block text-align="right"><xsl:text>-------Return-------</xsl:text></fo:block>
                            </fo:table-cell>        
                                </fo:table-row>
                                <fo:table-row font-weight="bold">
                                    <fo:table-cell>
                                            <fo:block text-align="left">
                                                <xsl:text>#</xsl:text>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block text-align="left">
                                                <xsl:text>Description</xsl:text>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block text-align="right">
                                                <xsl:text>Qty</xsl:text>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block text-align="right">
                                                <xsl:text>Amount</xsl:text>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block text-align="right">
                                                <xsl:text>Qty</xsl:text>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block text-align="right">
                                                <xsl:text>Amount</xsl:text>
                                            </fo:block>
                                        </fo:table-cell>
                                </fo:table-row>
                    <fo:table-row >
                            <fo:table-cell number-columns-spanned="9" > <fo:block color="black"
                        space-before.optimum="-8pt">

                    </fo:block></fo:table-cell>
                            </fo:table-row>

                            </fo:table-body>
                            </fo:table>
          </fo:block>
          <fo:block border-bottom-style="solid" 
                               text-align="left" font-size="9pt"  />



     </fo:static-content>


        <fo:flow flow-name="xsl-region-body">
        <xsl:variable name="storeSales" select="sum(DepartmentSalesReport/DepartmentDesc/netSales)"/>
        <br/>
          <!--          <fo:block font-size="9pt" space-after="3mm" break-before="page">-->
            <xsl:for-each select="DepartmentSalesReport/DepartmentDesc">
                    <fo:block font-size="9pt" space-after="1mm">
                    <fo:table table-layout="fixed" >
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-column
                                column-width="6cm"
                                text-align="center"/>
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-column
                                column-width="1.8cm" />
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-column
                                column-width="1.6cm" />
                            <fo:table-column
                                column-width="1.6cm"
                                text-align="center"/>
                            <fo:table-column
                                column-width="1.6cm" />
                    <fo:table-body>
                        <xsl:variable name="levelNo"><xsl:value-of select="levelNbr"/></xsl:variable>
                                <xsl:variable name="levelCheck"><xsl:value-of select="level"/></xsl:variable>
                                <xsl:if test="$levelCheck!=''">
                                    <xsl:if test="$levelNo='2'">
                                    <fo:table-row>  
                                    <fo:table-cell number-columns-spanned="9">
                                    <fo:block>
                                           <xsl:text>&#160;</xsl:text>
                                    </fo:block>
                                    </fo:table-cell>
                                    </fo:table-row>
                                </xsl:if>
                     <fo:table-row >
                                        <fo:table-cell>
                                            <fo:block text-align="left">
                                                <xsl:value-of select="level"/>
                                            </fo:block>
                                        </fo:table-cell>

                                        <xsl:choose>
                                        <xsl:when test="$levelNo!='2'">
                                        <fo:table-cell>
                                            <fo:block text-align="left">
                                                <xsl:value-of select="prgpName"/>
                                            </fo:block>
                                        </fo:table-cell>
                                            </xsl:when>
                                        <xsl:otherwise>
                                            <fo:table-cell>
                                                <fo:block text-align="left">
                                                    ***DEPT TOTAL*** </fo:block>
                                            </fo:table-cell>
                                        </xsl:otherwise>
                                            </xsl:choose>
                                        <fo:table-cell>
                                            <fo:block text-align="right">
                                                <xsl:value-of
                                                    select="format-number(netSales,'0.00')"/>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block text-align="right">
                                                <xsl:value-of
                                                    select="format-number(prodCount,'0')"/>
                                            </fo:block>
                                        </fo:table-cell>


                                        <fo:table-cell>
                                            <xsl:variable name="salesPercentage"><xsl:value-of select="format-number((netSales div $storeSales)*100, '###,##0')"/></xsl:variable>
                                            <xsl:if test="$salesPercentage='NaN'">
                                            <fo:block text-align="right">
                                                <xsl:text>0</xsl:text>
                                            </fo:block>
                                            </xsl:if>
                                            <xsl:if test="$salesPercentage!='NaN'">
                                            <fo:block text-align="right">
                                                <xsl:value-of
                                                    select="$salesPercentage"/>
                                            </fo:block>
                                            </xsl:if>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block text-align="right">
                                                <xsl:value-of
                                                    select="format-number(postVoidQuantity,'0')"/>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block text-align="right">
                                                <xsl:value-of
                                                    select="format-number(postVoidAmount,'0.00')"/>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block text-align="right">
                                                <xsl:value-of
                                                    select="format-number(returnQuantity,'0')"/>
                                            </fo:block>
                                        </fo:table-cell>
                                        <fo:table-cell>
                                            <fo:block text-align="right">
                                                <xsl:value-of
                                                    select="format-number(returnAmount,'0.00')"/>
                                            </fo:block>
                                        </fo:table-cell>
                                    </fo:table-row>
                        <xsl:if test="$levelNo='2'">
                                    <fo:table-row>  
                                    <fo:table-cell number-columns-spanned="9">
                                    <fo:block>
                                           <xsl:text>&#160;</xsl:text>
                                    </fo:block>
                                    </fo:table-cell>
                                    </fo:table-row>
                                </xsl:if>
                                    </xsl:if>
                    </fo:table-body>

                  </fo:table>
                </fo:block>

            </xsl:for-each>
        <fo:block border-bottom-style="solid" 
                               text-align="left" font-size="9pt"  />
           <fo:block  font-size="9pt" space-after="1mm" space-before="2mm">

<fo:table>
<fo:table-column column-width="1.5cm"/>
<fo:table-column column-width="4.5cm"/>

<fo:table-header>
  <fo:table-row>
    <fo:table-cell>
      <fo:block font-weight="bold"></fo:block>
    </fo:table-cell>
    <fo:table-cell>
     <fo:block text-align="left" space-after="1.5mm">
     <xsl:text>DEPARTMENT TOTALS</xsl:text></fo:block>
    </fo:table-cell>
  </fo:table-row>
</fo:table-header>

<fo:table-body>
  <fo:table-row>
    <fo:table-cell>
      <fo:block></fo:block>
    </fo:table-cell>
    <fo:table-cell>
      <fo:block><xsl:text>SS SALES</xsl:text> <xsl:value-of select="DepartmentSalesReport/store_code"/></fo:block>
    </fo:table-cell>
  </fo:table-row>
  <fo:table-row>
    <fo:table-cell>
      <fo:block></fo:block>
    </fo:table-cell>
    <fo:table-cell>
      <fo:block><xsl:text>CIGARETTE SALES</xsl:text></fo:block>
    </fo:table-cell>
  </fo:table-row>
   <fo:table-row>
    <fo:table-cell>
      <fo:block></fo:block>
    </fo:table-cell>
    <fo:table-cell>
      <fo:block space-after="1.5mm"><xsl:text>LIQUOR SALES</xsl:text></fo:block>
    </fo:table-cell>
  </fo:table-row>
   <fo:table-row>
    <fo:table-cell>
      <fo:block></fo:block>
    </fo:table-cell>
    <fo:table-cell>
      <fo:block><xsl:text>TOTAL FRONT END SALES</xsl:text></fo:block>
    </fo:table-cell>
  </fo:table-row>

</fo:table-body>

</fo:table>

</fo:block>



              <fo:block space-before="5mm" text-align="center" font-size="9pt" font-weight="bold" id="terminator">
                 <xsl:text></xsl:text>
          </fo:block>

        </fo:flow>

      </fo:page-sequence>
    </fo:root>
  </xsl:template>

</xsl:stylesheet>

现在我已在当前​​报告中添加了新行,如此链接所示,Modified Report,但请告知您还看到我想要将59997打印在SS SALES的前面如红色箭头所示,请告知需要在xsl中进行哪些修改才能实现,对于知识目的,数值为59997来自xsl <fo:block><xsl:text>SS SALES</xsl:text> <xsl:value-of select="DepartmentSalesReport/store_code"/></fo:block>请告知如何显示前面的值和格式为了这个目的,我想在现在的xsl中完成。

请告诉伙计们,因为这个因为我被困住了!! !!任何帮助都会得到我心底的赞赏。!!

下面是xml,请查看..!

<?xml version="1.0" encoding="UTF-8"?>
<Report Name="DepartmentSalesReport" Title="Department Sales Report"
    Description="Department Sales Report" Version="1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <InitParam Name="tradingdate" Type="java.lang.String" />
      <InitParam Name="tradingday" Type="java.lang.String" />
      <ReportBand BandType="HeaderBand" Name="DepartmentSalesReportBand">
        <ReportElement Type="Header" DataSource="OutletSQL">
        <DataField Name="store_code" Type="Data" FieldName="ORGU_CODE" />
        </ReportElement>
        <ReportElement Type="Header" DataSource="InitParams">
        <DataField Name="tradingdate" Type="Data" FieldName="tradingdate" />
        </ReportElement>
        <ReportElement Type="Header" DataSource="InitParams">
        <DataField Name="tradingday" Type="Data" FieldName="tradingday" />
        </ReportElement>
    </ReportBand>
    <ReportBand BandType="DetailBand" Name="Terminal">
        <ReportElement Type="Detail" Name="DepartmentDesc" DataSource="DataSql">
            <DataField Name="level" Type="Data" FieldName="LEVEL"/>
            <DataField Name="levelNbr" Type="Data" FieldName="LEVELNBR"/>
            <DataField Name="prgpName" Type="Data" FieldName="PRGP_NAME"/>
            <DataField Name="prodCount" Type="Data" FieldName="PROD_COUNT"/>
            <DataField Name="netSales" Type="Data" FieldName="NET_SALES"/>
            <DataField Name="postVoidQuantity" Type="Data" FieldName="POST_VOID_QUANTITY"/>
            <DataField Name="postVoidAmount" Type="Data" FieldName="POST_VOID_AMOUNT"/>
            <DataField Name="returnQuantity" Type="Data" FieldName="RETURN_QUANTITY"/>
            <DataField Name="returnAmount" Type="Data" FieldName="RETURN_AMOUNT"/>  

        </ReportElement>

        <ReportElement Type="Header" DataSource="DateSQL">
            <DataField Name="CurrentDate" Type="Data" FieldName="1" />
            <DataField Name="currentTime" Type="Data" FieldName="2" />
        </ReportElement>
    </ReportBand>
    <DataSource
        Type="walgreens.pos.maintenance.eod.DepartmentSalesReportDataSource"
        Name="DataSql"
        Statement="">
    </DataSource>
    <DataSource
        Type="com.pcmsgroup.v21.star.framework.application.reports.SpringReadOnlySQLStatement"
        Name="OutletSQL"
        Statement="select ORGU_CODE,OUTL_TRADE_DATE from outlet,org_unit where outlet.OUTL_ID = org_unit.OUTL_ID">
    </DataSource>

    <DataSource
        Type="com.pcmsgroup.v21.star.framework.application.reports.SpringReadOnlySQLStatement"
        Name="DateSQL"
        Statement="SELECT current date,current time FROM sysibm.sysdummy1">
    </DataSource>

</Report>

1 个答案:

答案 0 :(得分:0)

要查看正在生成XSL-FO的XSLT,需要涉及许多单独的表,报告中的部门列表是目前总计的单独表。对于列出部门的表格,有九列

<fo:table table-layout="fixed">
   <fo:table-column column-width="1.6cm"/>
   <fo:table-column column-width="6cm" text-align="center"/>
   <fo:table-column column-width="1.6cm"/>
   <fo:table-column column-width="1.6cm"/>
   <fo:table-column column-width="1.8cm"/>
   <fo:table-column column-width="1.6cm"/>
   <fo:table-column column-width="1.6cm"/>
   <fo:table-column column-width="1.6cm" text-align="center"/>
   <fo:table-column column-width="1.6cm"/>
   <fo:table-body>

但是,对于您的部门总计,该表只有两列

<fo:table>
   <fo:table-column column-width="1.5cm"/>
   <fo:table-column column-width="4.5cm"/>
   <fo:table-header>

我怀疑你真的想要三列,它们的长度与部门列表中的前三列相对应

<fo:table
   <fo:table-column column-width="1.6cm"/>
   <fo:table-column column-width="6cm"/>
   <fo:table-column column-width="1.6cm"/>
   <fo:table-header>

然后,例如,对于您的总行数,而不是这样做......

<fo:table-row>
   <fo:table-cell>
      <fo:block/>
   </fo:table-cell>
   <fo:table-cell>
      <fo:block>
         <xsl:text>SS SALES</xsl:text>
         <xsl:value-of select="DepartmentSalesReport/store_code"/>
      </fo:block>
   </fo:table-cell>
 </fo:table-row>

您只需添加一个新的表格单元格

<fo:table-row>
   <fo:table-cell>
      <fo:block/>
   </fo:table-cell>
   <fo:table-cell>
      <fo:block>
         <xsl:text>SS SALES</xsl:text>
      </fo:block>
   </fo:table-cell>
   <fo:table-cell>
      <fo:block>
         <xsl:value-of select="DepartmentSalesReport/store_code"/>
      </fo:block>
   </fo:table-cell>
 </fo:table-row>

您可能需要对最终“总计”表中的所有行执行此操作