`
HJXia
  • 浏览: 87654 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JasperReport-applet

    博客分类:
  • JAVA
阅读更多
最近因为项目需要,要在applet上显示报表,一下子傻了眼,applet已经N年没用过了,上网找了好久,找到了JasperReport-applet.以下就来说说如何在applet上显示报表.

首先需要下载jasperReport的jar包.可以去他的官网上下.目前最新版本为2.0.5.
新建工程,在WebRoot下新建文件夹applets,当然这名字随意建.不过后面有配置地方需要用的到.在jasperreport包内demo/samples/webapp/applets下,把EmbeddedViewerApplet.class,JRViewerSimple.class,以及jasperreport-2.0.5-applet.jar拷入自己项目中建的applets文件夹下.注意,刚打开那个jar包里是没有class文件,只有java文件,需要用ant build下.你也可以拷出java文件,然后编译.

OK,以上一些基本操作已经完成.下面就要一些编程操作了.
写个处理的servlet, 代码如下:
PdfViaAppletServlet,
public class PdfViaAppletServlet extends HttpServlet {

	
	
	public void service(HttpServletRequest request, HttpServletResponse response)
    			throws IOException, ServletException
	{
		ServletContext context = this.getServletConfig().getServletContext();
		
		if (request.getSession().getAttribute(MyDataSource.REPORT_DATASOURCE) == null)
		{
		    showNoData(response);
		    return;
		}
		
		MyDataSource myDataSource = (MyDataSource) request.getSession()
		.getAttribute(MyDataSource.REPORT_DATASOURCE);
		
		File reportFile = new File(context.getRealPath("/WEB-INF/reports/"
		        + myDataSource.getFilename() + ".jasper"));
		if (!reportFile.exists())
		    throw new JRRuntimeException(
		            "File "
		                    + myDataSource.getFilename()
		                    + ".jasper not found. The report design must be compiled first.");
		myDataSource.getParameters().put("BaseDir", reportFile.getParentFile());
		
		if (myDataSource.getFields() == null || myDataSource.getFields().size() == 0)
		{
		    showNoData(response);
		    return;
		}
		
//		byte[] bytes = null;
		JasperPrint jasperPrint = null;
		
		try
		{
//		    log.debug(" ===== start to generate pdf file ===== ");
//		    bytes = JasperRunManager.runReportToPdf(reportFile.getPath(),
//		            myDataSource.getParameters(), myDataSource);
		    jasperPrint = JasperFillManager.
		    							fillReport(reportFile.getPath(), myDataSource.getParameters(), myDataSource);
//		    log.debug(" ===== end to generate pdf file ===== ");
		}
		catch (JRException e)
		{
		    showException(response, e);
		    return;
		}
		
		if (jasperPrint != null)
		{
		    response.setContentType("application/octet-stream");
//		    response.setContentLength(bytes.length);
		    ServletOutputStream outputStream = response.getOutputStream();
		    ObjectOutputStream oos = new ObjectOutputStream(outputStream);
//		    outputStream.write(bytes, 0, bytes.length);
		    oos.writeObject(jasperPrint);
		    oos.flush();
		    oos.close();
		    
		    outputStream.flush();
		    outputStream.close();
		    request.getSession()
		            .removeAttribute(MyDataSource.REPORT_DATASOURCE);
		}
		else
		{
		    showNoData(response);
		}
	}
	
	//--------- private method --------------
	
	private void showException(HttpServletResponse response, JRException e)
    				throws IOException
	{
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>InHouse2 - Reports</title>");
		out
		        .println("<link rel=\"stylesheet\" type=\"text/css\" href=\"/styles/default.css\"");
		out.println("</head>");
		
		out.println("<body>");
		
		out
		        .println("<span class=\"bnew\">InHouse2Report encountered this error :</span>");
		out.println("<pre>");
		
		e.printStackTrace(out);
		
		out.println("</pre>");
		
		out.println("</body>");
		out.println("</html>");
	}
	
	private void showNoData(HttpServletResponse response) throws IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>InHouse2 - Reports</title>");
        out
                .println("<link rel=\"stylesheet\" type=\"text/css\" href=\"/styles/default.css\"");
        out.println("</head>");

        out.println("<body>");

        out.println("No data show");

        out.println("</body>");
        out.println("</html>");
    }

}


OK,基本上快完成了,上面的MyDataSource是自己定义,代码如下:
MyDataSource,
public class MyDataSource implements JRDataSource {

    public final static String REPORT_DATASOURCE = "report_datasource";

    private int index = -1;
    private String filename;
    private Map parameters;
    private List fields;

    public MyDataSource(String filename, Map parameters, List fields) {
        this.parameters = parameters;
        this.fields = fields;
        this.filename = filename;
    }

    public boolean next() throws JRException {
        index++;
        return (index < fields.size());
    }

    public Object getFieldValue(JRField field) throws JRException {
        Map record = (Map) fields.get(index);
        return record.get(field.getName());
    }

    public Map getParameters() {
        return parameters;
    }

    public String getFilename() {
        return filename;
    }

    public List getFields() {
        return fields;
    }
}




最后就是显示的页面了:当然这里applet标签需要用object标签替换:
view.html,
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>view.html</title>
	
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
    <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
		WIDTH = 100% HEIGHT = "100%"  codebase="http://java.sun.com/update/1.4.2/jinstall-1_4-windows-i586.cab#Version=1,4,0,0">
		
		<PARAM NAME = CODE VALUE  = "EmbeddedViewerApplet.class" >
		<PARAM NAME = CODEBASE VALUE  = "applets" >
		<PARAM NAME = ARCHIVE VALUE  = "jasperreports-2.0.5-applet.jar,jasperreports-2.0.5.jar" >
		<PARAM NAME = "type" VALUE ="application/x-java-applet;version=1.2.2">
		<PARAM NAME = "scriptable" VALUE ="false">
		<PARAM NAME = "REPORT_URL" VALUE  ="../PdfViaAppletServlet">
		
		<COMMENT>
		    <EMBED 
		            type = "application/x-java-applet;version=1.4" 
		            CODE = "EmbeddedViewerApplet.class" 
		            CODEBASE = "applets"
		            ARCHIVE = "jasperreports-2.0.5-applet.jar,jasperreports-2.0.5.jar"
		            scriptable = "false" 
		            REPORT_URL = "../PdfViaAppletServlet"
		            pluginspage = "http://java.sun.com/products/plugin/index.html#download" width="100%" height="100%">
		        <NOEMBED>
		        alt="Your browser understands the &lt;APPLET&gt; tag but isn't running the applet, for some reason."
		        Your browser is completely ignoring the &lt;APPLET&gt; tag!
		        </NOEMBED>
		    </EMBED>
		</COMMENT>
	
	</OBJECT>
  </body>
</html>


大致流程在后台得到MyDataSource,放入session.跳转至view.html.出报表.至于一些细节方面,如果有看不懂的地方可以问我.
备注:关于放入applets文件夹内的2个class最好不要有package.如果有的话路径方面有的小麻烦,经常会报找不到某某类.
分享到:
评论
4 楼 HJXia 2008-05-15  
这个打印的份数默认就是1啊,不需要设置的哦.
3 楼 kasen 2008-05-06  
用这个方式实现打印,能不能控制打印份数的设定,我现在一直想固定为1。但是找了几天没有找到怎么设置,请帮帮忙。谢谢了。
2 楼 HJXia 2008-04-14  
你说的似乎应该是EmbeddedViewerApplet这个类,这个类是jasperreport自带的,具体路径文章中有说.你可以去看看他的源代码.
1 楼 sonichui 2008-04-11  
你在Applet中是怎样处理PdfViaAppletServlet发回的JasperPrint对象,并显示出报表,我对这个比较有兴趣,可否透露一点代码

相关推荐

    jasperreports-applet-5.1.0.jar

    1. **引入依赖**:首先,在项目中引入JasperReports Applet 5.1.0的相关库文件,包括jasperreports-applet-5.1.0.jar。 2. **创建报表**:使用JasperSoft Studio或类似的工具设计报表模板,并将其编译为.JRXML或....

    jasperreport+applet客户端打印demo

    在"jasperreport+applet客户端打印demo"中,我们探讨的是如何利用JasperReport结合Java Applet技术实现客户端的打印功能。 首先,JasperReport提供了丰富的模板设计功能,通过JRXML文件可以定义报告的布局、样式、...

    iReport+jasperReport之客户端打印 ----数字签名

    ### iReport + JasperReport 客户端打印与数字签名详解 #### 一、概述 iReport 是一个用于设计 JasperReports 报告模板的图形界面工具,而 JasperReports 则是一款非常流行的 Java 报告工具,它能够从各种数据源...

    jasperreport subreport demo v3.7.4

    使用ireport subreort 实现jasperreport主从关系表格的制作和输出(xls,pdf) 版本号3.7.4 可直接导入到eclipse:file&gt;import&gt;general&gt;Existing project&gt;archive...

    jasperreport报表模板预览 applet与servlet通信

    标题中的“jasperreport报表模板预览 applet与servlet通信”揭示了本文将要讨论的重点,即如何在Java环境中使用JasperReport库创建报表模板,并通过Applet和Servlet进行数据交互来实现预览功能。JasperReport是一个...

    JasperReport Struts2 整合所需完整jar

    JasperReport Struts2 web 整合所需完整jar ant-1.7.1.jar antlr-2.7.5.jar asm.jar bsh-2.0b4.jar cglib-2.1.jar commons-beanutils-1.7.0.jar commons-beanutils-1.7.jar commons-collections-2.1.jar commons-...

    jasperReport客户端打印。

    在本主题中,我们将探讨如何利用JasperReport进行客户端打印,特别是通过Applet的方式。 首先,我们需要理解JasperReport的核心概念。JasperReport允许用户使用JRXML文件设计报告模板,这个模板包含了布局、数据源...

    JasperReport 3.0

    3. **jasperreports-3.0.1-applet.jar**:此文件提供了JasperReport的Applet支持,允许在Web浏览器中直接运行报表。通过Java Applet,用户可以在网页上查看和交互报表,这对于需要在线展示和操作报表的应用场景非常...

    jasperreports-flash.4.0

    基于jasperreport开发的flash查看器ver4.0

    使用JasperReport制作PDF所需要的包(1)

    4. **jasperreports-applet-4.1.1.jar**:这个库是JasperReport的Applet版本,使得报告可以在Web浏览器中以Java小应用程序的形式运行。用户可以在网页上直接查看和打印报表,增强了报表的交互性和可访问性。 5. **...

    Java燗applet+jasperReport 实现web端打印

    ### Java Applet + JasperReport 实现Web端打印 #### 背景介绍 在Web开发领域,特别是企业级应用中,精确打印与批量打印是非常重要的功能之一。这不仅关乎用户体验,还涉及到业务流程的顺利执行。传统的Web打印...

    jasperreport.zip

    3. jasperreports-3.6.0-applet.jar:此文件是JasperReport的Applet版本,用于在Web浏览器中直接运行报表。通过Applet,用户可以在网页上查看和交互报表,提升了报表的可访问性。 4. release.notes-3.6.0.txt:这是...

    jasperreports-5.6.0+applet实现客户端打印所需的jar包

    在Java Web Start或嵌入到HTML中的Applet中,我们可以加载JasperReport生成的报表,并通过Applet调用系统的打印服务,从而实现在客户端进行无服务器打印。然而,需要注意的是,由于安全限制和浏览器兼容性问题,Java...

    jasperReport 3.12jar包

    4. **嵌入式和独立使用:** 除了作为Java应用的一部分运行,jasperReport还可以通过applet在Web环境中运行,或者通过JasperServer等服务器产品进行分布式报表服务。 5. **Java Flow:** 这个特性允许报表在需要时按...

    JasperReport+iReport 报表工具详细开发手册

    - **JasperReport本身的jar包**:位于\jasperreports-3.5.2\dist\目录下,主要包括`jasperreports-3.5.2.jar`、`jasperreports-3.5.2-applet.jar`、`jasperreports-3.5.2-javaflow.jar`。 - **JasperReport依赖的第...

    jasperreports最新版本5.2.0主要jar包,方便不方便到官网下载的使用

    jasperreports-5.2.0主要jar包,方便不方便到官网下载的人使用 ...里面包含:jasperreports-5.2.0.jar,jasperreports-applet-5.2.0.jar,jasperreports-fonts-5.2.0.jar,jasperreports-javaflow-5.2.0.jar

    Jasperreport+ireport学习笔记1

    - 将Jasperreport的相关JAR文件(`jasperreports-0.6.2.jar`, `jasperreports-0.6.2-applet.jar`)放置于`C:\jasperreports`目录,并将这两个JAR文件的路径加入到系统的classpath中。 3. **iTextAsian和JDK tools....

    jasperReport资料文档2

    解压后得到 `jasperreport` 目录,其中包含源代码、依赖库和示例项目。 2. **添加依赖** 将下载的 JAR 文件添加到 Java 应用程序的 CLASSPATH 中。如果是基于 Maven 或 Gradle 的项目,则可以通过添加对应的依赖...

Global site tag (gtag.js) - Google Analytics