IReport問題整理

來源:互聯網
上載者:User

1.         問題:IReport如何?變數欄位$F{ propertyName}賦值為一個NULL對象時不顯示”null”, 而顯示為空白。

解決方案:選中動態儲存格,右鍵選擇屬性,在彈出對話方塊TextField選項卡中選中Blank when null。

思考:以往我們為IReport中變數欄位賦值時會在程式或報表Textfield expression中用三目符號去判空,用IReport此功能既可以提高準確度,又可以減少工作量。

 

2.  問題:IReport中如果動態儲存格中$F{propertyName}顯示的字過長,如何換行?

解決方案:選中動態儲存格,右鍵選擇屬性,在彈出對話方塊TextField選項卡中將選中Stretch With Overflow。

思考:有很多bug都是因為動態文字($F{propertyName})顯示不全而造成的,而且這些bug的修改方式也不是根本解決辦法,因為就算拉長儲存格對於動態字過多時也會出現同樣的問題,而且現場也會出現同樣的問題。有了“動態長度超過文字框長度會自動換行”這個功能就會解決此問題。

 

3、問題:iReport中一個儲存格由於內容太多而換行了,而其它沒換行那麼其顯示高度肯定不一致了,如何解決換行導致的儲存格對不齊問題?

解決方案:把同行所有儲存格的屬性Stretch Type=" RelativeToBbandHheight "。選擇同一行所有儲存格,點擊右鍵選擇屬性,在彈出對話方塊Common選項卡中選中將Stretch Type屬性設為"RelativeToBbandHheight"。

思考:有了此功能,我們使列印格式顯示得更加整齊,就像一個表格框著每個儲存格一樣。

 

4、問題:iReport中當儲存格中的文字出現換行跨頁的情況,如何保證換行的欄位能夠正常顯示,並且保證換行後同行的高度保持一致。

解決方案:選擇同行所有儲存格,,點擊右鍵選擇屬性,在彈出對話方塊Common選項卡中選中Print when detail over。

思考:以前出現翻頁列印時常出現列印內容缺失、列印格式不對齊的bug。此功能可以解決上訴問題。

 

5、問題:iReport中的子報表如何?根據其上部是否有列印資料而變列印位置。

解決方案:選中子報表,右鍵選擇屬性,在Common選項卡中將Position type屬性置為Float,將Stretch Type屬性置為RelativeToTallestObject。

思考:當第一頁列印基本資料在上部,子報表在下部,子報表資料很多需要翻頁,並且翻頁後需要頂頁列印子報表的內容,這時利用此功能最恰當不過了。如果動態文字框因為換行而出現文字重疊也同樣可以選擇“FLOAT”解決此問題。

 

6、問題:列印時經常遇到翻頁列印,而且每一頁列印的內容不一致,iReport如何?此功能。

解決方案:建立多個Frame,每個Frame上可以有不同的列印布局,通過控制Frame的顯示頁數來控制翻頁後不同的顯示內容。具體操作:選擇Frame,右鍵選擇屬性,在Common選項卡中的Print When excepression文字框中輸入控制碼,如“new Boolean($V{PAGE_NUMBER}.intValue()>1)”表示超過一頁時才顯示此Frame上的內容。

思考:此功能可以更靈活地滿足翻頁列印不同內容的需求

 

7、問題:以往一些需要列印變數的格式化工作往往在程式實現,實際上最好在模板中去進行格式化(代碼複用、去除耦合),那麼iReport為能夠提供哪些格式化規則呢,我們又怎樣能利用它們呢。

解決方案:iReport的每個變數儲存格都有許多為格式化規則可以選擇(如下圖),而且我們也可以增加自己的格式化規則,具體步驟:選中儲存格,右鍵選擇屬性,在Text Field選項卡中點擊Create按鈕為變數添加格式化規則(變數類型要與格式化規則對應)。每一項格式化規則這裡就不再贅述了。

思考:列印需求變化最大就是格式了,我們往往因為格式的變化而增加重複代碼或者列印項,而模板是客戶化的,在模板上格式化可以最大程度上避免這個問題,例如,日期可以格式化各種形式來顯示,貨幣符號用那種、千分位是否分割都可以通過此功能實現。

 

8、問題:ireport中大小寫問題:

1、parameter中如果小寫,引用也小寫

2、$F{},一般都大寫

3、子報表中引用父報表中查詢出來的值時,只需要小寫即可,即在子報表的parameter中只需要小寫

 

一、iReport 中擷取系統目前時間

1、選擇TextField類型為 java.util.Date,選擇TextField的Expression Class(類型)為 java.util.Date

2、在pattern中選擇時間格式

3、在TextField Expression中寫 java.util.Calendar.getInstance().getTime()

 

二、避免為空白

方法一、在屬性選項中找到blank when null即可

方法二、$F{ABB614}?$F{ABB614}:""

 

三、設定時間格式

方法一、可以使用內嵌函數截取字串來顯示

1、利用substring來截取 (針對String類型)

$F{AAE036}?(($F{AAE036}.toString()).substring(0,4)+"年"+($F{AAE036}.toString()).substring(4,6)+"月"+($F{AAE036}.toString()).substring(6,8)+"日"):""

2、利用內建的函數來取 (針對date類型)

"日期"+($F{ABB017}?String.valueOf($F{ABB017}.getYear()+1900)+"年"+String.valueOf($F{ABB017}.getMonth()+1)+"月"+$F{ABB017}.getDate():"")+"日

方法二、設定 Exception class 為date類型,然後在pattern中設定時間格式,可以自己寫,例如××××年××月××日,但是要注意,如果為空白無法用$F{ABB614}?$F{ABB614}:"",只能使用blank when null這種方法

 

四、在ireport中使用html中的標籤

例如:<br> 

1、找到屬性面板中的markup選擇為html

2、在需要的地方加入<br>

 

五、使某個欄位中的資料在特定條件下才列印出來

    通過設定欄位的PrintWhenExpression,我們可以限定只有在某些特定的條件下欄位值才會被列印出來,在PrintWhenExpression 中需要設定Boolean 型的運算式,如:new java.lang.Boolean($F{type}.trim().equals("mod_cook"))

 

六、嵌套子報表

1、在面板屬性中找到Subreport,然後拖進你要放入的地方,放開滑鼠後,會有一個建立報表。建立完報表之後會有個名為SUBREPORT_DIR 的Parameter,string類型,他會有個預設路徑,指的是子報表的路徑。由於子報表往往有多條資料,故最好單獨放在一個detail中(例如:查詢出來有多條資料,那麼會迴圈顯示在detail中)。

2、如果子報表中需要傳入資料,那麼就先點中子報表,然後在屬性欄(不是參數裡)中找到“parameters”,建立一個,例如:

     name為abz050  ,Expression為$F{ABZ050},因為這裡的值是父報表查詢的出來之後的值,所以不是用Parameter,而是Field。

3、在子報表中引用值,首先在子報表中定義一個變數Parameter,然後引用即可。

那為什麼能找到呢。

因為:你在建立子報表的時候,也會自動建立一個Parameter,名稱預設為SUBREPORT_DIR,它裡面有個預設路徑(新傳入的路徑會覆蓋該預設路徑)。

同時,可以點中子報表查看他的屬性,裡面有個Subreport Exception的值為$P{SUBREPORT_DIR} + "子報表名稱.jasper",這樣系統就能找到了。當然系統還會自動設定一些其他子報表屬性,具體的自己建立一個看看吧。

 

七、自動換行

    如果不處理一下,有些欄位的內容太長了就會顯示不全。選中該欄位,右擊->屬性,在Text Field把Stretch with overflow勾上。

    同時把該行所有的欄位選上,右擊->屬性,在Common的Stretch Type選擇Relative to tallest object。

 

八、內嵌函數的使用

舉例:($F{ABB617}).toString()).substring(0,4)+"年"          把ABB617(Date類型)先轉化成String然後截取年

ireport中使用內嵌函數只要在欄位上看看他有哪些方法,然後直接使用即可。

 

九、高度根據內容自動變高

1、選中主鍵,在屬性中找到 Stretch With Overflow並選中。並把他單獨放在一個Detial或者其他 裡面即可。
2、還有一個屬性叫Stretch type,預設的值是No Stretch,可以改成Relative To Band Height。

第二個步驟我個人認為可做可不做。

     當然第二個步驟的功能在做表格的時候很有用,例如:表格是2列,那麼兩邊的資料肯定不一樣,或者是左邊就是靜態,那麼如果不選擇這個屬性,你就會發現,右邊的資料很多的時候會擴充,但是左邊不會,這個時候,我們就可以設定該屬性,並把它們放到一個單獨Detial或者其他容器中,那樣 左右兩邊 就會等高了

 
十、設定共幾頁,第幾頁

$V{PAGE_NUMBER} 表示當前是第幾頁 ,在text field 的 選項evaluation time選report是共幾頁,now表是當前頁。頁碼可在ireport裡直接設定。  “共幾頁 第幾頁”

我是寫在page footer 中。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.