对于jasperreport打印这个功能,遇到了一大堆问题,也只能一点一点解决我:
1.现在我用的是jasperreport.jar是4.6版本。
(1).因为网上查到:6.0以上版本已经不再支持java打印功能,只能支持页面打印。
(2).如过可以用浏览器打印,那这个打印问题已经解决了
(3).我不想再用5.6版本重新测试一遍了,因为官网给的jasperreport-apples.jar例子里面有很多问题,不想在是一遍
2.对于程序的需要,:
(1).最好在webapp(根目录)下新建一个applets(自命名)文件夹
(2).applets文件夹放入jre1.6.exe或以上版本,因为jasperreport-4.5是jre1.6写的
(3).从官网的jasperreport-4.6例子中,找到commons-collections.jar、commons-digester.jar、commons-logging.jar,和自己的log4j.jar、log4j-core.jar,放入applets
3.对于jasperreports-applet-4.6.0.jar,也放入applets,但是等到测试的时候,这个jar包里有很多问题,如果提示这个class找不到,就从jasperreoprt-4.6.jar中粘进去
创建jar包
(1).官网给的例子jasperreport-applets-4.6.jar解压后,复制default.jasperreports.properties、net,新建文件夹,粘进去
(2).将缺少的class从jasperreport-4.6.jar粘到你放的位置对应的位置
(3).ctrl+p命令,将default.jasperreports.properties、net生成一个jasperreport-applets-4.6.jar,放入applets
4.这是我把官网例子改了以后的代码
importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.engine.JasperPrintManager;importnet.sf.jasperreports.engine.util.JRLoader;import javax.swing.*;importjava.io.PrintWriter;importjava.io.StringWriter;importjava.net.URL;/*** Created by 朱星翰 on 2017/9/14.*/
public class JRPrinterApplet extendsjavax.swing.JApplet {privateURL url;privateJasperPrint jasperPrint;publicJRPrinterApplet(){
}public voidinit() {
String strUrl= getParameter("REPORT_URL");if (strUrl != null) {try{
url= newURL(getCodeBase(), strUrl);
}catch(Exception e) {
StringWriter swriter= newStringWriter();
PrintWriter pwriter= newPrintWriter(swriter);
e.printStackTrace(pwriter);
JOptionPane.showMessageDialog(this, swriter.toString());
}
}else{
JOptionPane.showMessageDialog(this, "REPORT_URL:不能为空!");
}
}
@Overridepublic voidstart() {if (url != null) {if (jasperPrint == null) {try{
jasperPrint=(JasperPrint) JRLoader.loadObject(url);
}catch(Exception e) {
StringWriter swriter= newStringWriter();
PrintWriter pwriter= newPrintWriter(swriter);
e.printStackTrace(pwriter);
JOptionPane.showMessageDialog(this, swriter.toString());
}
}if (jasperPrint != null) {final JasperPrint print =jasperPrint;
Thread thread= new Thread(newRunnable()
{public voidrun()
{try{
JasperPrintManager.printReport(print,true);
}catch(Exception e) {
StringWriter swriter= newStringWriter();
PrintWriter pwriter= newPrintWriter(swriter);
e.printStackTrace(pwriter);
JOptionPane.showMessageDialog(null, swriter.toString());
}
}