2012-11-05 83 views
0

要做我有一個是通過一個XSL文件和XSL文件形成以下PDF報告定義樣式低於此PDF報告是URL請看PDF報告.. Pdf Report格式化需要XSL

所使用的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中實現這一點,對於knowlegde的目的,數值是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> 
+0

所有行這樣做沒有看到輸入XML,沒有人可以幫您。 –

回答

0

對於看着正在生成您的XSL-FO的XSLT,還有一些涉及單獨的表中,與各部門的報告,此刻是一個單獨的表到您彙總列表。對於表中列出的各部門中,有9列

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

你很可能需要在您的最終的「總計」表