2012-01-31 51 views
4

我正在生成一個報告,其中包含跨越不同頁面的聯繫人。JasperReports:如何判斷一個字段是否被推送到下一頁

以前我把isSplitAllowed設置爲「true」。 但我不希望聯繫人分散到不同的頁面。 所以我把它設置爲「false」,報告的佈局看起來好多了。然而它引入了一個新問題:

在我的標題中,我打印了頁面的第一個人和最後一個人的名字。 當聯繫人被推送到下一頁時,它仍在當前頁面中處理。 假設Bob應該在第一頁的底部。但爲了防止它分裂,Bob現在是第二頁中的第一個元素。 但是,在我的第一頁的標題上,我仍然有Alice ... Bob(Alice是第一頁的第一個人)。 在我的第二頁上,我仍然有布倫達......道格(布倫達現在是第二頁的第二人,道格最後一個人的第二頁)。

我在報頭輸出是 [$ V {pageFirstItem} + 「...」 + $ V {pageLastItem}]]>

其中pageFirstItem是:

<variable name="pageFirstItem" class="java.lang.String" resetType="Page" calculation="First"> 
     <variableExpression><![CDATA[$F{lastName}]]></variableExpression> 
     <initialValueExpression><![CDATA[$F{lastName}]]></initialValueExpression> 
    </variable> 

和pageLastItem是:

<variable name="pageLastItem" class="java.lang.String" resetType="Report" calculation="Nothing"> 
    <variableExpression><![CDATA[$F{lastName}]]></variableExpression> 

回答

1

我附上了一個基於iReport 3.0.5的工作示例解決方案。您可以通過啓用和禁用isSplitAllowed運行它來測試它。問題是即使isSplitAllowed="false"強制要在第i + 1頁上打印記錄,第i頁上的詳細記錄也會被處理。

總結:

  1. 對於firstItem,不需要計算。只需將名稱字段放在標題中。
  2. 對於lastItem,您需要保存使用變量prop,類型java.util.Property處理的名稱。這是通過在下面的值prop.setProperty("lastSavedName", $F{Name})中設置一個虛擬的高度爲0的textField來完成的。此文本字段確保名稱僅在打印後保存。
  3. 然後將prop.getProperty("lastSavedName")的值從evaluationTime="Page"的標題中提取出來。

    <?xml version="1.0" encoding="UTF-8" ?> 
    <!-- Created with iReport - A designer for JasperReports --> 
    <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> 
    <jasperReport 
         name="Untitled_report_1" 
         columnCount="1" 
         printOrder="Vertical" 
         orientation="Portrait" 
         pageWidth="595" 
         pageHeight="842" 
         columnWidth="535" 
         columnSpacing="0" 
         leftMargin="30" 
         rightMargin="30" 
         topMargin="20" 
         bottomMargin="20" 
         whenNoDataType="NoPages" 
         isFloatColumnFooter="true" 
         isTitleNewPage="false" 
         isSummaryNewPage="true"> 
        <property name="ireport.zoom" value="1.0" /> 
        <property name="ireport.x" value="0" /> 
        <property name="ireport.y" value="0" /> 
        <property name="ireport.scriptlethandling" value="0" /> 
        <property name="ireport.encoding" value="UTF-8" /> 
        <import value="java.util.*" /> 
        <import value="net.sf.jasperreports.engine.*" /> 
        <import value="net.sf.jasperreports.engine.data.*" /> 
    
        <queryString><![CDATA[select 1 as id, 'Name 1' as name from dual union all 
    select 2 as id, 'Name 2' as name from dual union all 
    select 3 as id, 'Name 3' as name from dual union all 
    select 4 as id, 'Name 4' as name from dual union all 
    select 5 as id, 'Name 5' as name from dual union all 
    select 6 as id, 'Name 6' as name from dual union all 
    select 7 as id, 'Name 7' as name from dual union all 
    select 8 as id, 'Name 8' as name from dual union all 
    select 9 as id, 'Name 9' as name from dual union all 
    select 10 as id, 'Name 10' as name from dual union all 
    select 11 as id, 'Name 11' as name from dual union all 
    select 12 as id, 'Name 12' as name from dual union all 
    select 13 as id, 'Name 13' as name from dual union all 
    select 14 as id, 'Name 14' as name from dual union all 
    select 15 as id, 'Name 15' as name from dual union all 
    select 16 as id, 'Name 16' as name from dual union all 
    select 17 as id, 'Name 17' as name from dual union all 
    select 18 as id, 'Name 18' as name from dual union all 
    select 19 as id, 'Name 19' as name from dual union all 
    select 20 as id, 'Name 20' as name from dual union all 
    select 21 as id, 'Name 21' as name from dual union all 
    select 22 as id, 'Name 22' as name from dual union all 
    select 23 as id, 'Name 23' as name from dual union all 
    select 24 as id, 'Name 24' as name from dual union all 
    select 25 as id, 'Name 25' as name from dual union all 
    select 26 as id, 'Name 26' as name from dual union all 
    select 27 as id, 'Name 27' as name from dual union all 
    select 28 as id, 'Name 28' as name from dual]]></queryString> 
    
        <field name="ID" class="java.math.BigDecimal"/> 
        <field name="NAME" class="java.lang.String"/> 
    
        <variable name="prop" class="java.util.Properties" resetType="Report" calculation="System"> 
         <initialValueExpression><![CDATA[new Properties()]]></initialValueExpression> 
        </variable> 
         <background> 
          <band height="0" isSplitAllowed="true" > 
          </band> 
         </background> 
         <title> 
          <band height="0" isSplitAllowed="true" > 
          </band> 
         </title> 
         <pageHeader> 
          <band height="16" isSplitAllowed="true" > 
           <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > 
            <reportElement 
             x="0" 
             y="0" 
             width="96" 
             height="16" 
             key="textField-3"/> 
            <box></box> 
            <textElement> 
             <font/> 
            </textElement> 
           <textFieldExpression class="java.lang.String"><![CDATA["First " + $F{ID}]]></textFieldExpression> 
           </textField> 
           <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Page" hyperlinkType="None" hyperlinkTarget="Self" > 
            <reportElement 
             x="96" 
             y="0" 
             width="100" 
             height="16" 
             key="textField-4"/> 
            <box></box> 
            <textElement> 
             <font/> 
            </textElement> 
           <textFieldExpression class="java.lang.String"><![CDATA["Last " + $V{prop}.getProperty("abcd")]]></textFieldExpression> 
           </textField> 
          </band> 
         </pageHeader> 
         <columnHeader> 
          <band height="20" isSplitAllowed="true" > 
           <staticText> 
            <reportElement 
             x="0" 
             y="0" 
             width="96" 
             height="20" 
             key="staticText-2"/> 
            <box></box> 
            <textElement> 
             <font/> 
            </textElement> 
           <text><![CDATA[CustomerName]]></text> 
           </staticText> 
           <staticText> 
            <reportElement 
             x="96" 
             y="0" 
             width="100" 
             height="20" 
             key="staticText-3"/> 
            <box></box> 
            <textElement> 
             <font/> 
            </textElement> 
           <text><![CDATA[Workorderid]]></text> 
           </staticText> 
          </band> 
         </columnHeader> 
         <detail> 
          <band height="18" isSplitAllowed="true" > 
           <textField isStretchWithOverflow="true" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > 
            <reportElement 
             x="0" 
             y="0" 
             width="96" 
             height="18" 
             key="textField"/> 
            <box></box> 
            <textElement> 
             <font/> 
            </textElement> 
           <textFieldExpression class="java.lang.String"><![CDATA[$F{NAME}+"This\nwill\ncause\na\nsplit."]]></textFieldExpression> 
           </textField> 
           <textField isStretchWithOverflow="false" pattern="##0.00" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > 
            <reportElement 
             x="96" 
             y="0" 
             width="100" 
             height="18" 
             key="textField"/> 
            <box></box> 
            <textElement> 
             <font/> 
            </textElement> 
           <textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{ID}]]></textFieldExpression> 
           </textField> 
           <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Band" hyperlinkType="None" hyperlinkTarget="Self" > 
            <reportElement 
             x="196" 
             y="0" 
             width="339" 
             height="0" 
             key="textField-5" 
             isRemoveLineWhenBlank="true"/> 
            <box></box> 
            <textElement> 
             <font/> 
            </textElement> 
           <textFieldExpression class="java.lang.String"><![CDATA[$V{prop}.setProperty("abcd", String.valueOf($F{ID}))]]></textFieldExpression> 
           </textField> 
          </band> 
         </detail> 
         <columnFooter> 
          <band height="0" isSplitAllowed="true" > 
          </band> 
         </columnFooter> 
         <pageFooter> 
          <band height="0" isSplitAllowed="true" > 
          </band> 
         </pageFooter> 
         <summary> 
          <band height="0" isSplitAllowed="true" > 
          </band> 
         </summary> 
    </jasperReport> 
    
相關問題