最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法。我集成到我项目内测试的有以下三种,最后使用的是第三种:

  • 直接使用别人提供的服务 例如:office web 365
  • 使用openoffice+swfTools+flexPaper实现
  • 使用openoffice+pdf.js实现

1.使用office web 365第三方服务点击进入官网;

  特点:

  1. 实现起来简单,简单的不能再简单了,你只需要给它提供一个文件资源的链接就可以了。
  2. 它支持各种文件类型的预览,而且能保存原有文件的各种动态效果,如PPT的动画效果,而且连压缩包都可以预览。也就是说,你在这上面预览文件和你在计算机上直接打开没有任何区别。
  3. 能实现文件的缓存,减轻你服务器的压力。
  4. 有免费版、标准版、高级版等多个版本,不同的版本对应的服务也不一样,免费版预览的文件大小不能超过5MB,每天预览次数(调用接口次数)不能超过500次,对于要求高的系统就必须使用付费版的了。
  5. 安全问题,虽说office web提供了很高的安全性,但是总感觉将自己的东西放别人那里不会太安全。
  6. 不适合局域网内的项目。

  openoffice示例如下:

  不需要部署、不需要编程,不需要做任何事情,只需要做个链接:点我预览,链接指向:
  http://officeweb365.com/o/?i=您的网站ID&furl=要预览的Office文件下载地址 
  例:

 不需要部署、不需要编程,不需要做任何事情,只需要做个链接:点我预览,链接指向:
http://officeweb365.com/o/?i=您的网站ID&furl=要预览的Office文件下载地址
例:<a href="http://officeweb365.com/o/?i=1&furl=http://a.com/downfile/a.doc" target="_blank">点我预览</a>

2.使用openoffice+swfTools+flexPaper实现

使用openOffice+swfTools+flexPaper实现文件预览功能的主要思想是:通过Java程序调用服务器上安装的软件openoffice,来将其它文件类型转化为pdf,然后调用swfTools将pdf转化为swf文件,在前端通过flexpaper插件来预览swf文件。

特点:

  1. 这个实现起来相对复杂一点,需要在服务器上提前安装openOffice和swfTools软件,然后在程序里调用这些软件来完成文件类型的转换。
  2. 好像不支持中文路径和中文文件名,要想支持中文文件名,需要反编译flexpaper然后再。。。反正很麻烦
  3. 这个的资料很多,因此网上可以找很多教程来帮助你完成配置。

具体的实现可以参考下这个博客:OpenOffice+SwfTools+flexpaper实现文件预览

3.使用openoffice+pdf.js

在我的项目中采用的就是这种方法,pdf.js的显示效果比较好,而且可以根据自己的项目需要完成相关的配置。下面说一下我的项目中具体使用:

1.首先安装openOffice,安装成功之后在命令行启动该服务,如下图:进入安装目录下的program目录,然后执行命令:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"

查看运行的进程内有没有soffice.bin,有的话则启动成功。

2.然后在项目内导入如下jar包:

jodconverter-2.2.2.jar
ridl-3.2.1.jar
commons.io.jar
juh.jar
jurt.jar
unoil.jar
slf4j-api-1.7.13.jarslf4j-jdk14-1.7.13.jarxstream-1.4.1.jar

3.编写Java代码完成其它文件到pdf的转化:直接初始化将源文件路径,以及要转化为的pdf的文件路径传递进去即可,代码如下

 package com.ams.util.server;

 import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter; public class DocConverter { private String fileName;
private File pdfFile;
private File docFile;
private File odtFile; public DocConverter(String sourceFile,String targetFile) throws Exception { fileName = sourceFile.substring(0, sourceFile.lastIndexOf("/"));
docFile = new File(sourceFile);//得到转换前的文件
//得到文件的不带后缀的名字s
String s = sourceFile.substring(sourceFile.lastIndexOf("/") + 1,sourceFile.lastIndexOf("."));
fileName = fileName + "/" + s;
// 用于处理TXT文档转化为PDF格式乱码,获取上传文件的名称(不需要后面的格式_
String txtName = sourceFile.substring(sourceFile.lastIndexOf(".")); //得到文件格式
// 判断上传的文件是否是TXT文件
if (txtName.equalsIgnoreCase(".txt")) {
//是txt则需要转化为odt,然后再转为pdf
odtFile = new File(fileName + ".odt");
// 将上传的文档重新copy丿份,并且修改为ODT格式,然后有ODT格式转化为PDF格式
this.copyFile(docFile, odtFile);
pdfFile = new File(targetFile); // 用于处理PDF文档
} else if (txtName.equals(".pdf") || txtName.equals(".PDF")) {
pdfFile = new File(targetFile);
this.copyFile(docFile, pdfFile);
} else{
pdfFile = new File(targetFile);
}
doc2pdf();//调用函数进行转换
}
private void copyFile(File sourceFile,File targetFile)throws Exception{
//新建文件输入流并对它进行缓冲 
FileInputStream input = new FileInputStream(sourceFile);
BufferedInputStream inBuff = new BufferedInputStream(input);
// 新建文件输出流并对它进行缓冲
FileOutputStream output = new FileOutputStream(targetFile);
BufferedOutputStream outBuff = new BufferedOutputStream(output);
// 缓冲数组 
byte[]b = new byte[1024 * 5];
int len;
while((len = inBuff.read(b)) != -1){
outBuff.write(b,0,len);
}
// 刷新此缓冲的输出浿
outBuff.flush();
// 关闭浿
inBuff.close();
outBuff.close();
output.close();
input.close();
}
private void doc2pdf() throws Exception {
if (docFile.exists()) {
if (!pdfFile.exists()) {
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
try {
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(docFile, pdfFile);
// close the connection
connection.disconnect();
System.out.println("****pdf转换成功,PDF输出_" + pdfFile.getPath() + "****");
} catch (java.net.ConnectException e) {
// ToDo Auto-generated catch block
e.printStackTrace();
System.out.println("****swf转换异常,openoffice服务未启动!****");
throw e;
} catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
e.printStackTrace();
System.out.println("****swf转换器异常,读取转换文件失败****");
throw e;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
} else {
System.out.println("****已经转换为pdf,不霿要再进行转化****");
}
} else {
System.out.println("****swf转换器异常,霿要转换的文档不存在,无法转换****");
}
}
103 }

4.前端需要导入pdf.js插件,然后将返回的结果动态添加到viewer.js中的DEFAULT_URL中即可,在这里面可以进行各种现实效果的配置。

  以上就是我实现文件预览的几种方法,希望能和广大网友共同学习和进步!Fighting!

Java实现文件的预览的更多相关文章

  1. 关于confluence上传文件附件预览查看时出现乱码的问题解决办法

    在confluence上传excel文件,预览时发现乱码问题主要是因为再上传文件的时候一般是Windows下的文件上传,而预览的时候,是linux下的环境,由于linux下没有微软字体,所以预览的时候 ...

  2. 文件在线预览doc,docx转换pdf(一)

    文件在线预览doc,docx转换pdf(一) 1. 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库 ...

  3. confluence上传文件附件预览乱码问题(linux服务器安装字体操作)

    在confluence上传excel文件,预览时发现乱码问题主要是因为再上传文件的时候一般是Windows下的文件上传,而预览的时候,是linux下的环境,由于linux下没有微软字体,所以预览的时候 ...

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

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

  5. kkfileview v2.0 发布,文件在线预览项目方案

    kkfileview文件在线预览 此项目为文件文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署,部署好后可以独立提供预览服务,使用http接口访问,不需要和应用集成,具 ...

  6. 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程

    大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...

  7. JS代码实用代码实例(输入框监听,点击显示点击其他地方消失,文件本地预览上传)

    前段时间写前端,遇到一些模块非常有用,总结以备后用 一.input框字数监听 <!DOCTYPE html> <html lang="en"> <he ...

  8. asp.net word ecxel类型文件在线预览

    asp.net word ecxel类型文件在线预览 首先得引用COM: Microsoft Excel 10 Object Library Microsoft Word 10 Object Libr ...

  9. office文件的预览

    使用FlexPaper实现office文件的预览(C#版) 需求很简单,用户上传office文件(word.excel.ppt)后,可以预览上传的这些文件.搜索的相关的资料后.整理如下: Step1. ...

随机推荐

  1. MVC中给TextBoxFor设置默认值和属性

    例如:(特别注意在设置初始值的时候 Value 中的V要大写) @Html.TextBoxFor(model => model.CustomerCode, new { Value=" ...

  2. jquery $('#btn').click与$("#btn").live("click",function()有什么区别?

    live方法绑定的事件处理函数,在页面中未来添加的元素只要满足原来的选择器,仍然会导致事件触发.普通的事件绑定则没有这个效果.对于#btn这个选择器来说,如果你未来将id为btn的元素删除,然后再创建 ...

  3. java.lang.UnsupportedClassVersionError: Bad version number in .class file

    java.lang.UnsupportedClassVersionError: Bad version number in .class file造成这种过错是ni的支撑Tomcat运行的JDK版本与 ...

  4. dbms_job dbms_scheduler简单比较

    ---------------------------陈旧的-------------------------------------/*--------------------- 创建job --- ...

  5. Swift - 24 - switch语句的高级用法

    //: Playground - noun: a place where people can play import UIKit // 对区间进行判断 var score = 90 switch s ...

  6. 全志A10_linux3.0内核编译记录

    第一次尝试编译时按照 Android A10(4.0.3)系统编译详解.pdf 编译打包出来的镜像可用,但是内核没有生成Module.symvers .后来进一步研究才知道 ./build.sh 脚本 ...

  7. html form <label>标签基础语法结构与使用案例教程(转载)

    在表单布局中会遇到label标签的使用,label没有任何样式效果,有触发对应表单控件功能.比如我们点击单选按钮或多选框前文字对应选项就能被选中,这个就是对文字加了<label>标签实现. ...

  8. 打包静默安装参数(nsis,msi,InstallShield,InnoSetup)[转]

    有时我们在安装程序的时候,希望是静默安装的,不显示下一步下一步,这编访问来教大家如何来操作,现在常用的制作安装程序的软件有,  Microsoft Windows Installer  , Windo ...

  9. ibatis ORA-00911: 无效字符

    检查下xml文件中 sql的最后是不是写了 “;” 最容易犯这个毛病,都不知道吃了多少次亏了. 什么ORA-00911: 无效字符 什么The error occurred while applyin ...

  10. 【行为型】Mediator模式

    中介者模式目的是将对象间的交互封装在一个对象中,从而使用各对象间的相互依赖解耦,并可以独立更改对像间的交互.在实际项目开发过程中,因某些原因(如:业务逻辑处理不当或设计不当等)使得多个不同对象间需要相 ...