applet的用武之地--转
来源:互联网 发布:拉丁舞教学软件下载 编辑:程序博客网 时间:2024/06/01 07:18
- /*
- *这只是一些重点提示,甚至不是一个例子
- */
- private static final String CONTENTTYPE = "application/octet-stream";
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType(CONTENTTYPE);
- ServletOutputStream ouputStream = response.getOutputStream();
- try {
- ObjectOutputStream oos = new ObjectOutputStream(ouputStream);
- //这里是调用了另外一个servlet,其结果也是返回一个JasperPrint对象
- JasperPrint jpt = rst.getReportPrint(rptCode, context,object, tradeTypeInput);
- oos.writeObject(jpt);
- oos.flush();
- oos.close();
- } catch (ReportException e) {
- //处理
- }
2、用applet接收servlet传出的JasperPrint对象这个,根本就是照抄JapserReport的demo源码了,稍微做了一些改动(比如去掉了预览、不需要按打印按钮直接打印)代码如下:
- package report.web;
- import java.io.PrintWriter;
- import java.io.StringWriter;
- import java.net.URL;
- import javax.swing.JOptionPane;
- import net.sf.jasperreports.engine.JasperPrint;
- import net.sf.jasperreports.engine.JasperPrintManager;
- import net.sf.jasperreports.engine.util.JRLoader;
- /**
- * @author Teodor Danciu (teodord@users.sourceforge.net)
- * @version $Id: PrinterApplet.java 1229 2006-04-19 13:27:35 +0300 (Wed, 19 Apr 2006) teodord $
- */
- public class JRPrinterApplet extends javax.swing.JApplet
- {
- /**
- *
- */
- private URL url = null;
- private JasperPrint jasperPrint = null;
- /** Creates new form AppletViewer */
- public JRPrinterApplet()
- {
- }
- /**
- *
- */
- public void init()
- {
- String strUrl = getParameter("REPORT_URL");
- if (strUrl != null)
- {
- try
- {
- url = new URL(getCodeBase(), strUrl);
- }
- catch (Exception e)
- {
- StringWriter swriter = new StringWriter();
- PrintWriter pwriter = new PrintWriter(swriter);
- e.printStackTrace(pwriter);
- JOptionPane.showMessageDialog(this, swriter.toString());
- }
- }
- else
- {
- JOptionPane.showMessageDialog(this, "Source URL not specified");
- }
- }
- public void start() {
- if (url != null)
- {
- if (jasperPrint == null)
- {
- try
- {
- jasperPrint = (JasperPrint)JRLoader.loadObject(url);
- }
- catch (Exception e)
- {
- StringWriter swriter = new StringWriter();
- PrintWriter pwriter = new PrintWriter(swriter);
- e.printStackTrace(pwriter);
- JOptionPane.showMessageDialog(this, swriter.toString());
- }
- }
- if (jasperPrint != null)
- {
- final JasperPrint print = jasperPrint;
- Thread thread = new Thread
- (
- new Runnable()
- {
- public void run()
- {
- try
- {
- JasperPrintManager.printReport(print, true);
- }
- catch (Exception e)
- {
- StringWriter swriter = new StringWriter();
- PrintWriter pwriter = new PrintWriter(swriter);
- e.printStackTrace(pwriter);
- JOptionPane.showMessageDialog(null, swriter.toString());
- }
- }
- }
- );
- thread.start();
- }
- else
- {
- JOptionPane.showMessageDialog(this, "Empty report.");
- }
- }
- else
- {
- JOptionPane.showMessageDialog(this, "Source URL not specified");
- }
- }
- }
3、打包applet的class和所需的jar包,并加上数字签名要运行这个applet需要jasperreports-1.2.8-applet.jar(后来我想了一下,之所以照抄网上的例子不能成功的原因,很有可能是导入的jar包不对,这个工作是之前的程序员做的,他导入的包当中没有applet这个),可以用winrar直接解压缩了,然后把applet编辑后的class和解压缩后的文件放在同一个目录(比如temp),在命令提示符中输入 jar 命令打成一个包,例如:jar -cvf reportprint.jar *接着开始做数字签名:1)用keytool生成证书:keytool -genkey -alias mykey -keystore mystore2)还是用keytool导出证书:keytool -export -keystore mystore -alias mykey -file my.cer3)用jarsigner给reportprint.jar加上数字签名:jarsigner -keystore mystore reportprint.jar mykey以上都是在命令提示符下运行,mykey和mystore都可以以自己的命名方式来命名现在在temp下已经有了一个reportprint.jar和一个my.cer,把这两个文件拷贝回项目中,记得还是放在同一个目录下
4、用Ajax连接页面和servlet弹出的打印小窗口中不需要把applet加载进去,等按下打印按钮之后再用innerHTML的方式加载,比如:
- //还是一样,这个不是例子,只是重点提示
- var print = document.getElementById("printtest");
- var path = //这里是servlet的地址;
- print.innerHTML = "……" //这里是加载applet的代码,貌似这里直接给出会出错,那么去看JasperReport给的例子好了,例子名称是webapp
5、测试打印按下打印按钮后会出现是否运行签名的提示,允许之后就会弹出系统自带的打印对话框。如果不想弹出打印对话框直接在打印机上打印,那么在applet中把JasperPrintManager.printReport(print, true); 改成JasperPrintManager.printReport(print, false);就好,JasperReport的api里有说明
三、环境要求需要客户端安装Jre1.5,并且IE选项高级里,必须将“将JRE1.5.x.xx用于applet(需要重启动)”勾选上才行。在window+IE6.0中运行通过。
至此,用JasperReport在客户端实现本地打印完成。
- applet的用武之地--转
- Shell的用武之地
- 用武之地
- 泛型委托的用武之地
- 幕后英雄的用武之地——浅谈Java内部类的四个应用场景[转]
- 单枪匹马的英雄是否还有用武之地?
- linux面试之-多线程的用武之地
- Selenium RC在浏览器兼容性测试的用武之地
- 区块链大有用武之地的20大行业
- 机器学习 和 深度学习各自的用武之地
- [转]何為HTTP POST?又有何用武之地?
- java.applet.Applet的网络功能(二)
- Applet的介绍
- Applet的测试
- trusted applet的制作
- Java Applet的生命周期
- Applet的语言特点
- Applet的生命周期
- 接触WAP_WML的一些总结[不断补充]
- 如何提高GIS应用系统的运行速度
- java面试笔试题大汇总 及c/c++面试试题(转载 )
- java 练习
- 建模厉器E-RWin
- applet的用武之地--转
- Java调用本地接口(JNI) (二)
- javascript操作select
- removeMovieClip 无效的解决办法
- 实用计算机网络编程 作业3.doc
- Direct3D9 教程01
- 使用Visual Studio生成安装包
- 王鲁平:IT部门要自立
- 从大学生到程序员