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

本文介绍了一种使用Flex应用程序调用JasperReport进行指定打印机打印的方法。通过JavaScript和Applet作为中间桥梁,最终由Servlet负责调用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。在此不上传

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值