2012-06-29

JasperReports 圖形元件(Graphic Elements)

JasperReports 提供的元件有:

  • 文字元件 - Static Text、Text Field
  • 圖形元件 - Ellipse、Image、Line、Rectangle、Round Rectangle
  • 容器元件 - Frame
  • 排版元件 - Break、List、Table
  • 特殊元件 - Chart、Crosstab、Spider Chart、Sort、Subreport、Barcode
  • 外部元件 - Html、Map
  • 自訂元件 - Generic Element

圖形元件有 Line(直線)、矩形(Rectangle)、圓角矩形(Round Rectangle)、陀圓形(Ellipse)與圖片(Image),矩形與圓角矩形其實是一樣的,透過 Radius 設定圓角與否。

圖形元件共有的屬性為:


線的寬度、Style 與顏色都是在「Pen」裡做設定,「Fill」在 iReport 裡只有一個 Solid 選項。


若要填滿 Rectangle 或 Ellipse,可以在一般「屬性」設定「Backcolor」。

怎麼畫斜線?

Line 唯一特有的屬性「Direction」,有兩個值可用:Top Down(預設)與 Bottom Up,前者為左上右下,後者為右上左下,透過一般「屬性」增加 Line 的 Height 或者從 Designer 拖拉控制點,就可以看到水平線變對角線。
怎麼畫垂直線?

將 Line 的 Width 設為 1 即可,或從 Designer 拖拉控制點。

Image 元件

圖片是圖形元件中最複雜的,光看設定屬性就知道。


圖片的來源可以是靜態的圖片或者是動態產生的圖片。


圖片來源設定有兩個屬性「Image Expression」與「Expression Class」,Image Expression 回傳的格式視 Expression Class 而定。

Expression Class 設定:
  • java.lang.String - 先將 Image Expression 以絕對路徑到 FileSystem 去找,若找不到,再以 Resource 方式到 Classpath 裡找;最重要的是,圖片檔不會包在 Jasper 檔裡,所以在產生報表時,Image Expression 所表示的圖片必須存在,若因環境改變而找不到圖片是會出錯的。
  • java.io.File - Image Expression 以 new java.io.File(...) 表示。
  • java.net.URL - Image Expression 以 new java.net.URL(...) 表示。
  • java.io.InputStream - Image Expression 以 Utils.toInputStream($F{...}) 表示,圖片可以來自資料庫。
  • java.awt.Image - Image Expression 以 Utils.createImage() 表示,動態產生圖片。
  • net.sf.jasperreports.engine.JRRenderable - 實做該介面以動態產生圖片。
java.lang.String 是最常用的圖片來源設定方式,但為了可攜性,不建議使用決定路徑。

最好用的方式就是將圖片檔與報表檔放在一起,或者放在報表檔下的子目錄裡,因為 iReport 會自動將報表檔所在目錄加到 classpath 裡,這樣 Image Expression 就可以設定為 "/img.png" 或者 "/images/img.png"。

其次的方法是將絕對路徑改用參數傳入,例如 Image Expression 為 $P{IMAGES_PATH} + "img.png",這是保留圖片位置最大彈性的方式。

最後的方法就是擴充 iReport 的 classpath,從「工具 > 選項 > iReport > Classpath」可以加入圖片所在的 Jar 檔或目錄。

最後在 Designer 對圖片按右鍵,可以設定「Padding And Borders」與「HyperLink」。

沒有留言:

張貼留言