这几天本人专门对网络报表的设计及打印技术进行了调查研究,在网上收集了许多相关资料,其中
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 阅读(254)
评论(0) 编辑 收藏 所属分类:
2、Web