這幾天本人專門對網絡報表的設計及打印技術進行了調查研究,在網上收集了許多相關資料,其中
ireport+jasperreport
是許多相關人士的首推,因此本人對此進行了較詳細的學習,下面是本人在學習
ireport
和
jasperreport
過程中碰到的一些問題及網上摘錄的解決方法,希望大家閱讀此文后會有所收獲。
1
.
Jasperreport
及
ireport
簡介:
?? JasperReport
是一款報表打印組件,是開放源代碼組織
sf.net
中的一個
java
報表打印工程,
JasperReport
的最新版本是
0.5.2
版,最新版本可以從
http://jasperreports.sourceforge.net/index.html
下載得到。
??? iReport
也是開源組織
sf.net
中的一款免費軟件,其主要作用是用來以可視化的方式設計生成
JasperReport
所使用的報表格式文件,因為
JasperReport
本身并未提供很好的可視化報表設計工具,
iReport
的出現正好彌補了這個缺陷。
iReport
的最新版本是
0.3.0
,
iReport
可以從
http://ireport.sourceforge.net
下載得到。
?
2
.
Jasperreport
及
ireport
的安裝及配置:
Jasperreport
不用另外進行安裝,只需要下載
JasperReport-x.x.x.jar
文件就可以了。
JasperReport
的配置比較簡單,直接將
JasperReport-x.x.x.jar
文件添加到操作系統的環境變量
ClASSPATH
中即可完成
JasperReport
的配置。
iReport
在
Windows
平臺也是以
.zip
形式的文件提供的,直接解壓縮后就算完成了安裝。只有
2.x
版的
iReport
需要配置,
3.0
版的
iReport
無需進行任何配置,直接啟動時
ireport.bat
文件就可以了。
?
3
.
iReport
中文顯示的問題:
?? 1
)、當
iReport
中提示框輸入中文不能正常顯示時,直接將
iReport
下
lib
中的
tinylaf.jar
這個包刪除即可。
2
)、在
iReport
中運行報表時如果出現亂碼問題時,將
itext-1.02b.jar
和
iTextAsian.jar
這兩個包加到
CLASSPATH
即可。即加入到
C
:
\iReport-0.3.0\lib
目錄中即可。
3
)、帶有中文顯示的報表:
任意畫一文本框,雙擊它,在出現的對話框中選擇
Static Text
項,修改
text
內容為漢
字,如下所示:
同時,修改
FONT
項中的內容與下圖相同
改動的地方有三項,一是
font name,
二是
PDF font name
三是
PDF Encoding
再次預覽報表即可顯示中文報表。
上面修改的第二和第三項在
JRViewer
中是看不出來效果的,如果選擇報表的生成結果為
PDF
格式則會體現出來。
?
4.
設置數據庫連接
??
選擇“
data source
”菜單中的“
Connections/Datasources
”,在打開的數據連接列表窗口
中點擊“
new
”以便新增一個數據源,
JasperReport
可以使用多種數據源,可以是
JDBC
數
據庫連接,也可以是從
XML
文件中取數據等,以下是使用
ORACLE
中的
CH
數據庫做為
數據源的一個配置例子。
?????????
上例中是以
ORACLE
做為數據庫的一個例子,我們還需要手工復制
ORACLE
的
JDBC
驅
動文件到
iReport
的
lib
目錄,復制
JDBC
驅動以外需要重新運行
iReport
才會生效。配置好
數據源以后,點擊“
Test
”按鈕,如果配置沒有錯誤,應該會出現如下所示的內容:
測試數據庫連接成功后,點擊“
Save
”按鈕保存這個數據源以便完成數據源的配置。
?
5
.
JasperReport
在程序中的應用
??
在網上找到
JasperReport
在程序中的應用的例子,現摘錄如下:
1.) Servlet:
import javax.servlet.*;
import javax.servlet.http.*;
import dori.jasper.engine.*;
import java.io.*;
import java.util.*;
import java.sql.*;
/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class TestReport extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection conn = null;
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn =
DriverManager.getConnection(
"jdbc:microsoft:sqlserver://192.168.0.10:1433;DatabaseName=am;user=sa;password=sa");
ServletContext servletContext =this.getServletContext();
File reportFile = new File(servletContext.getRealPath("test/iteminfo.jasper"));
Map parameters = new HashMap();
Integer i=new Integer(8);
parameters.put("pjId", i);
byte[] bytes =
JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
conn);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (JRException jre) {
System.out.println("JRException:" + jre.getMessage());
} catch (Exception e) {
System.out.println("Exception:" + e.getMessage());
}
}
public void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
2.) JSP:
<%@ page contentType="text/html;charset=GBK" %>
<%@ page import="dori.jasper.engine.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%
//數據庫連接
Connection conn=null;
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.0.10:1433;DatabaseName=am;user=sa;password=
sa");
//取到編譯后的jasper文件
File reportFile = new File(application.getRealPath("test/iteminfo.jasper"));
//向報表中定義的參數賦值
Map parameters = new HashMap();
Integer i=new Integer(8);
parameters.put("pjId", i);
byte[] bytes =
JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
conn
);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
%>
?
3.)
如何將
PDF
格式報表結果直接輸出到打印機
?
注:這段代碼只能應用在
JavaApplication
中
public void print() throws UnsupportedFormatException
{
save("./tmp.pdf");
try
{
String osName = System.getProperty("os.name");
//FOR WINDOWS 95 AND 98 USE COMMAND.COM
if (osName.equals("Windows 95") || osName.equals("Windows 98"))
{
Runtime.getRuntime().exec("command.com /C start acrord32 /p " + "./tmp.pdf");
}
//FOR WINDOWS NT/XP/2000 USE CMD.EXE
else
{
Runtime.getRuntime().exec("cmd.exe /C Start acrord32 /p " + "./tmp.pdf");
}
}
catch (IOException IOE)
{
JOptionPane.showMessageDialog(null, IOE.getMessage(), "RuntimeException",
JOptionPane.ERROR_MESSAGE);
}
}
?
6.
以上是本人在學習
Jasperreport
及
ireport
中認為應該注意的及容易碰到的一些問題,許多解決方案是直接從網上摘錄的,另外
Jasperreport
及
ireport
的軟件及一些相關的學習資料,我已經將其
COPY
到公司的
SERVER
服務器暫存盤上我的個人目錄下的網絡報表設計子目錄中,大家要是不想自己去下載,可直接到服務器上去
COPY
一份,同時也希望對大家有所幫助。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=645592
posted on 2006-11-09 08:59
xnabx 閱讀(288)
評論(0) 編輯 收藏 所屬分類:
2、Web