一个项目中要做一个在线预览附件(和百度文库差不多)的小功能点,楼主在开发过程中踩了很多坑的同时也总结了一些方法,仅供广大猿友参考,那么要实现这个小功能,目前主要是有如下3种可行的实现方式,下面先说实现的思路设计与他们的优缺点:

第一种思路:先把附件office文档(doc,docx,ppt,pptx,xls,xlsx,txt)转为PDF格式,这里需要用一个OpenOffic这玩意来转换,有服务和端口的属性,所以它是一个服务类软件(像tomcat这类,区别是所提供的服务各不相同),然后把PDF转为SWF文件类型,最后在前台页面使用Flexpaper插件进行播放即可实现。

第一种方式的好处在于:可以兼容IE低版本的浏览器。

第一种方式的!好在于:

首先是把一个附件进行了2次的转换,这里的转换是指另外保存了.pdf和.swf这两种格式的文件,这无疑的加大了存储空间的使用。

其次是.swf格式的文件需要放到项目的WebRoot文件夹的下层才能被Flexpaper插件所读取,当然了你也可以使用Nginx做一个地址映射,把.swf文件放到别的地方也能被Flexpaper所读取。

最后这种方式最大的缺点是Flexpaper插件主要是依赖于一个文件FlexPaperViewer.swf,而这个文件是无法编辑的,如果要编辑,则要找到Flexpaper的源码,然后修改源码,在重新构建生成FlexPaperViewer.swf,来着这里,大家肯定会问,为什么要编辑这个文件,那是因为这个文件是控制Flexpaper插件的各种按钮的,比如打印按钮的显示和隐藏,更重要的是Flexpaper插件是有它自带的LOGO水印,不去掉会显得很难看且尴尬,而编辑这个文件可以解决这些问题,另外如果你的功能中要对附件加自定义的水印的话,就不要采取这种方式了,因为是不可能实现的,原因很简单,因为PDF转SWF中这一步是很坑的,即使你的PDF中已经添加了水印,但是转换后得到的SWF是无水印的,不知道为什么会帮你自动去掉,所以前台读取的是.swf就自然就显示不出来水印了。

谷歌浏览器需要安装flash插件才能正常显示。

第二种思路:第一步还是和第一种一样的,都是先把附件为office文档转换为PDF格式,但是不同于第一种的是得到PDF之后呢,是使用pdf2htmlex插件把PDF直接转化为HTML文本输出到页面来。

第一种方式的好处在于:就是不用生成.swf文件,节省空间,提升效率。

第一种方式的!好在于:

首先只能达到附件预览的效果,如果你要实现打印,文本搜索等功能是是要自己另外写代码的。

其次,如果你的PDF中加了水印的话,输出的HTML也是没有水印的。

第三种思路:最靠谱的一种方式,第一步和前两种方法是一样的,都是先把附件Office文档转换了PDF格式,然后不同的是,得到PDF之后,使用PDF.JS这个框架来显示附件,但是这个框架是基于HTML5的新特性才能实现的,IE的话需要9以上版本才能兼容,这是最大的缺点了,优点太多了,即可看到水印,而且打印等这些功能点都已经实现好了,并且可以改变一些参数就可以实现这些按钮的权限的控制,良心之作。

-------------------------------------------------------------代码分割线-------------------------------------------------------------

写完思路之后当然要写具体要怎么写代码,先说第一种:

这是JAVA后台代码结构

一个是测试类,是用来测试offiec文档转换换为PDF和SWF的

一个工具类,是用来实现转换的代码

一个配置文件是是配置你的OpenOffic服务的端口和地址

这是Web前台代码结构

主要是一些CSS和JS的控件和样式,前台的页面主要是这个FlexPaperViewer.html 或者index.html把页面嵌进一个DIV层就能自定义展示,要显示的文档要转换为SWF格式放到WEBROOT下层任意路径,比如我的docs文件夹里的Paper.pdf.swf文件

访问http://localhost:8080/20180107_SHOW_OFFICE/views/index.html 或者FlexPaperViewer.html

效果如下

项目Demo代码百度云地址:这个项目的打印功能和水印是被我去掉的,具体的怎么去掉自己去百度吧很多教程很麻烦这里就不演示

链接:https://pan.baidu.com/s/1o7LORxw 密码:8653

保留了打印功能的是这个地址:里面有个FlexPaperViewer.swf的配置文件把它替换了原来的就行了

链接:https://pan.baidu.com/s/1pKK0VMF 密码:di0n

然后说第二种:

通过调用工具类里边的一个方法,把一个PDF文件内容变为静态的HTML,然后浏览器直接显示HTML就可以实现预览效果了。

效果如下

Demo链接:https://pan.baidu.com/s/1eRQiVIy 密码:bdjw

最后说第三种:

首先呢要在TOMCAT服务器搭建一个PDF.JS框架,说白了就是在webapp文件夹放入一个已经搭建好的小项目,如图

然后如何调用呢?在你的项目中DIV的SRC或者弹框中用

src=http://localhost:8080/generic/web/viewer.html?file=http://localhost:8080/resources/PDF文件名   其中resources是个文件夹这个是自己建的就可以了,?后边PDF文件的路径

效果如下

百度云:链接:https://pan.baidu.com/s/1eR7SdzW 密码:j9m1 这个是PDF.JS框架代码

最后附上PDF加水印的代码,也用到一些第三方jar包,直接调用,比较简单。

链接:https://pan.baidu.com/s/1eR7Sd02 密码:ca1l

最后补充说明一下:

关于把offer文档转换为PDF的时候首先在本机安装OpenOffice,然后就开启服务,在安装目录下的program文件夹(里边是存命令的),进入后 通过cmd控制台输入以下命令:

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

java pdf在线阅读插件_JAVA实现在线查看PDF和office文档相关推荐

  1. java下载文件到服务器_java代码实现上传文件到文档服务器、下载文档服务器文件...

    需要完成下载->修改->上传这三个步骤 平台有提供对应的api吗? /** 首先我们来理解下关于文档的api 文档相关api都在这2个package下面 package :com.just ...

  2. java 上传文件服务_java代码实现上传文件到文档服务器、下载文档服务器文件

    需要完成下载->修改->上传这三个步骤 平台有提供对应的api吗? /** 首先我们来理解下关于文档的api 文档相关api都在这2个package下面 package :com.just ...

  3. java根据word模板导出_java如何根据word模板生成word文档

    展开全部 先下载jacob_1.10.1.zip. 解压后将jacob.dll放到windows/system32下面或\j2sdk\bin下面. 将jacob.jar加入项目. /* * Java2 ...

  4. java 操作word中表格_Java 使用Spire.Cloud.Word给Word文档添加表格

    在编辑Word文档时,很多时候需要用到表格,以便能够清晰整洁地表达和归类数据.本文就将介绍如何使用Spire.Cloud.Word给Word文档添加表格.Spire.Cloud.Word提供了Tabl ...

  5. java将office文档,word,ppt,pdf文档转换成swf文件在线预览

    java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux ...

  6. java将office文档pdf文档转换成swf文件在线预览

    第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行. 主要模块有writer(文 ...

  7. word转图片 java_Java 利用LibreOffice将Office文档转换成 PDF,进而转图片,实现在线预览功能...

    项目中需要将 Office 文档上传并实现在线预览,用到了 LibreOffice 将 Office 文档转换为 PDF 文档,然后再用 pdfbox 将 PDF 转为图片. 本文介绍借助 Libre ...

  8. Office Online Server 在线编辑Office文档,安装部署

    一.Office Online Server介绍 Office Online Server是 Office Web Apps Server 的升级版本,安装环境必须为两台Windows Server ...

  9. office文档 在线预览 (doc、ppt、xls)

    office 在线预览  调用微软的api,将office文档转换为html,然后实现预览. 参考我们的实现方式:http://demo.kalcaddle.com/?user/loginSubmit ...

最新文章

  1. 最近心理很烦,谁能帮帮我?
  2. 知乎Live上线-学深度学习我们到底在学什么
  3. 学生成绩管理系统测试用例C语言,学生成绩管理系统测试用例.doc
  4. Spring MVC:表单处理卷。 5 –选择,选项,选项标签
  5. mp.weixin.php,GitHub - temberature/mp-php-sdk: 微信公众平台第三方授权php开发包, weixin mp developer SDK....
  6. 关于徒手脱壳的几种方法
  7. Android 代码动态生成ProgressBar
  8. 围观电动车极端测试,是一种怎样的体验?
  9. RDC升级(remote desktop service)
  10. python定义空函数体_Python 2.2 定义函数
  11. Matplotlib 入门(详看注释)
  12. hadoop2.x配合ZooKeeper集群环境搭建
  13. Github开源微信小程序Demo-用于学习交流
  14. Java-前后端分离-单点登录(SSO二级跨域和跨一级域名)
  15. 用html把图片整体往左挪动,网页制作如何让图片从左到右循环移动
  16. 囧囜囟囥圀圄圅圙圝圞
  17. 【CSharp】延迟初始化(Lazy)
  18. Chrome浏览器视频网站全屏黑屏解决方法
  19. htc legend 升级到 android 2.2 froyo 后,输入法问题
  20. android手机内存越来越小,安卓手机因软件安装失败 导致手机内存越来越小解决方法...

热门文章

  1. bat调用bat注意事项(不带上参数 /b 时 会直接退出)
  2. ./configure:command not found 解决方法
  3. dubbo服务RpcException异常:Tried 3 times of the providers 或com.alibaba.dubbo.remoting.TimeoutException
  4. 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法
  5. 解决 Electron 5.0 版本出现 require is not defined 的问题
  6. ASP.NET MVC下基于异常处理的完整解决方案
  7. webpack-dev-server 设置反向代理解决跨域问题
  8. 为什么rand()+ rand()产生负数?
  9. 您如何计算Visual Studio解决方案中的代码行?
  10. 撤消git pull,如何将repos带到旧状态