背景
最近公司内部oa系统升级,需要增加文件在线预览服务,最常见的文件就是office文档,一开始构思几个方案,比如office软件自带的文件转换,openoffice转换,offce365服务,aspose组件转换,最终采用了aspose转换,原因是组件功能完善,不依赖其它软件安装环境
系统设计
文件类型及方案
文件类型 | 预览方案 |
---|---|
word | aspsoe-word转换图片预览(版本21.1) |
ppt | aspose-slides转化你图片预览(版本20.4) |
excel | aspose-cell转换html预览(版本20.4) |
pdfbox缓缓图片预览(版本2.0.15) | |
png,jpg,gif | 整合viewer.js预览(版本1.5.0) |
mp4 | 整合vedio.js预览(js版本7.10.2) |
txt | 读取文件内容预览 |
注:aspose因版权问题,工程示例代码中全部使用试用版,转换图片会出现水印
流程设计
系统实现
识别文件后缀
URL指向文件真实路径时根据后缀名判断
1 | java复制代码 public static String getTypeByExtenssion(String linkUrl) { |
URL为文件输出流时
- 根据文件输出流的disposition
1 | java复制代码 private static String getTypeByDisposition(String disposition) { |
- 根据文件输出流content-type
1 | java复制代码 types = new HashMap<String, String>(); |
- 根据stream的固定字节判断
1 | java复制代码 FILE_TYPE_MAP.put(".pdf", "255044462D312E"); // Adobe Acrobat (pdf) |
文件解析
word分页转换图片
1 | java复制代码Document doc = new Document(fileConvertInfo.getFilePath()); |
ppt分页转换图片
1 | java复制代码Presentation ppt = new Presentation(fileConvertInfo.getFilePath()); |
excel转换html
1 | java复制代码Workbook wb = new Workbook(fileConvertInfo.getFilePath()); |
excel分页转换图片(另一种预览方式)
1 | java复制代码Workbook wb = new Workbook(fileConvertInfo.getFilePath()); |
pdf分页转换图片
1 | java复制代码PDDocument pdf = PDDocument.load(new File((fileConvertInfo.getFilePath()))); |
预览图片
1 | html复制代码<body> |
预览视频
1 | html复制代码<body> |
系统效果
使用方法
直接运行项目,输入预览地址
http://localhost:8098/fastpreview/plaform/index.html?file=(文件地址)
文件地址支持文件访问路径与流输出
项目源码地址
预览界面
word
excel
ppt
image
vedio
txt
本文转载自: 掘金