我正在尝试将我的报告集成到JSP页面中。使用jaspersoft studio创建的报告。但我在runReportToPdf行上获得空指针异常。我对这份报告和网络应用程序完全不熟悉。所以请有人帮忙解决这个问题并获得例外结果。非常感谢快速支持。感谢。
<%@ 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 trimDirectiveWhitespaces="true" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Report!</h2>
<%
Connection con = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.248:1521:incomingqc", "inqc", "megaWIN123$");
System.out.println("i AM IN CONNECTION");
}catch (Exception ex) {
System.out.println("i AM ex para");
ex.printStackTrace();
}
File reportFile = new File(application.getRealPath("Blank_A4_Landscape.jasper"));//your report_name.jasper file
Map parameters = new HashMap();
byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, con);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream outStream = response.getOutputStream();
outStream.write(bytes, 0, bytes.length);
outStream.flush();
outStream.close();
%>
</body>
</html>
&#13;
答案 0 :(得分:0)
PDF和HTML内容不能混用。当JSF页面生成HTML时,它会写入临时缓冲区。一旦JSF被告知响应完成,该临时缓冲区将被发送到浏览器。
在给定的代码中,这里大致了解了Web浏览器将收到的内容:
<html><head></head><body><h2>Report!</h2>%PDFNΘs*̶͑̾̾̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s...</body></html>
要让浏览器显示报告,可以选择以下几种方法:
<h:outputFormat>
将报告内容注入现有网页。<h:commandLink>
或<h:commandButton>
执行将PDF写入浏览器的操作,就像您已经完成的一样。然而,如问题中所示混合两种方法将不会产生所需的结果。
另见: