Jasper客户端打印,通过demo中webapp的applet来实现

1.系统框架: webwork+ibtatis+spring 2.webwork已经有集成jasper =========================================== 仅需如下配置xwork.xml /WEB-INF/pages/application/netprint/emsmail/emsmail.jasper emsmailList PDF 以上这种方式仅能导出相应的数据如生成pdf,xls等.为了能够打印,则需重写该方式,配置如下: 将上面原来导出的 type="jasper"修改为 type="exjasper", 就会调会XXX.JasperReportsResult这个类 这个类修改原JasperReportsResult,我拷备的是struct2中的这个类,同时修改以下内容. A.JasperReportsResult extends WebWorkResultSupport implements JasperReportConstants B.去除writeReport(HttpServletResponse response, byte[] output) exportReportToBytes(JasperPrint jasperPrint, JRExporter exporter) C // Fill the report and produce a print object try { JasperReport jasperReport = (JasperReport) JRLoader.loadObject(systemId); jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, stackDataSource); //1JasperPrintManager.printReport(jasperPrint, true);//2008-08-25 直接打印,不用预览PDF直接打印 true为弹出打印机选择.false为直接打印.如果采用该方式,只能服务端打印. } catch (JRException e) { LOG.error("Error building report for uri " + systemId, e); throw new ServletException(e.getMessage(), e); } //2采用以下方案,目的是将 jasperPrint 作为一个对象写入数据流,客户端通过applet取得 response.setContentType("application/octet-stream"); ServletOutputStream ouputStream = response.getOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(ouputStream); oos.writeObject(jasperPrint);//将JasperPrint对象写入对象输出流中 oos.flush(); oos.close(); ouputStream.flush(); ouputStream.close(); ============================================= 3.applet的实现 ============================================= 调用applet的jsp页面,同时传入参数REPORT_URL. <%@page language="java" isErrorPage="true" pageEncoding="GB2312" contentType="text/html;charset=gb2312" %> <%@include file="/common/taglibs.jsp"%> " /> A.配置ant,编译demo中的webapp 在cmd中输入 set path=%path%;D:/eclipse/eclipse/plugins/org.apache.ant_1.7.0.v200706080842/bin (这个的设置根据eclipse中已经有ant了,通过anthome查看该路径,使cmd识别ant命令) 然后进入webapp中,在此文件夹下有一个build.xml文件,ant会根据该文件进行编辑运行. B,在编译运行之后,生成applets下会生成相应的class与所需的包,然后还需增加log4j.jar包就OK了.拷备到你的工作目录下,应该就可以运行了. C 说明,如果单独运行以上的测试文件,只需要applets与该html文件在同一目录下就可以否则会发生找不到PrinterApplet.class的异常.如果打开的该 html打开是有路径的 如http://localhost/nettest/mytest.html,则,需要将applets整个复制到 相应的路径下如nettest/applets下,这个才可以正常运行. ============================================================ 4.这个框架不完善的地方是 A,applet加载很慢,而且客户必须安装jre. B.打印不能直接运行,因为applet运行很慢,如果在applet的构造方法时调用打印程序,会产生 REPORT_URL无法正常读取的异常.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quarkus是一个基于Java平台的开源微服务框架,它可以帮助开发人员快速构建高效的应用程序。JasperReport是一个Java报表库,可以用来生成各种格式的报表,包括PDF、HTML、Excel等。下面是一个使用Quarkus和JasperReport生成PDF报表的示例代码: 首先添加依赖项,包括JasperReport和iText: ```xml <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.17.0</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.2</version> </dependency> ``` 然后编写一个简单的REST端点来处理请求并生成报表: ```java import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; import java.io.InputStream; import java.util.HashMap; import java.util.Map; @Path("/report") public class ReportResource { @GET @Produces("application/pdf") public Response generateReport() throws Exception { InputStream reportStream = getClass().getResourceAsStream("/report.jasper"); Map<String, Object> params = new HashMap<>(); params.put("title", "My Report"); byte[] pdfBytes = JasperRunManager.runReportToPdf(reportStream, params, new JREmptyDataSource()); return Response.ok(pdfBytes).header("Content-Disposition", "attachment; filename=myreport.pdf").build(); } } ``` 在这个例子,我们使用了一个.jasper文件来定义报表模板。在generateReport方法,我们使用JasperReport API来填充模板并生成PDF文件。最后,我们将生成的PDF文件作为响应发送给客户端需要注意的是,这只是一个简单的示例代码,实际应用可能需要更复杂的报表模板和数据源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值