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的打印方法,打印报表了,很简单吧:)。

猜你喜欢

转载自blog.csdn.net/sxbcsdn/article/details/83319242
今日推荐