java通过读取pdf文件下载

新人一枚,有错的多包涵,也可以指出错误;多为自己留着回忆,方便直接查询。
最近要在管理系统上,添加一个帮助文档;就是点击”?”或者点击帮助,可以执行在新窗口打开pdf文件,同时执行打包下载;
也是在网上各种查找,也参考了很多方法;诸多的就是借用jar包;
这也是一种很有效的方法,下面就贴出自己执行打包下载的方式
首先观看前端代码,很简单:
如果不是要考虑压缩包形式下载,其实可以直接考虑js就可以完全实现


通过点击a标签onclick执行操作

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<div><a class="easyui-linkbutton help" onclick="helpWindow();downPDF();" href="javascript:;" data-options="iconCls:'icon-help-white',plain:true,iconAlign:'top',"></a>
</div>

onclick要同时执行2个操作时,可以通过”;”达到同时实现的功能
通过js就可以实现读取,同时执行下载功能;不需要借助第三方jar,也不用后端代码就可以实现

<script>
//帮助手册
function helpWindow(){var url = jsPath + "upload/帮助手册V2.0.pdf";window.open(url,'width:100%,height:100%,top=0, left=0, toolbar=no, menubar=no, scrollbars=no,directories=no, resizable=no,location=no, status=no,scrollbars=no,resizable=no')
}
function downPDF(){window.location=jsPath + "upload/帮助手册V2.0.rar";
}

这样简单,但是会对项目内存加大,同样的文件,要有pdf文件,也要有压缩文件;
看到一些方法后,适合自己的,进行了简单的优化下符合项目结构,同样通过点击,前端通过url进行后端处理,压缩打包下载;主要通过流实现,也不需要考虑预先给出一个压缩包所在的位置,动态选择下载存放位置,也包含了对诸多浏览器功能正常。
js依然相同,只是把function 做了简单修改,来请求url

function downPDF(){//window.location=jsPath + "upload/帮助手册V2.0.rar";window.location.href="<%=basePath%>HelpDocumentController/downPDF.do";
}

Controller 代码:

@RequestMapping("downPDF")
public void downPDF(HttpServletRequest request,HttpServletResponse response) throws FileNotFoundException, IOException{//响应头的设置response.reset();response.setCharacterEncoding("utf-8");response.setContentType("multipart/form-data");String str = null ;PageData pd = new PageData(request);//获取服务器下要下载文件打包的路径String realPath = request.getRealPath("")+"\\upload\\";String urlPath = request.getRequestURL()+"/upload/";//获取路径 urlPath = urlPath.replaceAll("/HelpDocumentController/readPdfFile.do", "");String fileSerialno = MD5.MD5Encode(java.util.UUID.randomUUID().toString());File file = new File(realPath);File filelist[] = file.listFiles();for(File f : filelist){String filename = f.getName();if(filename.endsWith("pdf")){//logger.info("Existence of txt file : " + f.getAbsolutePath());String pdfPathname = f.getAbsolutePath();//pdfPathname = pdfPathname.replaceAll("D:\\soft\\apache-tomcat-7.0.53\\webapps\\pos\\upload", "");str = pdfPathname.substring(pdfPathname.lastIndexOf("\\")+1,pdfPathname.length());}}//String pdfpath = urlPath + str;String billname = str.substring(0,str.lastIndexOf("."));//设置压缩包的名字//解决不同浏览器压缩包名字含有中文时乱码的问题String downloadName = billname+".zip";//返回客户端浏览器的版本号、类型String agent = request.getHeader("USER-AGENT");  try {//针对IE或者以IE为内核的浏览器:  if (agent.contains("MSIE")||agent.contains("Trident")) {downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");} else {//非IE浏览器的处理:downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");}} catch (Exception e) {e.printStackTrace();}response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");//设置压缩流:直接写入response,实现边压缩边下载ZipOutputStream zipos = null;try {zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法 } catch (Exception e) {e.printStackTrace();}//循环将文件写入压缩流DataOutputStream os = null;String modipath = request.getSession().getServletContext().getRealPath("/upload/"+str);File files = new File(modipath);if(files.exists()){try {//添加ZipEntry,并ZipEntry中写入文件流//这里,加上i是防止要下载的文件有重名的导致下载失败zipos.putNextEntry(new ZipEntry(str));os = new DataOutputStream(zipos);InputStream is = new FileInputStream(files);byte[] b = new byte[100];int length = 0;while((length = is.read(b))!= -1){os.write(b, 0, length);}is.close();zipos.closeEntry();} catch (IOException e) {e.printStackTrace();} }//关闭流try {os.flush();os.close();zipos.close();} catch (IOException e) {e.printStackTrace();}    }

流的使用,之前学的不好,这次操作,更让自己学到了很多有用的知识;java压缩打包下载,是借鉴了
https://blog.csdn.net/wy123123000/article/details/73800866
做了稍微修改,使得更符合自己!
尊重知识原创,这就是实现压缩打包下载的整个流程!
直接读取压缩包文件,还在优化,后期会更新

Java对pdf文件进行压缩打包并执行下载相关推荐

  1. 如何用 Java 对 PDF 文件进行电子签章

    转自:如何用 Java 对 PDF 文件进行电子签章 - Ferocious - 博客园 一.概述 二.技术选型 三.生成一个图片签章 四.如何按模板生成PDF文件 五.如何生成PKSC12证书 六. ...

  2. Linux之文件的压缩打包

    1.文件打包与压缩 1.什么是文件压缩? 将多个文件或目录合并成为一个特殊的文件. 2.为什么要对文件进行压缩? 当我们在传输大量的文件时,通常都会选择将该文件进行压缩,然后在进行传输.首先:压缩后的 ...

  3. Java合并pdf文件

    Java合并pdf文件 今天帮老师整理资料需要合并pdf文件,下了许多软件发现都需要VIP才行,所以写了个程序来帮助合并,直接在主程序中修改文件路径即可,如下图: 主要代码如下: package co ...

  4. Java实现pdf文件转图片

    Java实现pdf文件转图片 文章顺序是按照测试类- -Service- -Service实现类- -工具类- - POM依赖. test测试类里 pdfPath:存放pdf源文件的地方 imgflo ...

  5. java pdf 转换 word_如何使用Java将pdf文件转换为word文件

    如何使用Java将pdf文件转换为word文件? 而且,它看起来像它一样容易吗? 解决方法: public class PDFTextReader { static String pdftoText( ...

  6. 使用java实现pdf文件转换为jpg或者png(可以批量操作、分类存放)

    使用java实现pdf文件转换为jpg或者png(可以批量操作) 使用java代码实现将pdf转换为图片格式.支持归类,支持pdf多页分页面转换存放. 需求背景:有几百个文件夹,每个文件夹里有两个pd ...

  7. php配置上传pdf文件大小,文件上传有大小限制?PDF文件怎么压缩到指定大小?

    PDF文件怎么压缩到指定大小?最近有不少朋友在问关于PDF压缩方面的问题,他们在上传自己的PDF文件到一些平台,发现不同的平台会有不同文件大小的限制,那么这PDF文件就需要压缩来调整大小,我们该怎么将 ...

  8. PDF文件在线压缩方法

    当我们的PDF文件过大时,我们需要将PDF文件进行在线压缩,那么我们进行在线压缩的方法有哪些?下面就让小编给大家简单介绍一下. 步骤一:需要将PDF文件进行在线压缩的方法是进入到迅捷在线压缩,在线PD ...

  9. PDF文件如何压缩大小

    目前随着PDF文档的广泛使用,我们去网上下载资料时,多数都是PDF格式,虽然PDF格式比较稳定,但是PDF文件过大,在上传内存容量限制情况下会导致文件下载或上传失败.那么,PDF文件如何压缩大小呢?今 ...

  10. 怎么给PDF文件进行压缩

    PDF文件需要压缩怎么办?电脑上有很多的PDF文件,导致电脑很卡,所以我们就要将PDF文件压缩一下,下面小编就来教会大家PDF压缩的具体操作方法以及操作的步骤. 1:找到迅捷压缩软件,将压缩软件下载到 ...

最新文章

  1. [HAOI2007] 理想的正方形
  2. 成功解决Exception unhandled ImportError DLL load failed: 找不到指定的程序。 lib\imp.py, Line: 343
  3. Hive 2.3.2 Installation Guide
  4. Java学习:多线程(2)
  5. Regex 正则零宽断言
  6. Linux的实际操作:Linux的分区
  7. mysql课程表学时_Mysql 巩固提升 (学生表_课程表_成绩表_教师表)
  8. NOIP前夕:noi.openjudge,滑雪
  9. iOS实现简书的账号识别方式(正则表达式)
  10. js制作随机抽奖,(指定数字范围内随机出现一个数字)
  11. 获取上个月第一天和最后一天
  12. 华人科学家量子计算机,华人科学家张首晟辞世 有望获得诺贝尔奖却成遗憾
  13. 徐静蕾2008十大青春语录
  14. 【蓝桥杯选拔赛真题34】Scratch数苹果 少儿编程scratch蓝桥杯选拔赛真题讲解
  15. Esac代表什么意义?
  16. 《5K入门级项目实战:好来屋在线影院》之第 9 战 —— 电影信息管理
  17. 【万字长文】2022年最全的搭建Web自动化测试框架教程
  18. 高清优质PPT模板20篇下载(商务型系列)
  19. 评法国和瑞士之比赛郁闷篇
  20. Unable to start web server; nested exception is org.springframework.context.ApplicationContextExcept

热门文章

  1. 第61篇:合并多个工作薄的所有工作表
  2. 计算机网络设计大赛总结,大学生海报设计大赛总结
  3. 支付网关 | 京东618、双11用户支付的核心承载系统(上篇)
  4. 7-20 约分最简分式c语言,7-24 约分最简分式
  5. 彻底删除微软拼音输入法2003
  6. 定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。
  7. 会使您势不可挡的程序员的行为
  8. 层次分析法(附代码)
  9. 51单片机--时钟芯片ds1302
  10. 进击的拼多多,淘宝如何应对