Applet 类代码
package code.main.bean.controller.common;
import java.applet.Applet;
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;
public class JRPrinterApplet extends javax.swing.JApplet
{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
private URL url = null;
private JasperPrint jasperPrint = null;
/** Creates new form AppletViewer */
public JRPrinterApplet()
{
}
/**
*
*/
public void init()
{
System.out.println("Applet已经开始初始化");
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, "init():Source URL not specified");
}
System.out.println("Applet初始化完成");
}
public void start() {
System.out.println("Applet开始运行");
if (url != null)
{
if (jasperPrint == null)
{
try
{
System.out.println("url="+url);
System.out.println("进入start方法,即将加载jasperPrint对象");
jasperPrint = (JasperPrint)JRLoader.loadObject(url);
System.out.println("加载jasperPrint对象");
}
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
{
System.out.println("jasperPrint加载完成,即将打印pdf文件");
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, "start():Source URL not specified");
}
System.out.println("Applet运行结束");
}
}
输出printObj
package code.main.bean.controller.common;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
@Controller
@RequestMapping("PrintDJ")
public class PrintDJController {
private static final String CONTENTTYPE = "application/octet-stream";
@RequestMapping("printTest")
@SuppressWarnings("unchecked")
public void printYsf(HttpServletRequest request,
HttpServletResponse response, String billCode) throws Exception {
response.setContentType(CONTENTTYPE);
System.out.println("开始调用print请求");
request.setCharacterEncoding("utf-8");
String reportPath = request.getSession().getServletContext()
.getRealPath("/reports/test.jasper");
//response.reset();
System.out.println(billCode);
Map params = new HashMap();
params.put("name", "god");
params.put("sex", "无");
params.put("age", billCode);
JasperPrint print = JasperFillManager.fillReport(reportPath,params);
//JasperPrintManager.printReport(print, true);
//PrintWriter out = response.getWriter();
ServletOutputStream ouputStream = response.getOutputStream();
ObjectOutputStream out = new ObjectOutputStream(ouputStream);
out.writeObject(print);//将JasperPrint对象写入对象输出流中
//PrintWriter out;
//out.write("{'success':true,'demoData':'yes'}");
out.flush();
out.close();
System.out.println("请求完毕关闭输出流");
}
}
页面部分
var url = "/JRPrintServlet";
document.write('<APPLET ID="JrPrt" CODE="com.defonds.test.JRPrinterApplet.class" CODEBASE = "./" ARCHIVE = "reportprint.jar" WIDTH = "0" HEIGHT = "0">');
document.write('<PARAM NAME = "type" VALUE="application/x-java-applet;version=1.2.2">');
document.write('<PARAM NAME = "scriptable" VALUE="false">');
document.write('<PARAM NAME = "REPORT_URL" VALUE ="'+url+'">');
document.write('</APPLET>');
右键点击 Applet类,run as java applet,如果运行通过就可以打包签名了
将 jasperreport 目录下的 jasperreports-3.0.1-applet.jar 解压。在任一磁盘根目录下新建一文件夹 temp,将 jasperreports-3.0.1-applet.jar 解压后的 META-INF、net、default.jasperreports.properties(这个一定要复制,不然会报 NullPointer 异常)全部复制到 temp下,将 test2 项目下的 WEB-INF 下 classes 中的文件 com 也复制到 temp 下。
CMD 命令, E:/temp>
下键入 jar -cvf reportprint.jar *
temp 目录下会生成 reportprint.jar 包。
用keytool生成证书:keytool -genkey -alias printkey -keystore printstore
还是用keytool导出证书:keytool -export -keystore printstore -alias printkey -file print.cer
用jarsigner给reportprint.jar加上数字签名:jarsigner -keystore printstore reportprint.jar printkey
以上都是在命令提示符下运行,printkey和printstore都可以以自己的命名方式来命名。现在在temp下已经有了一个reportprint.jar和一个print.cer,把这两个文件拷贝回项目中,记得还是放在同一个目录下(最好是根目录,即项目的 WebRoot 下)。
原文:http://blog.csdn.net/defonds/article/details/4440697