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

时间: 2024-10-11 09:23:02

【java】servlet输出pdf文件到浏览器 教程的相关文章

Java 动态生成 PDF 文件

每片文章前来首小诗:   今日夕阳伴薄雾,印着雪墙笑开颜.我心仿佛出窗前,浮在半腰望西天.  --泥沙砖瓦浆木匠 需求: 项目里面有需要java动态生成 PDF 文件,提供下载.今天我找了下有关了,系统得学习了解下. 开源的 iText 库使得 PDF 的创建变得轻松易行.下面介绍下   方案: -----------------------  iText V5.X.X 版 ----------------------- 第一步学习: 了解下: com.itextpdf.text.Documen

WPS 2012一键轻松输出PDF文件

  金山办公软件近期发布的WPS Office 2012办公软件秉承了WPS一贯轻巧灵快.安装便捷的特点,深度兼容微软Office,其采用的Windows 7风格的新界面,赋予用户焕然一新的视觉享受.另外,WPS Office 2012还提供10大文档创作工具,具备100项深度功能改进,其中的一键输出PDF文件功能,深受广大用户欢迎.下面就带大家一起看看输出PDF文件的具体操作. 一.输出PDF PDF全称Portable Document Format,译为可移植文档格式,其最大优点就是与跨系

WPS 2012中一键轻松输出PDF文件

金山办公软件近期发布的WPS Office 2012办公软件秉承了WPS一贯轻巧灵快.安装便捷的特点,深度兼容微软Office,其采用的Windows 7风格的新界面,赋予用户焕然一新的视觉享受.另外,WPS Office 2012还提供10大文档创作工具,具备100项深度功能改进,其中的一键输出PDF文件功能,深受广大用户欢迎.下面就带大家一起看看输出PDF文件的具体操作. 一.输出PDF PDF全称Portable Document Format,译为可移植文档格式,其最大优点就是与跨系统平

CorelDraw9不能正常输出PDF文件的原因及解决方法

问:Coreldraw 9能输出PDF文件吗? 答:方法一.利用CD9本身的输出前准备或PDF发行 利用CD9本身的输出前准备或PDF发行这种方法虽然简单,但是所产生的PDF文件兼容性不是很好. 利用文件菜单中的输出前准备可以产生一个标准的PDF文件. 利用PDF发行,注意在一般选项中不要选择PDF FOR THE WEB,选其它的任意项. 在进阶中注意要选中保持文件套印.这样输出的PDF我本人测试可以通过. 第二种方法 不直接用coreldraw生成pdf 稍微有点复杂些,但生成的文件基本上可

解密-java实现下载pdf文件太慢

问题描述 java实现下载pdf文件太慢 java实现在下载pdf文件的时候会对其进行解密(文件是加密的,下载需要解密),这个解密的过程占用了大量的下载时间,导致文件一直下载太慢,根本就下载不下来,这个问题怎么解决? 解决方案 你的加密解密算法是什么,文件大小多大.按理说如果你用的标准的加密解密算法,不会有这么大的性能损耗. 解决方案二: ????????? 实现点击超链接下载pdf文件,该pdf文件的内容又跟jsp页面的数据有关.实质就是一个打印吧.?????? 若对此打印有一个pdf的tem

捷速PDF编辑器修改PDF文件文字的教程

  PDF文件又叫做不能被修改的文件.不过,有一些网友想将自己手上的pdf文件进行文字修改,这就需要用到一款专业的pdf编辑器.而有一些网友推荐的pdf编辑器有的只能修改数字,却不能修改文字.那么,今天小编就为大家推荐一款可以修改PDF文件文字的编辑器:捷速PDF编辑器,下面,我们就以捷速PDF编辑器为例,来看看怎么修改pdf中的文字. 捷速PDF编辑器 准备工作: 大家需要上网下载一款捷速PDF编辑器,下载完成之后安装即可. 捷速PDF编辑器修改pdf文字步骤: 1.打开安装好的捷速PDF编辑

C#如何给PDF文件添加水印_C#教程

水印种类及功能介绍      PDF水印分为两种:文本水印和图片水印.文本水印一般被用在商业领域,提醒读者该文档是受版权保护的,其他人不能抄袭或者免费使用.除了这个特征,水印还可以用来标记这个文档 的一些基本状态信息,例如是草稿状态还是最终版本?图片水印是美化PDF文件的一个很好的选择,它可以用多彩的.独特的图片来作为PDF文件的背景.那么,怎样用编程的方式给PDF文件 添加水印呢?有很多种实现方法,其中一种最快最容易的办法也许是用第三方软件,例如Spire.PDF.本文会阐述怎样用免费的第三方

JAVA SERVLET上传文件的样码

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import javax.servlet.ServletContext; import j

求助:如何使用java语言读取从知网下载的PDF文件或CAJ文件并且能够保留原文件中段落标识?

问题描述 如题,请问有没有什么开源的代码或者是自己写好了的程序可以使用java语言读取PDF文件或CAJ文件,并且能够保留原文件的段落标识(即能够区分段落)?小女子万分感谢啦! 解决方案