Fork me on GitHub

【java】servlet输出pdf文件到浏览器 教程

把这个项目部署成你的web项目 http://pan.baidu.com/share/link?shareid=136974&uk=436295647项目下载

打开谷歌浏览器,输入http://localhost:8080/fileOutDemo/outFile

注意

1.谷歌浏览器内嵌pdf的功能,不用重新安装pdf阅读器就能看效果。

2.如果不是谷歌浏览器,请事先安装浏览器的pdf阅读器插件(比如福昕阅读器,就可以把pdf内嵌到浏览器)

Ok 没了,研究一下代码吧,很简单。但是网上目前还真心的不好找,网上的一般就是下载文件到本地,那样的话,对于用户来说是一件很不爽的事情,用户不爽,领导就要求我们自己做一个,于是就自己试着做了一个,感觉速度或者性能都挺快的。


 效果:


代码

/**

 * 两种方法输出pdf到浏览器,你可以参考一下百度,试试输出excel到浏览器直接打开

 */

packagecom.liu.servlet;

 

importjava.io.BufferedInputStream;

importjava.io.BufferedOutputStream;

importjava.io.FileNotFoundException;

importjava.io.IOException;

importjava.io.PrintWriter;

importjava.net.URL;

 

importjavax.servlet.ServletException;

importjavax.servlet.ServletOutputStream;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

public classOutFile extendsHttpServlet {

 

    public voiddoGet(HttpServletRequest  request, HttpServletResponse response) throwsServletException,  IOException {

        doPost(request, response);

    }

 

    public voiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

 

        // 向浏览器端输出

        response.setCharacterEncoding("utf-8");

        response.setContentType("application/pdf");

        String rootPath = this.getServletContext().getRealPath("/") + "port\\";

        String pdfFileDesc = rootPath + "pdf\\2012年北京地铁线路图.pdf";

        // servlet输出流

        ServletOutputStream outr = null;

        // 传送的文件的url地址

        outr = response.getOutputStream();

         

        try{

            outPdf2(pdfFileDesc, outr);

        } catch(IOException e) {

            // 处理文件找不到的情况

            try{

                response.reset();

                response.setContentType("text/html;charset=gb2312");

                response.getWriter().println("文件未找到");

            } catch(IOException e1) {

                e1.printStackTrace();

            }

            e.printStackTrace();

        } finally{

            if(outr != null) {

                outr.close();

            }

            System.out.println("pdf顺利输出,请给我的帖子留言");

        }

    }

    /**

     * 输出pdf到浏览器,采用BufferedInputStream和BufferedOutputStream,轻松实战IO流,熟悉servlet输出文件到浏览器而不是下载的Demo

     * @param pdfFileDesc

     * @param outr

     * @throws IOException

     */

    public voidoutPdf(String pdfFileDesc,  ServletOutputStream outr) throwsIOException {

        // 输入流

        BufferedInputStream bis = null;

        // 输出流

        BufferedOutputStream bos = null;

        URL url = null;

 

        try{

            url = newURL("file:\\"+ pdfFileDesc);

            // 从文件获得输入流

            bis = newBufferedInputStream(url.openStream());

            // 输出到servlet

            bos = newBufferedOutputStream(outr);

            // 利用缓冲数组

            byte[] buff = new byte[2048];

            intbytesRead = 0;

            // 一个简单的读写循环

            while(-1 != (bytesRead =  bis.read(buff, 0, buff.length))) {

                bos.write(buff, 0,  bytesRead);

                outr.flush();

            }

        } finally{

            if(bis != null) {

                try{

                    bis.close();

                } catch(IOException e) {

                    // TODOAuto-generated catch block

                    e.printStackTrace();

                }

            }

            if(bos != null) {

                try{

                    bos.close();

                } catch(IOException e) {

                    // TODOAuto-generated catch block

                    e.printStackTrace();

                }

            }

        }

    }

    /**

     * 第二种方法 输出pdf到浏览器,采用BufferedInputStream和BufferedOutputStream,轻松实战IO流,熟悉servlet输出文件到浏览器而不是下载的Demo

     * @param pdfFileDesc

     * @param outr

     * @throws IOException

     */

    public voidoutPdf2(String pdfFileDesc,  ServletOutputStream outr) throwsIOException {

        // 输入流

        BufferedInputStream bis = null;

        // 输出流

        BufferedOutputStream bos = null;

        URL url = null;

 

        try{

            url = newURL("file:\\"+ pdfFileDesc);

            // 从文件获得输入流

            bis = newBufferedInputStream(url.openStream());

            // 输出到servlet

            bos = newBufferedOutputStream(outr);

            // 利用缓冲数组

            byte[] buffer = new byte[2048];

            intlen = 0;

            // 另一个简单的读写循环

            while((len = bis.read(buffer)) !=  -1) {

                outr.write(buffer, 0, len); // write to client

                outr.flush();

            }

 

        } finally{

            if(bis != null) {

                try{

                    bis.close();

                } catch(IOException e) {

                    e.printStackTrace();

                }

            }

            if(bos != null) {

                try{

                    bos.close();

                } catch(IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

 

}

 

QQ 394263788 欢迎探讨java知识

posted @ 2012-12-10 17:10  _落雨  阅读(911)  评论(0编辑  收藏  举报