Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享
2017-07-29 00:33
489 查看
Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享
在此,先分享下写此文前的经历与感受,我所有的感觉浓缩到一个字,那就是:"坑",如果是两个字那就是"巨坑"=>因为这个需求一开始并不是这样子的,且听我漫漫道来:
一开始客户与我们商量的是将office和PDF上传,将此类文件解析成html格式,在APP端调用内置server直接以html"播放"
经历一个月~,两个月~,三个月~~~
到需求开发阶段,发现这是个坑。。。:按照需规的意思这个整体是当做一个功能来做的,技术难度也就算了,而且按照估算的工时也很难做成需规所需要的样子(缺陷太多!)
然后一周~,一周~,又一周~~~
各种方案下来将需求做成能用的样子,然后需求确认时客户说:“我们没有要求你们能解析这些文档,我们只要求你们当做一个源文件上传,在APP端点击直接能选择调用第三方应用打开就行了,而且一开始我们的需求就是这样的。”
/**听完,顿时泪流满面(ಥ _ ಥ),如果业务一开始就确认这样做,何至于浪费如此多的时间,花费如此多的精力绕老大一圈。。。*/
需求绕了一圈又绕回来了,作为经历过的人,现在总结下这需求里面无尽的坑:
A>开源社区有很多Demo,这些Demo有很多缺陷,比如office里面的艺术字、图片、公式、颜色样式、视频和音频不能解析
B>能解析的对象,解析出来的效果不是很好,比如word和ppt自身的排版乱了,excel单元格里面的自定义格式全变成数字了~等等
C>开源社区的资料并不是很全,导致的结果是不同的文档类型需要用不同的解析方式去解析,比如word用docx4j解析、excel用poi解析带来的代码量巨大
D>由于代码自身的解析效果不是很好,更改后的方案需要在上传之前将源文件处理成其他的形式,如pdf需要切成图片,ppt需要转换成视频或是图片,这样一来需求实现的方式就变成半自动了╥﹏╥...
E>word用docx4j解析一个很大的问题是解析的效率太低了,5MB以上的文件或者内容比较复杂的word文档解析十分耗时,解析效率太低,再一就是poi解析数据量比较大的Exel(比如>1000行)容易造成内存溢出,不好控制
F>工时太短,只有15天。。。,加班加点(⊙︿⊙) ,包工头,加工资!!!ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)ノ
以上吐槽完了,该展示下最终成果了~
View Code
虽然需求最终还是改成最简单的实现方式,这中间近乎白忙活的结果研究出来的实现方案还是有必要分享的,以上如能帮助到开发者,哪怕只有一位,也是非常值得的。
转载请注明地址:http://www.cnblogs.com/funnyzpc/p/7225988.html
在此,先分享下写此文前的经历与感受,我所有的感觉浓缩到一个字,那就是:"坑",如果是两个字那就是"巨坑"=>因为这个需求一开始并不是这样子的,且听我漫漫道来:
一开始客户与我们商量的是将office和PDF上传,将此类文件解析成html格式,在APP端调用内置server直接以html"播放"
经历一个月~,两个月~,三个月~~~
到需求开发阶段,发现这是个坑。。。:按照需规的意思这个整体是当做一个功能来做的,技术难度也就算了,而且按照估算的工时也很难做成需规所需要的样子(缺陷太多!)
然后一周~,一周~,又一周~~~
各种方案下来将需求做成能用的样子,然后需求确认时客户说:“我们没有要求你们能解析这些文档,我们只要求你们当做一个源文件上传,在APP端点击直接能选择调用第三方应用打开就行了,而且一开始我们的需求就是这样的。”
/**听完,顿时泪流满面(ಥ _ ಥ),如果业务一开始就确认这样做,何至于浪费如此多的时间,花费如此多的精力绕老大一圈。。。*/
需求绕了一圈又绕回来了,作为经历过的人,现在总结下这需求里面无尽的坑:
A>开源社区有很多Demo,这些Demo有很多缺陷,比如office里面的艺术字、图片、公式、颜色样式、视频和音频不能解析
B>能解析的对象,解析出来的效果不是很好,比如word和ppt自身的排版乱了,excel单元格里面的自定义格式全变成数字了~等等
C>开源社区的资料并不是很全,导致的结果是不同的文档类型需要用不同的解析方式去解析,比如word用docx4j解析、excel用poi解析带来的代码量巨大
D>由于代码自身的解析效果不是很好,更改后的方案需要在上传之前将源文件处理成其他的形式,如pdf需要切成图片,ppt需要转换成视频或是图片,这样一来需求实现的方式就变成半自动了╥﹏╥...
E>word用docx4j解析一个很大的问题是解析的效率太低了,5MB以上的文件或者内容比较复杂的word文档解析十分耗时,解析效率太低,再一就是poi解析数据量比较大的Exel(比如>1000行)容易造成内存溢出,不好控制
F>工时太短,只有15天。。。,加班加点(⊙︿⊙) ,包工头,加工资!!!ε=怒ε=怒ε=怒ε=怒ε=( o`ω′)ノ
以上吐槽完了,该展示下最终成果了~
1 /** 2 * 3 * @param file 上传的文件的路径 c://xx.//xxx.mp4 4 * @param uploadPath 保存html的基目录路径 5 * @return 6 * @throws Exception 7 */ 8 public ProcessFileInfo processPPTX(File file,String uploadPath)throws Exception{ 9 String fileName=file.getName().substring(0,file.getName().lastIndexOf("."));//获取文件名称 10 String suffix=file.getName().substring(file.getName().lastIndexOf(".")+1,file.getName().length()).toLowerCase();//音频文件后缀名 11 String basePath=String.format("%s%s%s", uploadPath,File.separator,fileName); 12 FileUtils.forceMkdir(new File(basePath)); 13 //将视频文件copy到basePath内 14 String videoPath=String.format("%s%s%s", basePath,File.separator,file.getName()); 15 FileUtils.copyFile(file, new File(videoPath)); 16 StringBuilder html=new StringBuilder(); 17 html.append("<!DOCTYPE html><html><head><meta charset='utf-8'><title>powerpoint</title></head>"); 18 html.append("<body style=\"margin:0px 0px;\"><div style=\"width:100%;margin:auto 0% auto 0%;\">"); 19 html.append("<video controls=\"controls\" width=\"100%\" height=\"100%\" name=\"media\" >");//无背景图片 20 html.append(String.format("%s%s.%s%s%s%s%s","<source src=\"",fileName,suffix,"\" type=\"audio/",suffix,"\" >","</video></div>"));//视频 21 html.append("</body></html>");//结尾 22 File indexFile=new File(String.format("%s%s%s",basePath,File.separator,"index.html")); 23 Writer fw=null; 24 PrintWriter bw=null; 25 //构建文件(html写入html文件) 26 try{ 27 fw= new BufferedWriter( new OutputStreamWriter(new FileOutputStream(indexFile),"UTF-8"));//以UTF-8的格式写入文件 28 bw=new PrintWriter(fw); 29 bw.write(html.toString()); 30 }catch(Exception e){ 31 throw new Exception(e.toString());//错误扔出 32 }finally{ 33 if (bw != null) { 34 bw.close(); 35 } 36 if(fw!=null){ 37 fw.close(); 38 } 39 } 40 String zipFilePath=String.format("%s%s%s.%s", uploadPath,File.separator,fileName,"ZIP"); 41 scormService.zip(basePath, zipFilePath); 42 //删除文件 43 file.delete(); 44 FileUtils.forceDelete(new File(basePath)); 45 return new ProcessFileInfo(true,new File(zipFilePath).getName(),zipFilePath); 46 }
View Code
虽然需求最终还是改成最简单的实现方式,这中间近乎白忙活的结果研究出来的实现方案还是有必要分享的,以上如能帮助到开发者,哪怕只有一位,也是非常值得的。
转载请注明地址:http://www.cnblogs.com/funnyzpc/p/7225988.html
相关文章推荐
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- Java程序员从笨鸟到菜鸟之(一百零三)java操作office和pdf文件(一)java读取word,excel和pdf文档内容
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- 应用springMVC快速开发PDF/EXCEL报表方案及实现
- js的导出Excel,Word,pdf的实现以及服务器端生成pdf的实现
- Java解析word,excel,pdf
- Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(1)
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- 将office文档(word,excel,powerpoint)转换为pdf
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法