Hướng dẫn lập trình báo cáo JasperReport cho người mới bắt đầu

1- Giới thiệu

Tài liệu được viết dựa trên:
  • Eclipse 4.4 (LUNA)

  • JasperSoft Studio (5.6.2)

2- Các cài đặt đòi hỏi

Jaspersoft Studio Plugin:

Để lập trình báo cáo Jasperreport bạn cần cài đặt Jaspersoft Studio vào Eclipse. Bạn có thể xem hướng dẫn tại:

LearningSQL

LearningSQL là một database nhỏ, dùng trong nhiều hướng dẫn của o7planning. Hướng dẫn lập trình báo cáo JasperReport cũng sử dụng dữ liệu trên Database này. Bạn cần tạo Database này (Chỉ mất 5 phút) theo hướng dẫn dưới đây:

Oracle:

SQL Server

MySQL

Thư viện điều khiển cơ sở dữ liệu (Oracle, MySQL, SQLServer) và cách sử dụng:

Tùy thuộc vào bạn sử dụng database gì, bạn cần thư viện điều khiển Database đó (Java JDBC Driver) (Bạn cần 3 phút để hoàn thành), xem hướng dẫn download tại:

3- Giao diện báo cáo sẽ làm

Đây là hình ảnh dữ liệu thô:
Trên báo cáo chúng ta sẽ nhóm nó lại để được một kết quả giống minh họa dưới đây:
Và đây là giao diện báo cáo:
SQL:
Select Acc.Open_Branch_Id
     ,Bra.Name           Branch_Name
     ,Acc.Cust_Id
     ,Cus.Address        Cust_Address
     ,Acc.Account_Id
     ,Acc.Product_Cd
     ,Acc.Avail_Balance
From   Account  Acc
     ,Customer Cus
     ,Branch   Bra
Where  Acc.Cust_Id = Cus.Cust_Id
And    Acc.Open_Branch_Id = Bra.Branch_Id

4- Tạo JasperReport Project

Mở Perspective (khung nhìn): Report Design.
Tiếp theo tạo một Project:
  • File/New/Other..
Nhập vào tên Project:
  • HelloJasperReport
Project vừa được tạo ra:

5- Tạo Data Adaptor

Tại đây tôi kết nối tới cơ sở dữ liệu Oracle. Bạn có thể làm tương tự cho MySQL hoặc SQLServer, chỉ khác nhau thư viện sử dụng & URL Connection String.
 
Xem thêm:
Với Oracle nhập vào:
  • JDBC Url: jdbc:oracle:thin:@localhost:1521:db11g
Lỗi xẩy ra khi bạn chưa khai báo đường dẫn thư viện điều khiển loại database này.
Chỉ cần Add vị trí file jar, thư viện điều khiển loại cơ sở dữ liệu đó.
OK, Data Adaptor đã được tạo ra.

6- Thiết kế báo cáo

6.1- Tạo mới báo cáo

  • File/New/Other...
Nhập vào tên báo cáo:
  • FirstJasperReport
Select Acc.Open_Branch_Id
      ,Bra.Name           Branch_Name
      ,Acc.Cust_Id
      ,Cus.Address        Cust_Address
      ,Acc.Account_Id
      ,Acc.Product_Cd
      ,Acc.Avail_Balance
From   Account  Acc
      ,Customer Cus
      ,Branch   Bra
Where  Acc.Cust_Id = Cus.Cust_Id
And    Acc.Open_Branch_Id = Bra.Branch_Id
Báo cáo được tạo ra.
Outline View rất quan trọng, trong khi thiết kế báo cáo chúng ta thường xuyên phải sử dụng tới nó.
Một trang báo cáo trắng đã được tạo ra. Trong đó các phần nội dung của Page Header, Column Header, Column Footer, Page Footer sẽ được hiển thị lặp lại ở các trang của báo cáo. Bạn có thể xóa các phần nội dung không cần thiết bằng cách nhấn phải chuột và chọn Delete.
Tại đây tôi đã xóa đi tất cả các phần chỉ giữ lại 2 phần Column Header & Detail, để dễ thiết kế, khi cần chúng ta sẽ tạo lại nó.
  • Column Header: Nơi để đặt tiêu đề các cột dữ liệu. Mặc định nó được lặp lại 1 lần tại tất cả các trang.
  • Detail: Nơi đặt các bản ghi, nó sẽ lặp theo số bản ghi từ câu truy vấn.

6.2- Thiết kế thô báo cáo

Kéo thả đối tượng Rectangle từ Pallete vào phần Column Header của báo cáo. Sau đó kéo Rectangle đầy theo chiều ngang.
Tiếp theo, điều chỉnh chiều cao của phần Column Header cho bằng với chiều cao của Rectangle vừa tạo. Nhằm tránh các khoảng trắng không cần thiết của báo cáo.
Kết quả có được:
Thay đổi mầu nền của Rectangle:
Tiếp theo lần lượt chúng ta sẽ tạo ra 2 group:
  • Group Branch
  • Group Cust
Ý nghĩa của nó được mô tả bởi hình minh họa dưới đây:
Trên Outline nhấn phải chuột vào FirstJasperReport, chọn Create Group:
Tiếp theo chúng ta kéo một Rectangle từ Pallete vào vùng "Branch Group Header 1"
Thay đổi mầu nền cho Rectangle vừa tạo ra.
Tiếp theo chúng ta sẽ kéo thả lần lượt các field: Open_Branch_IdBranch_Name vào Rectangle trên khối "Branch Group Header 1".
Tương tự chúng ta kéo thả Branch_Name vào bên cạnh Open_Branch_Id.

Tạo tiếp Group Customer:

Customer Group đã được tạo ra, kéo thả đối tượng Rectangle vào "Customer Group Header 1". Căn chỉnh và thay đổi mầu nền cho Rectangle như hình minh họa dưới đây:
Kéo thả field: Cust_ID vào Rectangle vừa tạo ra.
Tương tự kéo thả trường (field) Cust_Address.
Tiếp theo, kéo thả lần lượt các trường (field) Account_Id, Product_Cd, Avail_Balance vào vùng "Detail 1":
Chú ý: Nếu bạn kéo thả các trường (FIELD) vào vùng Detail, tiêu đề các cột cũng tự động được tạo ra trên vùng Column Header.
Căn chỉnh chiều cao của vùng "Detail 1" nhỏ nhất có thể:
Tiếp theo kéo thả các tiêu đề cho các cột còn lại:
Kéo nhỏ chiều cao của 2 vùng:
  • Customer Group Footer 1
  • Branch Group Footer 1
Tiếp theo chúng ta kéo thả trường (Field): AVAIL_BALANCE vào "Customer Group Footer 1" & "Branch Group Footer 1".
Đồng thời thay đổi mầu nền cho 2 đối tượng vừa kéo thả vào.

6.3- Chạy thử báo cáo lần 1

Chúng ta chạy thử báo cáo bằng cách nhấn vào Preview TAB:

6.4- Làm đẹp báo cáo

Lựa chọn các trường (field), và sét đặt các thuộc tính như hình minh họa dưới đây.

6.5- Chạy thử báo cáo lần 2

6.6- Thiết kế phần Header của báo cáo

Tạo một thư mục images trong project, copy file bank.png vào thư mục này như hình minh họa dưới đây:
  • bank.png
Kéo thả đối tượng Image từ Pallete vào Header của trang báo cáo.
Tiếp theo kéo thả đối tượng "Static Text" vào Header của trang báo cáo.
Tương tự kéo thả đối tượng "Static Text" thứ 2 vào Header của trang báo báo.

6.7- Chạy thử báo cáo lần 3

7- Gọi báo cáo JasperReport trong Java

Xem thêm: