一、需求
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
分享到:
相关推荐
Flex可以调用浏览器的JavaScript API,而JavaScript又可以与Applet进行交互。Applet通过`LiveConnect`技术暴露Java对象到JavaScript环境中,使得Flex能够通过JavaScript访问这些对象。 - 在Flex中,我们可以使用`...
在"jasperreport+applet客户端打印demo"中,我们探讨的是如何利用JasperReport结合Java Applet技术实现客户端的打印功能。 首先,JasperReport提供了丰富的模板设计功能,通过JRXML文件可以定义报告的布局、样式、...
JavaScript(简称JS)和Applet是两种在Web开发中用于增强网页交互性的技术。JavaScript是一种轻量级的...然而,考虑到Applet的过时和安全性问题,建议转向现代的Web技术如Web Components、WebSockets等进行交互开发。
本资源是博客《js 动态调用 applet 内的方法》一文示例程序,博客地址:http://blog.csdn.net/defonds/archive/2011/03/23/6270498.aspx。 以下步骤、命令行全都在 jsCallApplet 目录下进行。 步骤一:将 FileApplet...
在本主题中,我们将探讨如何利用JasperReport进行客户端打印,特别是通过Applet的方式。 首先,我们需要理解JasperReport的核心概念。JasperReport允许用户使用JRXML文件设计报告模板,这个模板包含了布局、数据源...
让我们深入到例子中,假设我们有一个名为"AppletExample.jar"的Applet,它包含一个名为`MyApplet`的类,这个Applet需要与页面上的JS进行通信。在HTML页面中,我们先定义Applet: ```html <applet code=...
通过上述步骤,我们能够利用Java Applet与JasperReport来实现在Web端的精确打印功能。尽管Java Applet的技术已不如以往流行,但在某些特定场景下仍然具有其独特优势。对于那些对打印格式有特殊需求的企业级应用而言...
本文主要讲述了如何使用JSP页面调用Applet实现人民币的大小写转换。该实现方法通过在JSP页面中嵌入一个Applet,使用JavaScript与Applet进行交互,实现实时的人民币大小写转换。 一、JSP页面调用Applet的实现 在JSP...
在Applet和Servlet之间进行通信,通常是为了实现一些复杂的交互功能,比如在这个例子中,Applet需要请求Servlet来获取文件流,然后利用该文件流进行打印。 1. **Applet请求Servlet**: 当Applet需要从服务器获取...
标题中的“jasperreport报表模板预览 applet与servlet通信”揭示了本文将要讨论的重点,即如何在Java环境中使用JasperReport库创建报表模板,并通过Applet和Servlet进行数据交互来实现预览功能。JasperReport是一个...
在Java Web Start或嵌入到HTML中的Applet中,我们可以加载JasperReport生成的报表,并通过Applet调用系统的打印服务,从而实现在客户端进行无服务器打印。然而,需要注意的是,由于安全限制和浏览器兼容性问题,Java...
例如,Applet不能随意调用其他程序、进行文件读写、加载本地库或与非提供Applet的主机建立socket连接。这些限制确保了用户在浏览网页时的安全性。 Applet的生命周期包括了四个关键方法:init(), start(), stop()和...
4. **调用服务**:在浏览器中访问嵌有applet的网页,用户可以交互式地查看和打印报表。 五、最佳实践与注意事项 1. **性能优化**:由于applet需要在浏览器环境中运行,需要注意资源占用,尽量减少报表的复杂性和...
### iReport + JasperReport 客户端打印与数字签名详解 #### 一、概述 iReport 是一个用于设计 JasperReports 报告模板的图形界面工具,而 JasperReports 则是一款非常流行的 Java 报告工具,它能够从各种数据源...
### 如何在JS文件中写加载Applet控件(JS与JSP分离技术) #### 一、背景介绍 在Web开发领域,特别是早期的Java Web应用中,Applet控件曾是一种广泛使用的客户端插件技术。它允许开发者将Java代码嵌入到网页中,...
标题中的“Applet与Javascript的对话——让你的Javascript代码和Java Applet融洽地合作”指的是一种技术实现,即如何让JavaScript与Java Applet在Web应用中进行交互。这两种技术在早期Web开发中常常结合使用,以利用...
6. **使用Java RMI(远程方法调用)**:虽然不是常见的做法,但Applet可以通过RMI与服务器上的JSP进行通信,允许在客户端和服务器之间调用方法。不过,由于RMI涉及的安全性和复杂性,这种方法在实际应用中并不常见。...
它包含`JasperPrintManager`类,该类提供了管理打印任务的功能,包括调用本地打印机。 2. **jcommon-1.0.15.jar**:JCommon是JasperReports的一个依赖库,提供了图形和数据处理的支持,对于生成报表和图表至关重要...