随笔-61  评论-13  文章-19  trackbacks-0
这几天本人专门对网络报表的设计及打印技术进行了调查研究,在网上收集了许多相关资料,其中 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

只有注册用户登录后才能发表评论。


网站导航: