`

Flex 调用 Applet、Applet 利用jasperreport进行打印

阅读更多

一、需求

 

Flex 作为用户界面,调用打印机(需要指定打印机名称)直接进行打印。

 

二、分析

 

Flex就目前而言,调用打印机时,每次都会弹出选择打印机的对话框。需点击确认按钮然后才进行打印。我需要打印时,直接打印出来,打印机由程序指定。同时为了打印内容易设计,我打印时用到了JasperReport。由于Applet可以指定打印机名称,我实现的方式如下:

Flex 调用 JavaScript

JavaScript 调用Applet

Applet调用Servlet

Servlet利用Jasperreport进行打印

 

三、实现(关键代码)

 

1.创建一个Servlet,负责调用jasperreport

 

 

public class JasperPrintServlet extends HttpServlet

{



/**

*

*/

public void service(

HttpServletRequest request,

HttpServletResponse response

) throws IOException, ServletException

{

ServletContext context = this.getServletConfig().getServletContext();

String param=request.getParameter("param");

String[] ps=param.split(",");

try

{

JasperCompileManager.compileReportToFile(context.getRealPath("/reports/WebappReport.jrxml"));

File reportFile = new File(context.getRealPath("/reports/WebappReport.jasper"));

if (!reportFile.exists())

throw new JRRuntimeException("File WebappReport.jasper not found. The report design must be compiled first.");


Map parameters = new HashMap();

parameters.put("P1", ps[0]);

parameters.put("P2", ps[1]);

parameters.put("BaseDir", reportFile.getParentFile());

JasperPrint jasperPrint = null;


JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());

jasperPrint = 

JasperFillManager.fillReport(

jasperReport,

parameters, 

//new WebappDataSource()

new JREmptyDataSource()

);

request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);

if (jasperPrint != null)

{

response.setContentType("application/octet-stream");

ServletOutputStream ouputStream = response.getOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(ouputStream);

oos.writeObject(jasperPrint);

oos.flush();

oos.close();


ouputStream.flush();

ouputStream.close();

}

else

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<head>");

out.println("<title>JasperReports - Web Application Sample</title>");

out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">");

out.println("</head>");

out.println("<body bgcolor=\"white\">");

out.println("<span class=\"bold\">Empty response.</span>");

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

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

}

System.out.println("print ---------------------");

}

catch (Exception e)

{

e.printStackTrace();

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<head>");

out.println("<title>JasperReports - Web Application Sample</title>");

out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">");

out.println("</head>");

out.println("<body bgcolor=\"white\">");


out.println("<span class=\"bnew\">JasperReports encountered this error :</span>");

out.println("<pre>");


e.printStackTrace(out);


out.println("</pre>");


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

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


return;

}


}



}

 

 

2.创建 Applet

 

 

public class HelloSwingApplet extends JApplet 

{

private URL url = null;

private JasperPrint jasperPrint = null;

public HelloSwingApplet() 

{

}

public void init2(String param) 

{

String strUrl = getParameter("REPORT_URL");

if (strUrl != null)

{

try

{

url = new URL(getCodeBase(), strUrl+"?param="+param);

}

catch (Exception e)

{

StringWriter swriter = new StringWriter();

PrintWriter pwriter = new PrintWriter(swriter);

e.printStackTrace(pwriter);

JOptionPane.showMessageDialog(this, swriter.toString());

}

}

if (url != null)

{

try

{

jasperPrint = (JasperPrint)JRLoader.loadObject(url);

if (jasperPrint == null)

JOptionPane.showMessageDialog(this, "Empty report.");

}

catch (Exception e)

{

StringWriter swriter = new StringWriter();

PrintWriter pwriter = new PrintWriter(swriter);

e.printStackTrace(pwriter);

JOptionPane.showMessageDialog(this, swriter.toString());

}

}

}

 

  }

}

 

 

 

 

3.Flex 的swf文件对应的html部分代码

 

 

function print(param){

  document.applets[0].printReport(param);

}

function focusswf(){

report.focus();

}

</script>


<APPLET CODE = "HelloSwingApplet.class" ARCHIVE = "jasperreports-3.0.0-applet.jar" codebase="http://localhost:8500/webprint">

<PARAM NAME = "REPORT_URL" VALUE ="servlets/jasperprint">

</APPLET>

 

 

注意事项

 

注意红色代码:codebase="http://localhost:8500/webprint",这个值随具体环境做相应变化,Archive这个属性值也不可丢弃

 

4.Flex 调用 js 代码

 

 

if(ExternalInterface.available){

ExternalInterface.call("print",paravalues);

}

 

 

 

5.附上工程代码

 

 

速度极其慢,无法上传(好像現在無法上傳哦)

我现在将后缀名rar改成jpg上传,下载完了的话将jpg改成rar,再解压即可。

说明:client.jpg 是Flex 客户端;webprint.jpg 是服务器端,服务器端涉及到的lib是jasperreport3.0的lib加上blaszeDS的lib。在此不上传

  • 描述: 客户端下载后改后缀名为rar,再进行解压
  • 大小: 13.8 KB
  • 描述: 服务器端
  • 大小: 1.8 MB
0
0
分享到:
评论
4 楼 wsxjq 2012-05-28  
print 是直接调用的是打机印吧!
3 楼 wsxjq 2012-05-28  
请问Flex调用JS,JS调用Applet能否写详细点呢?
2 楼 lyh7609 2011-02-08  
右键单击下载图片,将下载后的图片的后缀名改成rar
1 楼 Roy_Zhang82 2011-01-30  
点什么能下载啊?

相关推荐

    Flex与Applet交互例子

    Flex可以调用浏览器的JavaScript API,而JavaScript又可以与Applet进行交互。Applet通过`LiveConnect`技术暴露Java对象到JavaScript环境中,使得Flex能够通过JavaScript访问这些对象。 - 在Flex中,我们可以使用`...

    jasperreport+applet客户端打印demo

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

    js与applet的相互调用资源包

    JavaScript(简称JS)和Applet是两种在Web开发中用于增强网页交互性的技术。JavaScript是一种轻量级的...然而,考虑到Applet的过时和安全性问题,建议转向现代的Web技术如Web Components、WebSockets等进行交互开发。

    js 动态调用 applet 内的方法示例程序

    本资源是博客《js 动态调用 applet 内的方法》一文示例程序,博客地址:http://blog.csdn.net/defonds/archive/2011/03/23/6270498.aspx。 以下步骤、命令行全都在 jsCallApplet 目录下进行。 步骤一:将 FileApplet...

    jasperReport客户端打印。

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

    关于 js 和 applet 相互调用的例子

    让我们深入到例子中,假设我们有一个名为"AppletExample.jar"的Applet,它包含一个名为`MyApplet`的类,这个Applet需要与页面上的JS进行通信。在HTML页面中,我们先定义Applet: ```html &lt;applet code=...

    Java燗applet+jasperReport 实现web端打印

    通过上述步骤,我们能够利用Java Applet与JasperReport来实现在Web端的精确打印功能。尽管Java Applet的技术已不如以往流行,但在某些特定场景下仍然具有其独特优势。对于那些对打印格式有特殊需求的企业级应用而言...

    jsp页面调用applet实现人民币的大小写转换.docx

    本文主要讲述了如何使用JSP页面调用Applet实现人民币的大小写转换。该实现方法通过在JSP页面中嵌入一个Applet,使用JavaScript与Applet进行交互,实现实时的人民币大小写转换。 一、JSP页面调用Applet的实现 在JSP...

    applet和servlet的通讯,并打印

    在Applet和Servlet之间进行通信,通常是为了实现一些复杂的交互功能,比如在这个例子中,Applet需要请求Servlet来获取文件流,然后利用该文件流进行打印。 1. **Applet请求Servlet**: 当Applet需要从服务器获取...

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

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

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

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

    Applet

    例如,Applet不能随意调用其他程序、进行文件读写、加载本地库或与非提供Applet的主机建立socket连接。这些限制确保了用户在浏览网页时的安全性。 Applet的生命周期包括了四个关键方法:init(), start(), stop()和...

    jasperreports-applet-5.1.0.jar

    4. **调用服务**:在浏览器中访问嵌有applet的网页,用户可以交互式地查看和打印报表。 五、最佳实践与注意事项 1. **性能优化**:由于applet需要在浏览器环境中运行,需要注意资源占用,尽量减少报表的复杂性和...

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

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

    如何在js文件中写加载Applet控件(js与jsp分离技术)

    ### 如何在JS文件中写加载Applet控件(JS与JSP分离技术) #### 一、背景介绍 在Web开发领域,特别是早期的Java Web应用中,Applet控件曾是一种广泛使用的客户端插件技术。它允许开发者将Java代码嵌入到网页中,...

    Applet与Javascript的对话——让你的Javascript代码和Java Applet融洽地合作.pdf

    标题中的“Applet与Javascript的对话——让你的Javascript代码和Java Applet融洽地合作”指的是一种技术实现,即如何让JavaScript与Java Applet在Web应用中进行交互。这两种技术在早期Web开发中常常结合使用,以利用...

    applet与jsp的交互

    6. **使用Java RMI(远程方法调用)**:虽然不是常见的做法,但Applet可以通过RMI与服务器上的JSP进行通信,允许在客户端和服务器之间调用方法。不过,由于RMI涉及的安全性和复杂性,这种方法在实际应用中并不常见。...

    js与applet相互调用的方法.docx

    ### JS与Applet相互调用的方法 #### 一、引言 随着Web技术的发展,JavaScript (简称JS) 和 Java Applet 成为了早期Web应用的重要组成部分。这两种语言在不同的环境中运行,但通过一定的技术手段可以实现它们之间的...

Global site tag (gtag.js) - Google Analytics