2017-02-06 3 views
1

응용 프로그램에 여러 가지 유사한 보고서가 있습니다.이 때문에 제목 아래에 하위 보고서가 있고 페이지 바닥 글에 하위 보고서가있는 기본 구조가 만들어졌습니다.Jasper Reports : 하위 보고서의 페이지 번호가 작동하지 않습니다.

문제는 내가 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을 보여줍니다. 주 보고서에서

나는 누군가가 나를 도울 수 있다면 나는 이것에 대한 해결 방법을 찾을 수 없습니다 이유를 잘 모릅니다

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

이 ... 당신을 감사합니다 pageFooter 영역이있다!

+0

가능한 복제 (http://stackoverflow.com/questions/9597256/how-to-add-page [마스터 및 하위 보고서를 통해 페이지 번호를 추가하는 방법] -number-across-master-and-subreports) & [여러 페이지 PDF 보고서에 페이지 번호를 추가하는 방법] (http://stackoverflow.com/q/14641489/876298) –

답변

1

페이지 번호에 하위 보고서 만 사용하는 경우 오류가 발생하는 것입니다. 각 하위 보고서는 길이가 1 페이지이므로 항상 1 페이지입니다.

이러한 방식으로 페이지 번호 매기기에 하위 보고서를 사용하거나 하위 보고서를 호출 할 때 오버 헤드가 필요하지 않습니다. -reports는 일반적으로 얻을 수있는 이익보다 더 중요합니다.

하위 보고서를 없애고 주 보고서가 무거운 짐을 들게하는 것이 좋습니다. 주 보고서에서,

<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