jasperreport的打印与导出

报表当然要提供打印功能,还有导出为EXCEL或者PDF文件什么的。但我才接触jasperreport,在做的过程中也走了不少的弯路。现在看来,导出报表文件很简单,用jasperreport提供的servlet就可以了。如:我的工程中配置了

<servlet>
<servlet-name>PdfServlet</servlet-name>
<servlet-class>net.sf.jasperreports.j2ee.servlets.PdfServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PdfServlet</servlet-name>
<url-pattern>/jasperreport/pdf</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>XlsServlet</servlet-name>
<servlet-class>net.sf.jasperreports.j2ee.servlets.XlsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XlsServlet</servlet-name>
<url-pattern>/jasperreport/xls</url-pattern>
</servlet-mapping>

那么我就可以通过这个URL,将报表导出为PDF或者EXCEL文件了。
打印就相对复杂一点了,因为需要调用客户端的打印机,所以要使用APPLET。这个在jasperreport的DEMO中也有例子,我把他的代码稍微修改了一下:

package com.chinacreator.epp.reportmanage.JasperReport;

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;


/**
* jasperreport打印的客户端
* @author sxb
*
*/
public class PrinterApplet extends javax.swing.JApplet
{
/**
*
*/
private URL url = null;
private JasperPrint jasperPrint = null;


/** Creates new form AppletViewer */
public PrinterApplet()
{
initComponents();
}


/**
*
*/
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");
}
}


/** 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();
btnPrint = new javax.swing.JButton();
btnView = new javax.swing.JButton();

btnPrint.setText("打印");
btnPrint.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnPrintActionPerformed(evt);
}
});

pnlMain.add(btnPrint);

btnView.setText("View the report");
btnView.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnViewActionPerformed(evt);
}
});

pnlMain.add(btnView);

pnlMain.setSize(btnPrint.getWidth(), btnPrint.getHeight());
getContentPane().add(pnlMain, java.awt.BorderLayout.WEST);

}//GEN-END:initComponents

protected void btnViewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnViewActionPerformed
viewReport();
}//GEN-LAST:event_btnViewActionPerformed

protected void btnPrintActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPrintActionPerformed
printReport();
}//GEN-LAST:event_btnPrintActionPerformed


// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel pnlMain;
private javax.swing.JButton btnView;
private javax.swing.JButton btnPrint;
// End of variables declaration//GEN-END:variables

public void printReport()
{
//Add your handling code here:
if (url != null)
{
if (jasperPrint == null)
{
try
{
System.out.println("url is:"+url);
jasperPrint = (JasperPrint)JRLoader.loadObject(url);
System.out.println("jasperPrint is not null");
}
catch (Exception e)
{
StringWriter swriter = new StringWriter();
PrintWriter pwriter = new PrintWriter(swriter);
e.printStackTrace(pwriter);
e.printStackTrace();
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");
}
}

public void viewReport()
{
//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, "Empty report.");
}
}
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");
}
}
}

这样就可以了,然后你就可以在JSP页面上调用APPLET的打印方法,打印报表了,很简单吧:)。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值