2012-06-13 73 views
1

我使用碧玉報告和iReport的生成我的應用程序的報告。我需要在我的報告中顯示圖像,這取決於我的數據庫上的查詢。這些圖像的計劃,並將代表測量內的其他領域等碧玉報告:顯示動態圖像根據字段值

I.E.有兩個圖像:連接到Field_ONE和Field_TWO的IMAGE1和IMAGE2。

  • 如果Field_ONE爲!= null,那麼我希望顯示IMAGE1和文檔中的圖像內的字段;

  • 如果Field_TWO是!= null且Field_ONE等於空的話,我想顯示IMAGE2在以前表明IMAGE1

    的地方
  • 如果Field_TWO是!= null並且Field_ONE!= null,則我想並排顯示IMAGE1和IMAGE2。

注意,我可能有5幅或6個圖像,所以這將是非常難以覆蓋不留只使用標籤之間的空格做好一切準備。

簡而言之:我需要這樣的東西在Android的佈局,我可以在我加入計劃的順序添加動態視場的計劃,並生成圖像及其相關領域。

我希望你能幫忙,謝謝!

注:我可以根據該報告的結果相同類型的多個圖像,所以它與層

Field_Two only

Field one and two

回答

2

層幾乎不可能覆蓋它(靜態)解決方案

  1. 將問題劃分爲案例。例如,殼體1個顯示圖像1,殼體2倍顯示的圖像2和3,殼體3顯示圖像4等...
  2. 對於i到n(對於n例)
    • 創建情況下,所有的元素我。
    • 添加一個新層,第i層。如果「圖層」窗口處於隱藏狀態,請轉到「窗口」>「圖層」。
    • 選擇添加元素,右擊並Send to layer。選擇圖層我。
    • 右鍵單擊「圖層」窗口中的圖層並更新「打印時的打印格式」。例如,$F{Field_ONE} != null
    • 重複。僅供參考,您可以單擊圖層上的眼睛(在圖層窗口中)隱藏適用的元素以隱藏混亂。
  3. 完成後,您爲每種情況所做的每種設計都只會在圖層打印表達式生成真值時出現。

子報表(動態)解決方案

  1. 創建一個報告,讓我們把它叫做子報表。
    • 設置寬度和頁面高度是高度和圖像部分的寬度給定記錄。
    • 將所有頁邊距設置爲0
    • 將報告的列更改爲希望在單個行中具有的圖像的數量。
    • 更改打印以「水平」
  2. 添加N個參數爲N字段需要被與圖像相關聯。
  3. 刪除頁面中除細節帶以外的所有帶。
  4. 寫虛擬查詢,將返回根據給定字段是否爲空或不是一個形象的名字。例如,select 'Ascent.jpg' as image from dual where $P{FIELD_1} is not null。您需要爲每個字段和選擇語句執行此操作。
  5. 在詳細部分中,添加的圖像元素和設置的值使用從上述查詢的image字段設置爲路徑到您的圖片。例如,"C:/WINDOWS/Web/Wallpaper/"+$F{IMAGE}
  6. 轉到您的原始報告並將子報告添加到您的詳細信息部分。
    • 鏈接到參數,#2創建的原始報表中的字段,在報表。

我沒有要發佈這個解決方案,直到我測試了它。如果有不清楚的地方,我可以發佈我的樣本,其中有很多行。你需要一個子報表的原因是因爲你的主報表有1列並且是垂直填充的,但你需要圖像在多列上水平填充。對於非空的每個字段,子報表查詢將按語句順序返回一條記錄。該記錄將填滿整個欄目。

Sample Generated Report, using WinXP wallpapers as images

+0

我忘記說了一些關於圖片:我可以有相同的字段的多個圖像。想象一下,我有3個相同類型的對象,然後它會顯示3個圖像。 這就是爲什麼我想在Java中儘可能實現像List一樣的原因。當我用真實數據生成報告時,我需要添加圖像。 謝謝 – R5498

+0

嗯,我展示的解決方案,重要的是它,你知道所有的情況下適用的元素(文本框和圖像),當您正在開發的報告。這是因爲您可以將任意數量的元素添加到圖層中。但是,如果在開發報告後可能會爲特定案例添加更多圖片,請讓我知道,我會提出另一種解決方案。 – user845279

+0

但是,我注意到如果你有一堆字段,案例數量會相當大。 – user845279