public class PdfRH { public void doRequest(ControlBlock oSCB) throws Exception {
HttpServletResponse response;
response = oSCB.getHttpServletResponse();
String pdfPath = oSCB.getRequestParameter("printpdf") ;
System.out.println("*********************************************"+pdfPath);
File pdf = new File(pdfPath);
String pdfName = pdfPath.substring(pdfPath.lastIndexOf("/") + 1, pdfPath.length());
ServletOutputStream stream = null;
BufferedInputStream buf = null;
String code_windowClose = "<script>window.onunload = refreshParent;function refreshParent() {alert('yeah!!!!');window.opener.location.reload();}</script>";
try{
stream = response.getOutputStream();
stream.write(code_windowClose.getBytes());
// PrintWriter pw = response.getWriter();
response.setHeader("Content-type","application/pdf");
response.setHeader("Content-disposition","inline; filename=" + pdfName);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "No-cache");
response.setDateHeader("Expires", 0);
response.setContentType("application/pdf");
FileInputStream input = new FileInputStream(pdf);
// response.setContentLength((int) pdf.length());
buf = new BufferedInputStream(input);
int readBytes = 0;
/*pw.println("<html>");
pw.println("<head><title>Hello World</title></title>");
pw.println("<body>");
pw.println("<h1>Hello World</h1>");
pw.println("</body></html>");*/
//response.getOutputStream().write(b);
while ((readBytes = buf.read()) != -1)
stream.write(readBytes);
}
catch(Exception ioe){
throw new ServletException(ioe.getMessage());
}
finally
{
if (stream != null)
stream.close();
if (buf != null)
buf.close();
}
}
PDF未显示。上面的java代码是在调用JavaScript函数时调用的,用于在网页上显示PDF,关闭显示PDF的窗口,父jsp应该重新加载,所以我采取了一个变量
这是字符串code_windowClose,我正在编写脚本函数,将上面的变量转换为字节数组并将字节数组传递给stream.write(b)卸载功能工作正常,但问题是PDF没有显示,它显示的代码像“%PDF-1.5%μμμμ10obj&gt;&gt;&gt; endobj 2 0 obj&lt;&gt; endobj 3 0 obj&lt;&gt; / Pattern&lt;&gt; / Font&lt;&gt; / XObject&lt;&gt; / ProcSet [/ PDF / Text / Ibs / S / StructParents 0&gt;&gt; endobj 4 0 obj&lt;&gt;streamxœT]kÛ@ |è?ìã]¨Ï»÷-ÆIC71ô!ôA8Ži‰ej»“öõ_vO'[9²Ý&gt; ;aä;öfvgFߟǣ+À<¸¼-œA•gÃ>
答案 0 :(得分:1)
您的问题是,一旦开始写入输出,请求内容将写入用户,并且必须事先提交标题字段。因此,之后设置标题字段无效。
但无论如何,“在网页上显示PDF”是不可能的。浏览器可以在窗口或选项卡中显示从Internet下载的PDF文件。 (可能需要一个插件。)您提供的文件是PDF文件,或者是HTML文件。您不能将这两个不同的文件合并为一个。如果要在用户查看PDF时刷新页面,请在单击链接下载文件时执行此操作,例如: G。通过Ajax请求。