2017-02-06 69 views
1

我在我的應用程序中有幾個類似的報告,因爲這個原因,我創建了一個基本的結構,其中一個子報表內的標題和另一個內頁面頁腳。賈斯珀報告:子報表內的頁碼不起作用

問題是我有70個類似的報告,如果有一天我需要改變頁腳結構,我不想改變70個報告,我更喜歡只改變一個。

在頁腳報表,我有這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="reportFooterV" pageWidth="550" pageHeight="650" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="550" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="6a63a92f-0859-4b0b-84b8-6166c2fe0951"> 
    <property name="ireport.zoom" value="1.5"/> 
    <property name="ireport.x" value="19"/> 
    <property name="ireport.y" value="0"/> 
    <parameter name="date" class="java.lang.String" isForPrompting="false"/> 
    <title> 
     <band height="19"> 
      <textField> 
       <reportElement uuid="89a04d3d-73e0-4f28-9747-3206c4022769" x="0" y="0" width="191" height="19" forecolor="#999999"/> 
       <textElement verticalAlignment="Bottom"> 
        <font fontName="Roboto" size="10" isBold="false"/> 
       </textElement> 
       <textFieldExpression><![CDATA[$P{date}]]></textFieldExpression> 
      </textField> 
      <textField evaluationTime="Auto"> 
       <reportElement uuid="89a04d3d-73e0-4f28-9747-3206c4022769" x="352" y="0" width="99" height="19" forecolor="#999999"/> 
       <textElement textAlignment="Right" verticalAlignment="Bottom"> 
        <font fontName="Roboto" size="10" isBold="false"/> 
       </textElement> 
       <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
</jasperReport> 

但變量PAGE_NUMBER,不工作,始終在頁面顯示1。

在主報告中,我有這樣的pageFooter區域

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="systemParametersSummary" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" resourceBundle="properties.Messages" isIgnorePagination="true" uuid="6a63a92f-0859-4b0b-84b8-6166c2fe0951"> 

.... 
    <pageFooter> 
     <band height="22"> 
      <subreport> 
       <reportElement uuid="ac3cfc74-4e5a-45bc-945a-7ca6c82c4f6a" x="2" y="0" width="150" height="22"/> 
       <subreportParameter name="date"> 
        <subreportParameterExpression><![CDATA[$P{date}]]></subreportParameterExpression> 
       </subreportParameter> 
       <subreportExpression><![CDATA[$P{footer}]]></subreportExpression> 
      </subreport> 
     </band> 
    </pageFooter> 
</jasperReport> 

我不知道爲什麼我不能找到辦法解決這個,如果有人能幫助我...謝謝!

+0

的可能的複製(http://stackoverflow.com/questions/9597256/how-to-add-page [如何跨主機和子報表添加頁碼] - 編號跨越主和子報表)&[如何在多頁PDF報表中添加頁碼](http://stackoverflow.com/q/14641489/876298) –

回答

1

如果您只是使用這些子報告進行頁碼編號,那麼這就是您遇到錯誤的原因。這些子報告中的每一個只有1頁長,所以它總是第1頁的1。

通常沒有必要像這樣使用子報告進行頁面編號,因爲調用sub的開銷報告的價值通常比通過這樣做獲得的收益更有價值。

我建議你擺脫你的子報告,並讓主報告做重大舉措,例如,跨越與使用主報表引擎數據的完整報告頁碼把你的文本字段的日期在主報表頁腳,也使用頁碼驗證碼:

<textField evaluationTime="Master"> 
    <reportElement uuid="89a04d3d-73e0-4f28-9747-3206c4022769" x="352" y="0" width="99" height="19" forecolor="#999999"/> 
     <textElement textAlignment="Right" verticalAlignment="Bottom"> 
      <font fontName="Roboto" size="10" isBold="false"/> 
    </textElement> 
    <textFieldExpression><![CDATA[$V{MASTER_CURRENT_PAGE} + " of " + $V{MASTER_TOTAL_PAGES}]]></textFieldExpression> 
</textField> 

所以,在你的主報告,你應該結束了:

<pageFooter> 
     <band height="22"> 
      <textField> 
      <reportElement uuid="89a04d3d-73e0-4f28-9747-3206c4022769" x="0" y="0" width="191" height="19" forecolor="#999999"/> 
      <textElement verticalAlignment="Bottom"> 
       <font fontName="Roboto" size="10" isBold="false"/> 
      </textElement> 
      <textFieldExpression><![CDATA[$P{date}]]></textFieldExpression> 
     </textField> 
     <textField evaluationTime="Master"> 
      <reportElement uuid="89a04d3d-73e0-4f28-9747-3206c4022769" x="352" y="0" width="99" height="19" forecolor="#999999"/> 
      <textElement textAlignment="Right" verticalAlignment="Bottom"> 
       <font fontName="Roboto" size="10" isBold="false"/> 
      </textElement> 
      <textFieldExpression><![CDATA[$V{MASTER_CURRENT_PAGE} + " of " + $V{MASTER_TOTAL_PAGES}]]></textFieldExpression> 
     </textField> 
    </band> 
</pageFooter> 

不要忘記,如果你使用的主報告標題帶子報表出於類似的目的,那麼你或許應該重新思考,該方法爲好。

如果有特定原因,您可以在原報告中使用的子報告中應用相同的邏輯。在使用母版頁編號時,這也會給出正確的結果,例如您的子報告的代碼是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="reportFooterV" pageWidth="550" pageHeight="650" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="550" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="6a63a92f-0859-4b0b-84b8-6166c2fe0951"> 
    <parameter name="date" class="java.lang.String" isForPrompting="false"/> 
    <title> 
     <band height="22"> 
      <textField> 
       <reportElement x="0" y="0" width="191" height="19" forecolor="#999999" uuid="89a04d3d-73e0-4f28-9747-3206c4022769"/> 
       <textElement verticalAlignment="Bottom"> 
        <font fontName="Roboto" size="10" isBold="false"/> 
       </textElement> 
       <textFieldExpression><![CDATA[$P{date}]]></textFieldExpression> 
      </textField> 
      <textField evaluationTime="Master"> 
       <reportElement x="352" y="0" width="99" height="19" forecolor="#999999" uuid="89a04d3d-73e0-4f28-9747-3206c4022769"/> 
       <textElement textAlignment="Right" verticalAlignment="Bottom"> 
        <font fontName="Roboto" size="10" isBold="false"/> 
       </textElement> 
       <textFieldExpression><![CDATA[$V{MASTER_CURRENT_PAGE} + " of " + $V{MASTER_TOTAL_PAGES}]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
</jasperReport> 
+0

嗨,維克多,與我原來的答案相同的邏輯適用,所以我編輯它以告訴你這是一種替代方法。希望這有助於。 – philipobrien