对于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.这是我把官网例子改了以后的代码

  

import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.util.JRLoader; import javax.swing.*;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL; /**
* Created by 朱星翰 on 2017/9/14.
*/
public class JRPrinterApplet extends javax.swing.JApplet {
private URL url;
private JasperPrint jasperPrint; 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, "REPORT_URL:不能为空!");
}
}
@Override
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, "报表是空的!");
}
}
else {
JOptionPane.showMessageDialog(this, "REPORT_URL:不能为空!");
}
}
}
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.util.JRLoader; import javax.swing.*;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL; /**
* Created by 朱星翰 on 2017/9/14.
*/
public class JRViewApplet extends javax.swing.JApplet { private URL url;
private JasperPrint jasperPrint; public JRViewApplet(){ }
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, "REPORT_URL:不能为空!");
}
} @Override
public void start() {
// Add your handling code here:
if (url != null) {
try {
if (jasperPrint == null) {
jasperPrint = (JasperPrint) JRLoader.loadObject(url);
}
if (jasperPrint != null) {
ViewerFrame viewerFrame = new ViewerFrame(this.getAppletContext(), jasperPrint);
viewerFrame.show();
}else {
JOptionPane.showMessageDialog(this, "报表是空的!");
}
}catch (Exception e) {
StringWriter swriter = new StringWriter();
PrintWriter pwriter = new PrintWriter(swriter);
e.printStackTrace(pwriter);
JOptionPane.showMessageDialog(this, swriter.toString());
}
} else {
JOptionPane.showMessageDialog(this, "REPORT_URL:不能为空!");
}
}
}
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2011 Jaspersoft Corporation. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
*/
import javax.swing.JButton;
import javax.swing.JOptionPane; import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JRViewer; /**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version 4.6.0
*/
public class JRViewerPlus extends JRViewer { /*protected JButton btnPlus = new javax.swing.JButton();*/ public JRViewerPlus(JasperPrint jrPrint) throws JRException {
super(jrPrint); tlbToolBar.remove(btnSave);
tlbToolBar.remove(btnReload); /*btnPlus = new javax.swing.JButton();
btnPlus.setToolTipText("Plus...");
btnPlus.setText("Plus...");
btnPlus.setPreferredSize(new java.awt.Dimension(80, 23));
btnPlus.setMaximumSize(new java.awt.Dimension(80, 23));
btnPlus.setMinimumSize(new java.awt.Dimension(80, 23));
btnPlus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnPlusActionPerformed(evt);
}
});
tlbToolBar.add(btnPlus, 0);*/
} protected void setZooms() {
this.zooms = new int[]{33, 66, 100, 133, 166, 200, 233};
this.defaultZoomIndex = 2;
} /*protected void btnPlusActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(this, "I just wanted to let you know that you can extend the JRViewer to customize it.\n The button you have pushed was added this way.");
}*/ }
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2011 Jaspersoft Corporation. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
*/
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JRViewer; /**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version 4.6.0
*/
public class JRViewerSimple extends JRViewer { /**
*
*/
public JRViewerSimple(JasperPrint jrPrint) throws JRException {
super(jrPrint);
tlbToolBar.remove(btnSave);
tlbToolBar.remove(btnReload);
} }
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2011 Jaspersoft Corporation. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
*/
import java.applet.AppletContext;
import java.awt.BorderLayout;
import java.net.MalformedURLException;
import java.net.URL; import javax.swing.JOptionPane; import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRPrintHyperlink;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JRHyperlinkListener; /**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version 4.6.0
*/
public class ViewerFrame extends javax.swing.JFrame implements JRHyperlinkListener { private AppletContext appletContext; public ViewerFrame(AppletContext appletContext, JasperPrint jasperPrint) throws JRException {
initComponents();
this.appletContext = appletContext;
JRViewerPlus viewer = new JRViewerPlus(jasperPrint);
viewer.addHyperlinkListener(this);
this.pnlMain.add(viewer, BorderLayout.CENTER);
} public void gotoHyperlink(JRPrintHyperlink hyperlink) {
switch(hyperlink.getHyperlinkTypeValue()) {
case REFERENCE : {
try {
this.appletContext.showDocument(new URL(hyperlink.getHyperlinkReference()), "_blank");
} catch (MalformedURLException e) {
JOptionPane.showMessageDialog(this, e.getMessage());
}
break;
}
case LOCAL_ANCHOR :
case LOCAL_PAGE : {
break;
}
case REMOTE_ANCHOR :
case REMOTE_PAGE : {
JOptionPane.showMessageDialog(this, "Implement your own JRHyperlinkListener to manage this type of event.");
break;
}
case NONE :
default : {
break;
}
}
} /** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
pnlMain = new javax.swing.JPanel(); setTitle("预览");
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
pnlMain.setLayout(new java.awt.BorderLayout()); getContentPane().add(pnlMain, java.awt.BorderLayout.CENTER); pack();
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
int width=1000;
int height=800;
setSize(new java.awt.Dimension(width, height));
setLocation((screenSize.width-width)/2,(screenSize.height-height)/2);
}//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel pnlMain;
// End of variables declaration//GEN-END:variables }

      (1).把这些代码放入src下,生成class代码

      (2).将class生成jar,我命名print.jar

      (3).jar -cvf print.jar *.class  (生成jar包),放入applets

     5.签名    

      1.创建一个证书
      keytool -genkey -validity 1800 -keystore applet.store -alias applet  
      2.导出证书文件
      keytool -export -keystore applet.store -alias applet -file applet.cer
      3.对jar包进行签名

      jarsigner -keystore applet.store jasperreports-applet-4.6.0.jar applet
      

      jarsigner -keystore applet.store print.jar applet (注意:必须签名这个jar包,要不然打印报错)

     6.页面,自己处理了很多js,

      

       <a title="打印" onclick="is_ie('JRPrinterApplet')"><img src="${ctx}/static/Images/print.jpg" alt=""></a>
&nbsp;&nbsp;
<a title="预览" onclick="is_ie('JRViewApplet')" ><img src="${ctx}/static/Images/look.png" alt=""></a></a>
&nbsp;&nbsp;
<a title="更方便的使用打印功能" style="font-size: 11px" href="${ctx}/applets/applet.cer">是否安装安全证书?</a>
function is_ie(str){
if ((navigator.userAgent.indexOf('MSIE') >= 0 && navigator.userAgent.indexOf('Opera') < 0)||(navigator.userAgent.indexOf("Trident") > -1 && navigator.userAgent.indexOf("rv") > -1)){
var archive='print.jar,jasperreports-applet-4.6.0.jar,commons-logging-1.1.1.jar,commons-collections-2.1.1.jar,commons-digester-2.1.jar';
var REPORT_URL='${ctx}/jasper/all_printJasper?';
var codebase='${ctx}/applets'
var file='${ctx}/applets/jre-6u45-windows-i586.exe';
var scriptable=false
var type='application/x-java-applet;version=1.6.0'; $.each(args,function(key,value){
REPORT_URL+=key+"="+value+"&";
});
REPORT_URL=change(REPORT_URL);
REPORT_URL=encodeURI(REPORT_URL); var write='正在处理'+(str=='JRPrinterApplet'?'打印':'预览')+'...' +
'<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width = "0" height = "0" codebase="'+file+'" mayscript>' +
'<param name = "code" value = "'+str+'.class" >' +
'<param name = "codebase" value = "'+codebase+'" >' +
'<param name = "archive" value = "'+archive+'" >' +
'<param name="type" value="'+type+'">' +
'<param name="scriptable" value="'+scriptable+'">' +
'<param name = "REPORT_URL" value ="'+REPORT_URL+'">' +
'<comment>' +
'<embed type="'+type+'" code="'+str+'.class" java_codebase="'+codebase+'" archive="'+archive+'" scriptable='+scriptable+' pluginspage="'+file+'" >' +
'<noembed></noembed>' +
'</embed>' +
'</comment>' +
'</object>'
document.write(write);
}else {
alert('预览打印仅支持ie浏览器')
}
}

最后,终于完成了,总之,觉的jasperreport-applets-4.6官网给的好多错误地方,只有慢慢去找问题

关于jasperreport对应java打印机的解决方案的更多相关文章

  1. Java Scoket之java.io.EOFException解决方案

    Java Scoket之java.io.EOFException解决方案   Socket接收数据的时候,常常会抛出java.io.EOFException异常,也没有明确的原因和提示,在网上搜搜,很 ...

  2. Java 图片处理解决方案:ImageMagick 快速入门

    一.ImageMagick介绍 ImageMagick是一个免费的创建.编辑.合成图片的软件,可以实现图片切割.颜色替换.图片缩略图.图片水印等各种效果.ImageMagick是免费开源软件,支持大多 ...

  3. Java 图片处理解决方案:ImageMagick 快速入门教程

    文章首发于[博客园-陈树义],点击跳转到原文Java 图片处理解决方案:ImageMagick 快速入门教程. ImageMagick介绍 ImageMagick是一个免费的创建.编辑.合成图片的软件 ...

  4. Java中文乱码解决方案

    Java中文乱码解决方案   1.中文乱码解决方案,确保每个文件的默认编码是UTF-8         加入 URIEncoding="UTF-8" 代码中的设置 1>在se ...

  5. Atitit.java jar hell解决方案-----Djava.ext.dirs in ide envi..

    Atitit.java jar hell解决方案-----Djava.ext.dirs in ide envi.. Atitit.java class flect solu jar hell use  ...

  6. java 乱码问题解决方案

    java  乱码问题解决方案 一.tomcat: <Connector         port="8080"         maxThreads="150&qu ...

  7. java compiler level does not match the version of the installed java project facet 解决方案

    项目出现 java compiler level does not match the version of the installed java project facet 错误,一般是项目移植出现 ...

  8. idea生成JAVADOC 报java.lang.IllegalArgumentException解决方案[终极]

    idea生成javadoc文档,总是会报  java.lang.IllegalArgumentException     at sun.net.www.ParseUtil.decode(ParseUt ...

  9. 【转】Unable to execute dex: Java heap space 解决方案(如何为eclipse.int 添加内存)

    原文网址:http://blog.csdn.net/zengyangtech/article/details/7003379 欢迎转载,转载请注明 http://blog.csdn.net/zengy ...

随机推荐

  1. Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、

    LineNumberReader 跟综行号的缓冲字符输入流,些类定义了setLineNumber(int)和getLineNumber(int),它们可分别用于设置和获取当前行号 import jav ...

  2. android横竖屏切换activity生命周期变化

    1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate--> onStart--> onResume--> 3.按crtl+ ...

  3. 安卓中不同APP之间的消息通信

    昨天在腾讯实习生招聘初试面试时面试官问道我关于两个APP之间相互通信的方式,当时自己回道到了contentProvider与BroadcastReceiver.但他接着问还有没有其它的方式,我跟他说可 ...

  4. MyEclipse10+Jdk1.7+OSGI+MySql实现数据库的增删改查

    开发环境: Windows2008R2 64位+MyEclipse10+jdk1.7.0_67+MySql5.5 软件安装:myeclipse-10.0-offline-installer-windo ...

  5. Redis主从和HA配置

    1同步原理 摘自:http://www.cnblogs.com/stephen-liu74/archive/2012/03/30/2364717.html "下面的列表清楚的解释了Redis ...

  6. Dynamics CRM Microsoft SQL Server 指定的数据库具有更高的版本

    在做NLB部署时遇到这么个问题,CRMAPP1安装的CRM版本是6.1已经打了SP1补丁,而在CRMAPP2上的CRM安装包是6.0版本,在选择连接现有部署后,最后一步检测就出了问题,如下图所示. 看 ...

  7. Zeroc Ice Slice语言使用 HelloWorld

    Slice介绍         为了开发多语言支持的RPC服务,需要一种中立的新语言来定义这个服务接口,以便各个编程语言能够准确无误地理解和翻译接口,为此Ice设计了Slice语言.Ice开发的第一步 ...

  8. >/dev/null 2>&1

    >/dev/null 2>&1 大部分在 crontab 计划任务中都会年到未尾带 >/dev/null 2>&1,是什么意思呢? > 是重定向 /dev ...

  9. 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis

    http://blog.csdn.net/pipisorry/article/details/49256457 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  10. Java:将字符串中的数字转换成整型

    在C语言中,将字符串中的数字转换为整型的方法是是利用atoi这个函数.在Java中,我们可以利用parseInt方法来实现,具体代码如下: public class HelloWorld { publ ...