pdf未正确显示

时间:2015-08-10 07:19:42

标签: java pdf

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Ã>

1 个答案:

答案 0 :(得分:1)

您的问题是,一旦开始写入输出,请求内容将写入用户,并且必须事先提交标题字段。因此,之后设置标题字段无效。

但无论如何,“在网页上显示PDF”是不可能的。浏览器可以在窗口或选项卡中显示从Internet下载的PDF文件。 (可能需要一个插件。)您提供的文件是PDF文件,或者是HTML文件。您不能将这两个不同的文件合并为一个。如果要在用户查看PDF时刷新页面,请在单击链接下载文件时执行此操作,例如: G。通过Ajax请求。