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

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

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

第一种方式的!好在于:

  1. 首先是把一个附件进行了2次的转换,这里的转换是指另外保存了.pdf和.swf这两种格式的文件,这无疑的加大了存储空间的使用。
  2. 其次是.swf格式的文件需要放到项目的WebRoot文件夹的下层才能被Flexpaper插件所读取,当然了你也可以使用Nginx做一个地址映射,把.swf文件放到别的地方也能被Flexpaper所读取。
  3. 最后这种方式最大的缺点是Flexpaper插件主要是依赖于一个文件FlexPaperViewer.swf,而这个文件是无法编辑的,如果要编辑,则要找到Flexpaper的源码,然后修改源码,在重新构建生成FlexPaperViewer.swf,来着这里,大家肯定会问,为什么要编辑这个文件,那是因为这个文件是控制Flexpaper插件的各种按钮的,比如打印按钮的显示和隐藏,更重要的是Flexpaper插件是有它自带的LOGO水印,不去掉会显得很难看且尴尬,而编辑这个文件可以解决这些问题,另外如果你的功能中要对附件加自定义的水印的话,就不要采取这种方式了,因为是不可能实现的,原因很简单,因为PDF转SWF中这一步是很坑的,即使你的PDF中已经添加了水印,但是转换后得到的SWF是无水印的,不知道为什么会帮你自动去掉,所以前台读取的是.swf就自然就显示不出来水印了。
  4. 谷歌浏览器需要安装flash插件才能正常显示。

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

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

第一种方式的!好在于:

  1. 首先只能达到附件预览的效果,如果你要实现打印,文本搜索等功能是是要自己另外写代码的。
  2. 其次,如果你的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和office文档的更多相关文章

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

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

  2. Java实现web在线预览office文档与pdf文档实例

    https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档 ...

  3. Java实现office文档与pdf文档的在线预览功能

    最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...

  4. 在线预览-Java 使用 Print2Flash 实现Office文档在线阅读

    近期项目上遇到一个需求是用户上传的文档进行在线浏览,之前有过一篇使用 OpenOffice 将 word 转换成 html 页面进行展示的.现在介绍一个新的工具那就是 Print2Flash .    ...

  5. Java版office文档在线预览

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

  6. 怎么在线预览.doc,.docx,.ofd,.pdf,.wps,.cad文件以及Office文档的在线解析方式。

    前言 Office文件在线预览是目前移动化办公的一种新趋势.Office在线预览指的是Office系列的文件在线查看而不依附域客户端的存在.在浏览器或者浏览器控件中可以预览查看Word.PDF.Exc ...

  7. java读取pdf和MS Office文档

    有时候PDF中的文字无法复制,这可能是因为PDF文件加密了,不过使用PDFBox开源软件就可以把它读出来. 还有一个用于创建PDF文件的项目----iText. PDFBox下面有两个子项目:Font ...

  8. java通过url在线预览Word、excel、ppt、pdf、txt文档

    java通过url在线预览Word.excel.ppt.pdf.txt文档中的内容[只获得其中的文字] 在页面上显示各种文档中的内容.在servlet中的逻辑 word: BufferedInputS ...

  9. 使用微软提供的Office Online实现Office文档的在线查看,编辑等功能

    使用微软提供的Office Online平台只需要一个网址即可在线查看Xls,doc,PPT等文档 http://view.officeapps.live.com/op/view.aspx?src=要 ...

随机推荐

  1. Go资源

    go语言实现的设计模式 http://tmrts.com/go-patterns/ https://design-patterns.readthedocs.io/zh_CN/latest/index. ...

  2. VMware Workstation安装Red hat7.0联网问题总结

    1.在red hat7当中iconfig命令是被取消了的,开发者用ip addr命令取代了ifconfig命令. 当然也是可以用ifconfig命令的 (前提是你安装的linux是可以联网的): 1) ...

  3. 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数

    一.函数的对象 函数是第一类对象,指的是函数名指向的值(函数)可以被当作数据去使用 def func():# func=函数的内地址 print('from func') print(func) ag ...

  4. Python操作Excel, 开发和调用接口,发送邮件

    笔记: 上周回顾: 模块: 导入模块的顺序 lyl.py # def hhh(): pass name = 'lyl' a.py import lyl import sys from lyl impo ...

  5. VMware ESXi 6.5 安装

    1.1下载esxi镜像 此处我使用的版本是:VMware-VMvisor-Installer-6.5.0-4564106.x86_64 1.2新建一个虚拟机,硬件兼容性处选择ESXI6.5 硬盘40g ...

  6. win10 vscode使用 智能提示

    1.没有第三方库的智能提示 参考:https://code.visualstudio.com/docs/python/editing 1.点开Settings 2.搜索加添加 3.添加后的内容 然后就 ...

  7. 微信小程序学习笔记(三)

    一般setData方法多用于点击后改变页面信息或者刷新后与后台交互获取最新的信息 注意: 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致 ...

  8. QEMU KVM Libvirt手册(6) – Network Block Device

    网络块设备是通过NBD Server将虚拟块设备通过TCP/IP export出来,可以远程访问. NBD Server通常是qemu-nbd 可以提供unix socket qemu-nbd -t ...

  9. 依赖注入[7]: .NET Core DI框架[服务注册]

    包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IServiceProvider对象.服务注册就是创建出现相应的ServiceDescriptor对象并将其添加到 ...

  10. 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识

    第33章      SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...