赞
踩
一 、OpenOffice的在线预览##
我的具体逻辑: ①我是文件上传到阿里云服务器上
②然后我需要把上传的文件下载下来,下载到另外一台服务器上,然后获取下载文件的地址,进行转码,转成html或者pdf格式(功能一模一样)
③然后拿到转码后的文件地址在前台页面访问,进行预览
二、需要的jar包
<dependency> <groupId>jodconverter</groupId> <artifactId>jodconverter-jar</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.artofsolving.jodconverter</groupId> <artifactId>jodconverter-core</artifactId> <version>3.0-beta-4</version> </dependency> <dependency> <groupId>com.artofsolving</groupId> <artifactId>jodconverter</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>juh</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>jurt</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>ridl</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>unoil</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.10</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>compile</scope> </dependency>
上边就是实现预览多用到的jar包,但是有个问题;
<dependency>
<groupId>jodconverter</groupId>
<artifactId>jodconverter-jar</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.artofsolving.jodconverter</groupId>
<artifactId>jodconverter-core</artifactId>
<version>3.0-beta-4</version>
</dependency>
这两个jar包是下载不下来的,我只能通过maven命令进行安装,命令行如下:
"C:\Users\С6\Downloads"是jar包在我本地的位置
mvn install:install-file -Dfile=C:\Users\С6\Downloads\jodconverter-core-3.0-beta-4-dist\jodconverter-core-3.0-beta-4\lib\jodconverter-core-3.0-beta-4.jar -DgroupId=org.artofsolving.jodconverter -DartifactId=jodconverter-core -Dversion=3.0-beta-4 -Dpackaging=jar
jar包下载完就直接上代码了。
三 代码
openOfficeUtils的工具类
package com.soundking.campus.config; 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; import org.apache.commons.io.FilenameUtils; import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.ExternalOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.OfficeException; import org.artofsolving.jodconverter.office.OfficeManager; import java.io.File; public class OpenOfficeUtils { @SuppressWarnings("static-access") //这个是服务器上openOffice4的安装目录 // private static String officeHome = File.separator+"opt"+File.separator+"openoffice4"; //这个是我本地的默认openOffice4的安装目录(本地测试用的) //这里写的是你的openoffice的安装地址,如果你在安装openOffice 的时候选择的是默认安装,那么地址是:C:/Program Files (x86)/OpenOffice 4/。 private static String officeHome = "C:/Program Files (x86)/OpenOffice 4/"; // 如果是自定义的安装方式,请填写自定义安装路径。 @SuppressWarnings("static-access") private static int port = 8100;//这里的内容是根据你的系统选择不同的端口号,windows系统的端口号是8100 private static OfficeManager officeManager; // 尝试连接已存在的服务器 private static boolean reconnect() { try {// 尝试连接openoffice的已存在的服务器 ExternalOfficeManagerConfiguration externalProcessOfficeManager = new ExternalOfficeManagerConfiguration(); externalProcessOfficeManager.setConnectOnStart(true); externalProcessOfficeManager.setPortNumber(8100); officeManager = externalProcessOfficeManager.buildOfficeManager(); officeManager.start(); return true; } catch (OfficeException e) { e.printStackTrace(); return false; } } // 开启新的openoffice的进程 private static void start() { System.out.println("启动OpenOffice服务"); try { DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration(); configuration.setOfficeHome(officeHome);// 安装地址 configuration.setPortNumbers(port);// 端口号 officeManager = configuration.buildOfficeManager(); officeManager.start(); // 启动服务 System.out.println("我的服务终于启动成功了。。。。。。"); } catch (Exception e) { e.printStackTrace(); System.out.println("启动OpenOffice服务出错" + e); } } // 使用完需要关闭该进程 private static void stop() { System.out.println("关闭OpenOffice服务"); try { if (officeManager != null) { officeManager.stop(); } } catch (Exception e) { System.out.println("关闭OpenOffice服务出错" + e); } } public static File convertToPdf(String input) { File inputFile = null; File outFile = null; try {// 如果已存在的服务不能连接或者不存在服务,那么开启新的服务 if (!reconnect()) { start();// 开启服务 } // 不管是转html或者是转pdf,只要把后边的后缀名改一下即可 (但是转成html,假如word里边有图片啊,那么也会生成单独的图片链接,pdf不会出现这种情况) String output = FilenameUtils.separatorsToSystem(FilenameUtils.getFullPath(input) + FilenameUtils.getBaseName(input) + ".pdf"); inputFile = new File(input); outFile = new File(output); System.out.println("开始转换文档:" + input + "=>" + output); OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); converter.convert(inputFile, outFile); // 转换文档 } catch (Exception e) { System.out.println("转换文档出错" + e); outFile = null; } finally { System.out.println("结束转换文档"); stop(); } return outFile; } // 测试工具类是否成功 public static void main(String[] args) { String path = ""; OpenOfficeUtils.convertToPdf("F:\\test\\新建 Microsoft Word 文档.docx"); File sf = new File("F:\\test\\新建 Microsoft Word 文档.docx"); System.out.println(sf.getPath()); } }
看看我的实现层是怎么写的吧;
public ResponseData onlinePvw(String url) { //这是我想把文件转在我服务器的地址,不管是在windows或者是linux,File.separator都可以代替 ‘/’ // String destUrl = File.separator+"opt"+File.separator+"openoffice4"+File.separator+"file"+File.separator; // System.out.println(destUrl); //这是为了测试,在我本地的存放地址 String destUrl = "F:"+File.separator+"test"+File.separator+"bbbbb"+File.separator; File files = new File(url); String fileName = files.getName(); File destFile = new File(destUrl+fileName); System.out.println(destFile); //这是阿里云OSS下载文件的方法,我需要先在阿里云把文件下载到我的另一台服务器上。 OSSObject ossObject = ossConfig.downloadFile(ossConfig.getOssClient(),url); InputStream bis = ossObject.getObjectContent(); FileOutputStream fos = null; BufferedOutputStream bos = null; try { fos = new FileOutputStream(destFile); bos = new BufferedOutputStream(fos); byte[] bys = new byte[1024]; int len = bis.read(bys); while(len != -1){ System.out.println(bos); bos.write(bys,0,len); len = bis.read(bys); } } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); }finally { try { bis.close(); } catch (IOException e) { } try { bos.close(); } catch (IOException e) { } } //调用方法,进行转码了 File file = OpenOfficeUtils.convertToPdf(destUrl+fileName); //这个path,就是最后html或者pdf的文件路径,返给前台就可以了 String path = file.getPath(); System.out.println(file.getPath()); return ResponseUtil.response(Code.SUCCESS, path); }
写这个代码,让我走了很多的弯路,尤其是用代码去启动服务的时候。虽然写完了,但是我的逻辑还是没完,哎,没办法;(我还需要第三台服务器,因为下载到我的这个服务器上,文件没办法访问,可能需要配置很多东西,所以我只能在去研究了。上边的这个办法确实是可以用的,有很多地方还是可以完善的,好多地方我都是写死的,只是为了先实现转换功能,下边我还写了另外一种方法,这个是比较简单的,大家也可以看看!)
实现类层没有任何变化,就是工具类变了,好了,不所说了,直接上代码;
package com.soundking.campus.config; 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; import org.apache.commons.io.FilenameUtils; import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.ExternalOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.OfficeException; import org.artofsolving.jodconverter.office.OfficeManager; import java.io.File; public class OpenOfficeUtils { //你服务器的ip和port //有一点要提醒,如果你要在本地测试,ip要写成127.0.0.1 , localhost 虽然是本地ip,但是这个会报错 public static final String DEFAULT_HOST = "xxx.xxx.xxx.xxx"; public static final int DEFAULT_PORT = 8100; public static File convertToPdf(String input) { File inputFile = null; File outFile = null; try { //直接去连接你的服务器 OpenOfficeConnection connection = new SocketOpenOfficeConnection(DEFAULT_HOST,DEFAULT_PORT); connection.connect(); String output = FilenameUtils.separatorsToSystem(FilenameUtils.getFullPath(input) + FilenameUtils.getBaseName(input) + ".pdf"); inputFile = new File(input); outFile = new File(output); System.out.println("开始转换文档:" + input + "=>" + output); DocumentConverter converter = new OpenOfficeDocumentConverter(connection); converter.convert(inputFile, outFile); // 转换文档 connection.disconnect(); } catch (Exception e) { System.out.println("转换文档出错" + e); outFile = null; } finally { System.out.println("结束转换文档"); stop(); } return outFile; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。