本文以生成pdf为例:
1,引入jar
2,JRPDFServlet.java
package net.xnzz.servlet;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.util.Enumeration;
import java.util.HashMap;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;
import net.xnzz.util.DBUtils;
/**
* jasperreport 生成pdf文件
* @author WANGJIE
*
*/
public class JRPDFServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
Connection connection = DBUtils.getDBInstance().getInitDBConnection();
try
{
//据据jasper文件生成JasperPrint对象
ServletContext context = this.getServletConfig().getServletContext();
String fileName = request.getParameter("fileName");//ireport编译文件:*.jasper(由模板文件*.jrxml文件编译生成)
File reportFile = new File(context.getRealPath("/WEB-INF/jaspers/"+fileName));
HashMap<String, Object> parameters = new HashMap<String, Object>();//给报表模板文件传参
//得到枚举类型的参数名称,参数名称若有重复的只能得到第一个--获取页面传来的参数,和模板中文件的sql参数名称一一对应
Enumeration temp = request.getParameterNames();
while (temp.hasMoreElements())
{
String paramName = (String) temp.nextElement();
String paramValue = request.getParameter(paramName);
parameters.put(paramName, paramValue);
}
byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters,connection);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream out = response.getOutputStream();
out.write(bytes, 0, bytes.length);
out.flush();
out.close();
}
catch (JRException e)
{
e.printStackTrace();
}
}
}
3,print**.jsp
<iframe id="reportFrame" width="100%" height="100%" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="no" allowtransparency="yes"></iframe>
<input type="button" value="下载" οnclick="getSearch()" class="butn" />
<script type="text/javascript">
function getSearch()
{
var con = $("#con").val();
var kdCode = $("#kdCode").val();
if(kdCode=="")
{
alert("请选择考点");
return;
}
var path = "${pageContext.request.contextPath}/servlet/JRPDFServlet?kdcode="+kdCode+"&fileName=printzq.jasper";
$("#reportFrame").attr("src",path);
}
</script>
4,web.xml
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>JRPDFServlet</servlet-name>
<servlet-class>net.xnzz.servlet.JRPDFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JRPDFServlet</servlet-name>
<url-pattern>/servlet/JRPDFServlet</url-pattern>
</servlet-mapping>
5,printzq.jrxml
模板文件的sql面板及其参数截图: