【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知识

目录
相关文章
|
4月前
|
XML 人工智能 Java
java实现PDF 电子签章
本文介绍了使用Java将Word文档转换为PDF并添加水印、签名和盖章的方法。通过Apache POI读取Word内容,结合OpenPDF生成PDF文件,并利用PdfPageEvent接口实现页面水印与签名功能。代码示例清晰展示了转换流程及关键实现细节。
275 0
|
1月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
152 1
|
7月前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
4月前
|
C#
【PDF提取内容改名】批量提取PDF指定区域内容重命名PDF文件,PDF自动提取内容命名的方案和详细步骤
本工具可批量提取PDF中的合同编号、日期、发票号等关键信息,支持PDF自定义区域提取并自动重命名文件,适用于合同管理、发票处理、文档归档和数据录入场景。基于iTextSharp库实现,提供完整代码示例与百度、腾讯网盘下载链接,助力高效处理PDF文档。
612 40
|
4月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
249 14
|
4月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
4月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
128 0
|
8月前
|
Java 应用服务中间件 API
Servlet开发流程 (里面有Idea项目添加Tomcat依赖详细教程)
本文详细介绍了Servlet的开发流程,包括在IntelliJ IDEA中添加Tomcat依赖的详细教程。通过上述步骤,开发者可以快速搭建并运行一个基本的Servlet应用,理解并掌握Servlet的开发流程对于Java Web开发至关重要。希望本文能够帮助开发者顺利进行Servlet开发,提高工作效率。
866 78
|
4月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
286 0
|
5月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
455 5