javaSpringMvc实现⽂件在线预览(openoffice+swftools+fle。。。
项⽬需求:服务器接受的⽂件当下只能下载之后才能浏览内容,现需要后台能在线浏览到⽂件内容,避免繁琐⽆⽤⽂件下载操作.
通过⼏天⽹上资料搜索,⽬前免费的在线预览开发技术使⽤最多还是(openoffice+swftools+flexpaper),经过2天的学习,终于在本地测试成功,后在服务器搭建环境也成功上线.
1.概述
主要原理:
1.通过第三⽅⼯具openoffice,将word、excel、ppt、txt等⽂件转换为pdf⽂件
2.通过swfTools将pdf⽂件转换成swf格式的⽂件
3.通过FlexPaper⽂档组件在页⾯上进⾏展⽰
2.安装包下载
1.openoffice是Apache下的⼀个开放免费的⽂字处理软件
下载地址:Apache oppenoffice 官⽹下载 版本-3.4.1
2.SWFTools是⼀组⽤来处理Flash的swf⽂件的⼯具包,我们使⽤它将pdf⽂件转成swf⽂件!
下载地址:SWFTools官⽹下载
3.FlexPaper是⼀个开源轻量级的在浏览器上显⽰各种⽂档的组件
下载地址:FlexPaper官⽹下载 版本1.4.0(可选择新版)
4.JODConverter⼀个Java的OpenDocument ⽂件转换器,在此我们只⽤到它的jar包
下载地址:JODCConverter下载
openoffice与SWFTools下载完直接安装就好了,openoffice需要开启相应服务,进⼊安装⽬录,进⼊program⽂件,在此处打开命令⾏,或者CMD选择cd到这个⽂件,然后输⼊命令soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard
4、引⼊项⽬
主要⽤到的就是其中flexpaper_flash.js和FlexPaperViewer.swf。html页⾯是Demo格式,可以根据格式⾃定义⾃⼰的显⽰页⾯,两个swf⽂件是测试⽂件,你直接访问FlexPaperViewer.html指向的是Paper.swf.如果显⽰成功表⽰你环境搭建好了.
另外我的是maven项⽬,jar包是统⼀管理的.其他项⽬可以直接把下载的JODConverter⽂件⾥⾯的lib包导⼊项⽬中即可.
所有的相关jar包依赖如下:
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter-cli</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>juh</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>jurt</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>ridl</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>unoil</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
</dependency>
下⼀步我们把相应的⼯具类引⼊项⽬:创建DocConverter.class作为我们将⽂件转换成PDF,然后把PDF转换成SWF格式⽂件,此⼯具类是直接将两个步骤⼀起执⾏的.代码:` import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.tion.OpenOfficeConnection;
import com.artofsolving.tion.SocketOpenOfficeConnection;
import com.artofsolving.verter.OpenOfficeDocumentConverter;
/**
* doc docx格式转换
*/
public class DocConverter {
private static final int environment = 1;// 环境 1:windows 2:linux
private String fileString;// (只涉及pdf2swf路径问题)
private String outputPath = “”;// 输⼊路径 ,如果不设置就输出在默认的位置
private String fileName;
private File pdfFile;
private File swfFile;
private File docFile;
public DocConverter(String fileString) {
ini(fileString);
}
/**
* 重新设置file
*
* @param fileString
*/
public void setFile(String fileString) {
ini(fileString);
}
/**
* 初始化
*
* @param fileString
*/
private void ini(String fileString) {
this.fileString = fileString;
fileName = fileString.substring(0, fileString.lastIndexOf("."));
docFile = new File(fileString);
pdfFile = new File(fileName + ".pdf");
swfFile = new File(fileName + ".swf");
//我的路径是从这⾥指定的,因为此处截取的是全路径+⽂件名字,去掉的是⽂件后缀,如果想指定转换到指定指定位置可以如下操作: // fileName=fileString.substring(fileString.lastIndexOf("/"),fileString.lastIndexOf("."));
// String path=”全路径”;
// docFile=new File(fileString);
// pdfFile=new File(path+fileName+”.pdf”);
// swfFile=new File(path+fileName+”.swf”);
}
/**
* 转为PDF
*
* @param file
*/
private void doc2pdf() throws Exception {
if (ists()) {
if (!ists()) {
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
try {
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
// close the connection
connection.disconnect();
System.out.println("****pdf转换成功,PDF输出:" + Path()+ "****");
} catch (java.ConnectException e) {
e.printStackTrace();
System.out.println("****swf转换器异常,openoffice服务未启动!****");
throw e;
} catch (com.artofsolving.tion.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转换器异常,需要转换的⽂档不存在,⽆法转换****");
}
}
/**
* 转换成 swf
*/
@SuppressWarnings("unused")
private void pdf2swf() throws Exception {
Runtime r = Runtime();
if (!ists()) {
if (ists()) {
if (environment == 1) {// windows环境处理
try {
//此处要指定你机器安装的全路径
Process p = r.exec("D:/Program Files/ "+ Path() + " -o "+ Path() + " -T 9"); System.out.print(InputStream()));
System.out.print(InputStream()));
+ Path() + "****");
if (ists()) {
pdfFile.delete();
}
} catch (IOException e) {
e.printStackTrace();
throw e;
}
} else if (environment == 2) {// linux环境处理
try {
Process p = r.exec("pdf2swf " + Path()
+ " -o " + Path() + " -T 9");
System.out.print(InputStream()));
+ Path() + "****");
if (ists()) {
pdfFile.delete();
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
} else {
System.out.println("****pdf不存在,⽆法转换****");
}
} else {
System.out.println("****swf已经存在不需要转换****");
}
}
static String loadStream(InputStream in) throws IOException {
int ptr = 0;
in = new BufferedInputStream(in);
StringBuffer buffer = new StringBuffer();
while ((ptr = in.read()) != -1) {
buffer.append((char) ptr);
}
String();
}下载apache
/**
* 转换主⽅法
*/
@SuppressWarnings("unused")
public boolean conver() {
if (ists()) {
System.out.println("****swf转换器开始⼯作,该⽂件已经转换为swf****");
return true;
}
if (environment == 1) {
System.out.println("****swf转换器开始⼯作,当前设置运⾏环境windows****"); } else {
System.out.println("****swf转换器开始⼯作,当前设置运⾏环境linux****");
}
try {
doc2pdf();
pdf2swf();
} catch (Exception e) {
e.printStackTrace();
return false;
}
if (ists()) {
return true;
} else {
return false;
}
}
/**
* 返回⽂件路径
*
* @param s
*/
public String getswfPath() {
if (ists()) {
String tempString = Path();
tempString = placeAll("\\\\", "/");
return tempString;
} else {
return "";
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论