zoukankan      html  css  js  c++  java
  • 【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知识

  • 相关阅读:
    QT 创建一个线程播放监控视频
    C++基础(静态数据成员和静态成员函数)
    SDK的使用步骤
    QT加载自带字体
    QT release版QAudioDeviceInfo获取不到音频设备,而debug版可以获取到
    通过vs2015给QT添加模块
    pycharm修改字体与主题
    日志学习(二)——日志处理封装
    日志学习(一)
    配置文件学习(二)--写入配置文件
  • 原文地址:https://www.cnblogs.com/ae6623/p/4416613.html
Copyright © 2011-2022 走看看