文档在线浏览总体步骤说明:
1、利用openoffice或libreoffice与jodconvert结合,将word,Excel等等office文件转换为PDF格式的文件。
2、利用swfTools安装后包中的PDF2swf.exe将PDF文件转为swf格式的文件。
3、利用flaxpaper实现在线打开。
转换word,PPT,Excel,TXT等等文件为PDF格式:
方法一:使用openoffice+jodconvert
准备工作:下载安装openoffice 地址:http://www.openoffice.org/download/index.html
下载jodconverter 下载地址:https://sourceforge.net/projects/jodconverter/
导入jodconverter对应的jar包,为所下载的jodconverter.zip中libs目录下的jar包。包括:
import java.io.File;
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 convert {
public String doc2Pdf(String docFileName) {
File docFile = new File(docFileName);
String noExt = docFileName.substring(0, docFileName.lastIndexOf("."));
File pdfFile = new File(noExt + ".pdf");
StringBuffer sb = new StringBuffer("");
String res = "";
if (docFile.exists()) {
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
try {
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(docFile, pdfFile);
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
sb.append("转换异常");
}
} else {
sb.append("需要转换的文件不存在");
}
sb.append(res);
return sb.toString();
}
}
方法二:使用libreoffice+jodconvert
准备工作:下载安装libreoffice 地址:https://www.libreoffice.org/download/download/
导入jodconverter-core-3.0-beta-4.jar 下载地址:http://download.csdn.net/download/rory898863935/10255288
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;
public class convertLibre {
/**
* 转换libreoffice支持的文件为pdf
* @param inputfile
* @param outputfile
*/
public String office2Pdf(String docFileName) {
String LibreOffice_HOME = getLibreOfficeHome();
File docFile = new File(docFileName);
String noExt = docFileName.substring(0, docFileName.lastIndexOf("."));
File pdfFile = new File(noExt + ".pdf");
StringBuffer sb = new StringBuffer("");
DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
configuration.setOfficeHome(new File(LibreOffice_HOME));
configuration.setPortNumber(8100);
OfficeManager officeManager = configuration.buildOfficeManager();
officeManager.start();
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
try {
converter.convert(docFile, pdfFile);
sb.append("success");
} catch (Exception e) {
sb.append("转换异常");
e.printStackTrace();
} finally {
officeManager.stop();
}
return sb.toString();
}
}
将转换好的PDF文件转为swf文件。如果要打开的是PDF,则可以直接跳过第一步。
准备工作:下载swftools。 地址:https://swftools.en.softonic.com/download
下载安装后,在安装目录找到PDF2swf.exe,将文件拷贝到项目路径下。
public String pdf2swf(String noExt) {
Runtime r = Runtime.getRuntime();
File swfFile = new File(noExt + ".swf");
File pdfFile = new File(noExt + ".pdf");
File pdfFile2 = new File(noExt + ".pdf");
StringBuffer sb = new StringBuffer("");
if (!swfFile.exists()) {
if (environment == 1) {// windows环境处理
try {
File tempPdf = new File(pdfFile.getPath().substring(0, pdfFile.getPath().lastIndexOf("\\") + 1) + "temp.pdf");
pdfFile.renameTo(tempPdf);// 防止因为文件名导致的转换错误
String relPath = convert.class.getResource(convert.class.getSimpleName() + ".class").toString();
String swfPath = relPath.substring(relPath.indexOf("fiel:/") + 7, relPath.indexOf("/WEB-INF"))
+ "/pdf/pdf2swf.exe ";
String cmd = swfPath + tempPdf.getPath() + " -o " + swfFile.getPath() + " -T 9";
Process p = r.exec(cmd);
boolean finish = true;
while (finish) {
if (!swfFile.exists()) {
Thread.sleep(500);
} else {
finish = false;
}
}
if (pdfFile.exists()) {
pdfFile.renameTo(pdfFile2);
}
sb.append("success");
} catch (Exception e) {
e.printStackTrace();
sb.append("转换为swf失败");
}
} else if (environment == 2) {// linux环境处理
try {
Process p = r.exec("pdf2swf " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9");
if (pdfFile.exists()) {
pdfFile.delete();
}
sb.append("success");
} catch (Exception e) {
e.printStackTrace();
sb.append("转换为swf失败");
}
}
} else {
sb.append("success");
}
return sb.toString();
}
准备工作:下载flaxpaper 地址:http://download.csdn.net/download/rory898863935/10255338
将所下载的压缩包中的,flexpaper_flash.js和FlexPaperViewer.swf。放在项目指定的位置。
flexpaper_flash.js和FlexPaperViewer.swf是实现swf文件在线浏览的必须文件。
flexpaper_repair.js可以解决某些浏览器无法打开的情况,解决了兼容性问题,可以使得所有的浏览器都可以正常在线浏览。
flexpaper_repair.js下载地址:http://download.csdn.net/download/rory898863935/10255347
问题解决:很多人执行了上面所有的步骤,但是无法打开,90%都是路径有问题,路径是指要打开的swf文件路径和flexpaperViewer.swf文件路径。
在代码的这里:swfPath为要打开的文件,fp为flexpaperViewer.swf的路径,两者在前面都要加项目。
比如swf文件在项目(kk)/web/asd/test.swf。那么这里就应该写/kk/asd/test.swf。
swfPath = '/a1/upload/'+fileName+'.swf';
var fp = new FlexPaperViewer(
'/a1/flexpaper/FlexPaperViewer',