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

简介: 把这个项目部署成你的web项目 http://pan.baidu.com/share/link?shareid=136974&uk=436295647项目下载 打开谷歌浏览器,输入http://localhost:8080/fileOutDemo/outFile 注意 1.谷歌浏览器内嵌pdf的功能,不用重新安装pdf阅读器就能看效果。

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

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

注意

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

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

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


 效果:

img_ade4ce66082fdd303710d9ba76672f3e.jpg


代码

/**

 * 两种方法输出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知识

目录
相关文章
|
9月前
|
Web App开发 搜索推荐 安全
火狐(Mozilla Firefox)浏览器安装教程,附火狐(Mozilla Firefox)安装包
火狐浏览器2025年8月最新版141.0.2发布,支持Windows、Mac、安卓系统,运行速度快,安全性高。提供离线安装包下载,支持多种网络标准,个性化定制功能丰富,安装简便,可自定义安装路径并恢复上次浏览标签,带来更流畅上网体验。
3409 6
|
Java 应用服务中间件 API
Servlet开发流程 (里面有Idea项目添加Tomcat依赖详细教程)
本文详细介绍了Servlet的开发流程,包括在IntelliJ IDEA中添加Tomcat依赖的详细教程。通过上述步骤,开发者可以快速搭建并运行一个基本的Servlet应用,理解并掌握Servlet的开发流程对于Java Web开发至关重要。希望本文能够帮助开发者顺利进行Servlet开发,提高工作效率。
1638 78
|
XML 缓存 JSON
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
997 0
|
关系型数据库 MySQL Java
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
403 20
|
Web App开发 缓存 安全
WIN11 Chrome 双击打不开闪退及Chrome浏览器不能拖拽文件crx
【11月更文挑战第6天】本文介绍了 WIN11 系统中 Chrome 浏览器双击打不开闪退及不能拖拽文件 crx 的原因和解决方法。包括浏览器版本过旧、扩展程序冲突、硬件加速问题、缓存过多、安全软件冲突、系统文件损坏、用户配置文件损坏等问题的解决方案,以及 crx 文件的屏蔽、权限问题和文件格式问题的处理方法。
5089 2
|
安全 Oracle Java
edge浏览器加载java插件
edge浏览器加载java插件
1381 1
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
578 2
|
Web App开发 API Windows
取接口访问者信息[IP,浏览器,操作系统]免费API接口教程
此API用于获取访问者的IP地址、浏览器和操作系统信息,支持70多种浏览器和操作系统。通过POST或GET请求至`https://cn.apihz.cn/api/ip/getapi.php`,需提供用户ID和KEY。返回结果包括状态码、消息、IP、浏览器和操作系统信息。示例:{"code":200,"ip":"175.154.88.178","browser":"Chrome","os":"Windows 10"}。详情见官网文档。
602 0
|
Web App开发 JSON 数据格式
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
188 0
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
502 3