Java实现在线预览office

最近项目用到在线预览office相关文件。额、一想。貌似不难实现、java的poi可以实现、然后。。。发现事不如愿、针对office的格式多样化。poi显的力不从心、遂放弃折腾、由于服务器为linux!故有关使用 jacob-1.15-M4-x86.dll 来转换的方法也得淘汰。发现QQ邮箱、163邮箱等邮件中附件在线预览很是牛叉。经了解。原来他们使用国人的永中office来转换。效果非常好。不过设计付费、版权等问题。也不实际。所以另辟蹊径、找到基于openoffice的转换方式、兼容window与linux。开源免费、大块人心。
将Word转Html的原理是这样的:


1、客户上传Word文档到服务器
2、服务器调用OpenOffice程序打开上传的Word文档
3、OpenOffice将Word文档另存为Html格式
4、Over

关于openoffice的安装与服务的启动这里不做太多介绍了。下面附上利用openoffice将word转html的核心代码:

package common.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ConnectException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

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 config.AppConfig;

/**
 * 利用jodconverter(基于OpenOffice服务)将word文件(*.doc)转化为html格式,
 * 使用前请检查OpenOffice服务是否已经开启,
 * OpenOffice进程名称:soffice.exe | soffice.bin
 * @author linshutao
 * */
public class Doc2HtmlUtil {

	Log log = LogFactory.getLog(getClass());
	private static Doc2HtmlUtil doc2HtmlUtil;

	/**
	 * 获取Doc2HtmlUtil实例
	 * */
	public static synchronized Doc2HtmlUtil getDoc2HtmlUtilInstance(){
		if(doc2HtmlUtil == null){
			doc2HtmlUtil = new Doc2HtmlUtil();
		}
		return doc2HtmlUtil;		
	}
	/**
	 * 转换文件
	 * @param fromFileInputStream: 
	 * */
	public String doc2Html(InputStream fromFileInputStream, File toFileFolder){
		String soffice_host = AppConfig.getProperty(AppConfig.SOFFICE_HOST_KEY);
		String soffice_port = AppConfig.getProperty(AppConfig.SOFFICE_PORT_KEY);
		log.debug("soffice_host:"+soffice_host+",soffice_port:"+soffice_port);

		Date date = new Date();
		SimpleDateFormat sdf =new SimpleDateFormat("yyyyMMddHHmmss");
		String timesuffix = sdf.format(date);
		String htmFileName = "htmlfile"+timesuffix+".html";
		String docFileName = "docfile"+timesuffix+".doc";

		File htmlOutputFile = new File(toFileFolder.toString()+File.separatorChar+htmFileName);		
		File docInputFile = new File(toFileFolder.toString()+File.separatorChar+docFileName);
		log.debug("########htmlOutputFile:"+toFileFolder.toString()+File.pathSeparator+htmFileName);
		/**
		 * 由fromFileInputStream构建输入文件
		 * */
		try {
			OutputStream os = new FileOutputStream(docInputFile);
			int bytesRead = 0;
			 byte[] buffer = new byte[1024 * 8];
			while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {
					os.write(buffer, 0, bytesRead);
			}

			os.close();
			fromFileInputStream.close();
		} catch (IOException e) {
			log.error(e.getMessage(), e);
		}

		OpenOfficeConnection connection = new SocketOpenOfficeConnection(soffice_host,Integer.parseInt(soffice_port));
		try {
			connection.connect();
		} catch (ConnectException e) {
			 System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");  
			 log.error(e.getMessage(), e);
		}
		// convert
		DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
		converter.convert(docInputFile, htmlOutputFile);
		connection.disconnect();
/*		File  htmlOutputFile_rn = new File
		(htmlOutputFile.getAbsolutePath().substring(0,htmlOutputFile.getAbsolutePath().lastIndexOf("."))+".htm");
		htmlOutputFile.renameTo(htmlOutputFile_rn);
		return htmlOutputFile_rn.getName();*/

		//转换完之后删除word文件
		docInputFile.delete();
		log.debug("删除上传文件:"+docInputFile.getName());
		return htmFileName;
	}

}

转http://aijava.cn/1939.html

而在前台展示可以使用html直接展示也可以使用openoffic转成pdf然后在用flexpaper(比如播放ppt)


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值