2015-10-19 37 views
0

我一直在将jasper报告导出到pdf,但它在同一个窗口中打开,这对我来说是个问题,因为如果我想转到上一页,我无法做到去上一页,所以我想在新窗口中打开PDF页面,但我没有任何想法如何在新窗口中打开它。如何在新窗口中打开导出为PDF格式的碧玉报告

sample1.jsp

<%@ page import="java.io.*"%> 
<%@ page import="java.sql.Connection"%> 
<%@ page import="java.sql.DriverManager"%> 
<%@ page import="java.util.HashMap"%> 
<%@ page import="java.util.Map"%> 
<%@ page import="net.sf.jasperreports.engine.*"%> 
<%@ page import="net.sf.jasperreports.engine.*" %> 
<%@ page import="java.text.SimpleDateFormat" %> 
<%@ page import="java.text.ParseException" %> 
<%@ page import="java.io.File" %> 
<%@ page import="java.io.FileInputStream" %> 
<%@ page import="java.io.FileNotFoundException" %> 
<%@ page import="java.io.InputStream" %> 
<%@ page import="java.sql.Connection" %> 
<%@ page import="java.sql.DriverManager" %> 
<%@ page import="java.sql.SQLException" %> 
<%@ page import="java.io.FileOutputStream" %> 
<%@ page import="java.io.ByteArrayOutputStream" %> 
<%@ page import="java.io.OutputStream" %> 
<%@ page import="java.util.HashMap" %> 
<%@ page import="java.util.Map" %> 
<%@ page import="net.sf.jasperreports.engine.util.*" %> 
<%@ page import="net.sf.jasperreports.engine.export.*" %> 
<%@page import = "net.sf.jasperreports.engine.design.JRDesignQuery"%> 
<%@page import = "net.sf.jasperreports.engine.xml.JRXmlLoader"%> 
<%@page import = "net.sf.jasperreports.engine.design.JasperDesign"%> 
<%@page import = "net.sf.jasperreports.view.JasperViewer"%> 
<%@page import = "net.sf.jasperreports.engine.JRException"%> 
<%@page import = "net.sf.jasperreports.engine.JRResultSetDataSource"%> 
<%@page import = "net.sf.jasperreports.engine.JasperCompileManager"%> 
<%@page import = "net.sf.jasperreports.engine.JasperExportManager"%> 
<%@page import = "net.sf.jasperreports.engine.JasperFillManager"%> 
<%@page import = "net.sf.jasperreports.engine.JasperPrint"%> 
<%@page import = "net.sf.jasperreports.engine.JasperReport"%> 
<%@page import = "net.sf.jasperreports.engine.data.JRCsvDataSource"%> 
<%@page import = "net.sf.jasperreports.engine.export.ooxml.JRDocxExporter"%> 
<%@page import = "net.sf.jasperreports.engine.export.JRPdfExporter"%> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<% 
Connection conn = null; 
String cate=(String)session.getAttribute("cat"); 
String stat=(String)session.getAttribute("sta"); 
String dayy=(String)session.getAttribute("da"); 
String monthh=(String)session.getAttribute("mon"); 
String yearr=(String)session.getAttribute("yea"); 
String dayy1=(String)session.getAttribute("da1"); 
String monthh1=(String)session.getAttribute("mon1"); 
String yearr1=(String)session.getAttribute("yea1"); 
System.out.println("2 is:"+cate); 
System.out.println("4 is:"+stat); 
System.out.println("5 is:"+dayy); 
System.out.println("6 is:"+monthh); 
System.out.println("7 is:"+yearr); 
System.out.println("8 is:"+dayy1); 
System.out.println("9 is:"+monthh1); 
System.out.println("10 is:"+yearr1); 
try 
{ 
    Class.forName("com.mysql.jdbc.Driver"); 
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/marketing_database","root","root"); 
    String sql="select * from lead where Status='" + stat.replaceAll("\\'","''") + "'"; 
      sql+=" AND Category='" + cate.replaceAll("\\'","''") + "'"; 
      sql+=" AND DATE(Lead_Date)>='" + yearr + "-" + monthh + "-" + dayy + "'"; 
      sql+=" AND DATE(Lead_Date)<='" + yearr1 + "-" + monthh1 + "-" + dayy1 + "'"; 
    String jrxmlFile ="D:/dev/tools/jasper files/report3.jrxml"; 
    InputStream input = new FileInputStream(new File(jrxmlFile)); 
    JasperDesign jasperDesign = JRXmlLoader.load(input); 

    System.out.println("Compiling Report Designs"); 
    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 

    System.out.println("Creating JasperPrint Object"); 
    HashMap<String,Object> map = new HashMap<String,Object>(); 
    map.put("sql",sql); 
      byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, map, conn); 

      response.setContentType("application/pdf"); 
      response.setContentLength(bytes.length); 
      ServletOutputStream outStream = response.getOutputStream(); 
      outStream.write(bytes, 0, bytes.length); 
      outStream.flush(); 
      outStream.close(); 
} 
catch(Exception e) 
{e.printStackTrace();} 

     %> 
</body> 
</html> 

view.jsp的

<script type="text/javascript"> 

    function setAction(nPage){ 

     document.forms[0].action = nPage; 
    } 
</script> 
</head> 
<body> 
<form> 
<% 
String category=request.getParameter("category"); 
session.setAttribute("cat",category); 
String status=request.getParameter("status"); 
session.setAttribute("sta",status); 
System.out.println("status is:"+status); 
String day=request.getParameter("day"); 
session.setAttribute("da",day); 
String month=request.getParameter("month"); 
session.setAttribute("mon",month); 
String year=request.getParameter("year"); 
session.setAttribute("yea",year); 
String day1=request.getParameter("day1"); 
session.setAttribute("da1",day1); 
String month1=request.getParameter("month1"); 
session.setAttribute("mon1",month1); 
String year1=request.getParameter("year1"); 
session.setAttribute("yea1",year1); 
%> 
<select onchange="setAction(this.value)"> 
<option value=''> Make a selection </option> 
<option value='sample1.jsp'> PDF</option> 
<option value='XLS_LEAD.jsp'> XLS </option> 
<option value='DOC_LEAD.jsp'> DOC </option> 
<option value='XLSX_LEAD.jsp'> XLSX </option> 
</select> 
<br/> 

<input type="submit" value="Submit"> 
</form> 
</body> 
+0

当你喜欢打开pdf window.open(“我的pdf生成页面的路径”)时使用JavaScript –

+0

@PetterFriberg我必须写“window.open (“我的pdf生成页面的路径”)“ –

+0

当您执行搜索时,您有两种选择。 1)在浏览器中显示另一个页面,然后打开您的PDF(您可以使用标签正文onLoad)2)而不是让您的搜索重定向到新页面,使它打开一个新窗口的PDF结果。 (你仍然在搜索页面上)。如果你在这个问题中包含你的搜索页面代码,并告诉我你喜欢什么,我会帮你回答 –

回答

0

考虑您的view.jsp的

我可以看到你已经把所有的变量为您只使用会话表单选择你需要去哪个页面。

你可以做这样的事情......

<script type="text/javascript"> 
function generateReport() { 
    var e = document.getElementById("idOfYourSelectYouNeedToAddedIt"); 
    var strPage = e.options[e.selectedIndex].value; 
    window.open(strPage); 
    return false; //This make you stay on this page; 
    //return true; //Set the action tag in the form to the page you like to go to! 
} 
</script> 


<form name="myForm" onsubmit="return generateReport()"> 
     <select id = "idOfYourSelectYouNeedToAddedIt"> 
     <option value=''> Make a selection </option> 
     ..... the other option values 
</form> 

注意,如果你喜欢去到另一个页面,您可以简单的附加动作标签,就可以form标记,在generateReport()函数返回true

例如

<form name="myForm" action="thisIsWhereILikeToGo.jsp" onsubmit="return generateReport()"> 

注意:您应该删除onchange="setAction(this.value)代码,它有没有用了,并考虑checki ng strPage不是空的,没有选择...

+0

再次非常感谢 –