Java利用flexpaper插件实现文档在线预览

本文档介绍了如何使用Java结合flexpaper插件来实现文档的在线预览功能。提供了Web项目的下载链接以及相关工具类的获取地址,帮助开发者快速搭建文档预览系统。
摘要由CSDN通过智能技术生成

使用在线预览时,需要先下载FlexPaper+swftools+jodconverter+OpenOffice四大工具。

搭建环境
1.先安装Swftools(pdf2swf)
Swftools(pdf2swf)安装路径:C:\Program Files (x86)\SWFTools
2.安装OpenOffice
OpenOffice安装路径:C:\Program Files (x86)\OpenOffice.org 3
  *****启动openoffice服务:********
	在cmd命令下,cd opeonofiice的安装路径/program 如:cd c:\program files\openoffice.org 3\program
        再输入:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
        
3.新建一个项目webProject
 1.在lib下需要加入JodConverter压缩包中lib目录下的jar包,全部复制进去即可。
 2.先webroot下新建一个flexpaper文件夹,将下载的FlexPaper_1.4.5_flash解压缩后,文件夹下所有文件复制到flexpaper中。
 3.将安装好的swftools-0.9.2,安装目录中的pdf2swf.exe 复制到项目附件目录中。(本程序是与上传附件在一个文件夹下)
 

#############注意##################
1.该项目第一次运行时,因为程序中有自动开启OpenOffice服务的代码,所有第一次无法实现在线预览,控制台报“OpenOffice监听器异常"
,再次运行该异常即消失。
如果用户希望该异常不存在,则可以在doc环境下先手动开启OpenOffice服务。
2.该项目是通过上传一个文件然后再进行预览的。而且上传文件类型只能是.doc/.docx/.xls/.xlsx/.pdf格式的。详情可参照代码。
3.用户手动更改文件类型,预览异常。例如:文件类型本身是.docx,用户手动更改为.doc,预览异常。其他不允许的格式更不用说。

4.另外附一个FlexPaper阅读器开发手册,里面有各个参数的详细解释,详细大家一看就能明白的。

~~~~~~~~~~~~~~~~~~~~~~~
这是以上我开发在线预览时的一些总结。感谢前辈们的开源精神奉献,我才能顺利完成,所以让我们大家将开源精神一直延续下去吧!谢谢!


package com.function.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.util.ResourceBundle;

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;

/**
 * 将文件转成swf格式
 * 
 * @author Administrator
 * 
 */
public class ConvertSwf {

	/**
	 * 入口方法-通过此方法转换文件至swf格式
	 * @param filePath	上传文件所在文件夹的绝对路径
	 * @param dirName	文件夹名称
	 * @param fileName	文件名称
	 * @return			生成swf文件名
	 */
	public String beginConvert(String filePath, String dirName, String fileName) {
		final String DOC = ".doc";
		final String DOCX = ".docx";
		final String XLS = ".xls";
		final String XLSX = ".xlsx";
		final String PDF = ".pdf";
		final String SWF = ".swf";
		final String TOOL = "pdf2swf.exe";//转换工具
		String outFile = "";
		String fileNameOnly = "";
		String fileExt = "";
		if (null != fileName && fileName.indexOf(".") > 0) {
			int index = fileName.indexOf(".");
			fileNameOnly = fileName.substring(0, index);//文件名
			fileExt = fileName.substring(index).toLowerCase();//文件后缀
		}
		String inputFile = filePath + File.separator + fileName;//上传文件的全路径	
		String outputFile = "";

		//如果是office文档,先转为pdf文件
		if (fileExt.equals(DOC) || fileExt.equals(DOCX) || fileExt.equals(XLS)
				|| fileExt.equals(XLSX)) {
			outputFile = filePath + File.separator + fileNameOnly + PDF;
			office2PDF(inputFile, outputFile);//源文件,pdf文件
			inputFile = outputFile;
			fileExt = PDF;
		}

		if (fileExt.equals(PDF)) {
			String toolFile = filePath + File.separator + TOOL;//转化工具
			outputFile = filePath + File.separator + fileNameOnly + SWF;
			convertPdf2Swf(inputFile, outputFile, toolFile);
			outFile = outputFile;
		}
		return outFile;//返回一个文件路径
	}

	/**
	 * 将pdf文件转换成swf文件
	 * @param sourceFile pdf文件绝对路径
	 * @param outFile	 swf文件绝对路径
	 * @param toolFile	 转换工具绝对路径
	 */
	private void convertPdf2Swf(String sourceFile, String outFile,
			String toolFile) {
		//String command="C:/Program Files (x86)/SWFTools/pdf2swf.exe "+" -o "+swfFile.getPath()+ " -s flashversion=9 "+pdfFile.getPath()+"";
		String command = toolFile + " \"" + sourceFile + "\" -o  \"" + outFile
				+ "\" -s flashversion=9 ";
		try {
			Process process = Runtime.getRuntime().exec(command);
			//process.waitFor();//导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。
			
			//查看是否转换成功
			//File swfFile=new File(outFile);
			//swfFile.createNewFile();
			
			System.out.println(loadStream(process.getInputStream()));
			System.err.println(loadStream(process.getErrorStream()));
			System.out.println(loadStream(process.getInputStream()));
			System.out.println("###--Msg: swf 转换成功");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * office文档转pdf文件
	 * @param sourceFile	office文档绝对路径
	 * @param destFile		pdf文件绝对路径
	 * @return
	 */
	private int office2PDF(String sourceFile, String destFile) {
		ResourceBundle rb = ResourceBundle.getBundle("OpenOfficeService");
		String OpenOffice_HOME = rb.getString("OO_HOME");
		String host_Str = rb.getString("oo_host");
		String port_Str = rb.getString("oo_port");
		try {
			File inputFile = new File(sourceFile);
			if (!inputFile.exists()) {
				return -1; // 找不到源文件 
			}
			// 如果目标路径不存在, 则新建该路径  
			File outputFile = new File(destFile);
			if (!outputFile.getParentFile().exists()) {
				outputFile.getParentFile().mkdirs();
			}
			// 启动OpenOffice的服务  
			String command = OpenOffice_HOME
					+ "/program/soffice.exe -headless -accept=\"socket,host="
					+ host_Str + ",port=" + port_Str + ";urp;\"";
			//启动OpenOffice服务命令:
			//soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
			
			System.out.println("###\n" + command);
			Process pro = Runtime.getRuntime().exec(command);
			// 连接openoffice服务
			OpenOfficeConnection connection = new SocketOpenOfficeConnection(
					host_Str, Integer.parseInt(port_Str));
			connection.connect();
			// 转换 
			DocumentConverter converter = new OpenOfficeDocumentConverter(
					connection);
			converter.convert(inputFile, outputFile);//(officeFile, pdfFile);
			
			//查看是否pdf创建成功
			//outputFile.createNewFile();
			
			// 关闭连接和服务
			connection.disconnect();
			pro.destroy();

			return 0;
		} catch (FileNotFoundException e) {
			System.out.println("文件未找到!");
			e.printStackTrace();
			return -1;
		} catch (ConnectException e) {
			System.out.println("OpenOffice服务监听异常!");
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return 1;
		//0转换成功 -1找不到office源文件 
	}
	
	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);
		}
		return buffer.toString();
	}

}

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <title>在线阅读</title>
		<style type="text/css" media="screen">
		  html,body{height:100%;}
		  body{margin:0;padding:0;overflow:auto;}
		  #flashContent{display:none;}
		</style>	    
	    <script type="text/javascript"src="flexpaper/js/flexpaper_flash_debug.js"></script>
		<script type="text/javascript"src="flexpaper/js/jquery.js"></script>
		<script type="text/javascript"src="flexpaper/js/flexpaper_flash.js"></script>
  </head>
  
  <body>
		要加载的文件:<%=(String)(session.getAttribute("swfPath"))%>
		<div style="position:absolute;left:200px;top:10px;">
		<center><a id="viewerPlaceHolder"style="width:1000px;height:800px;display:block">努力加载中............</a></center>
		<script type="text/javascript">
		
	        $(document).ready(function(){
					var fp = new FlexPaperViewer(	
						'flexpaper/FlexPaperViewer',
						'viewerPlaceHolder', { config : {
						 SwfFile : escape('http://localhost:9090/readonline0509/uploadFile/<%=(String)(session.getAttribute("swfPath"))%>'),
						 Scale : 1, //缩放比例
						 ZoomTransition : 'easeOut',
						 ZoomTime : 0.5,
						 ZoomInterval : 0.2,
						 FitPageOnLoad : true,//加载后适合高度 
						 FitWidthOnLoad : true,//加载后适合宽度  
						 PrintEnabled : true,//是否支持打印  
						 FullScreenAsMaxWindow : true,//是否支持全屏  
						 ProgressiveLoading : false,//是否延迟加载  
						 MinZoomSize : 0.2,
						 MaxZoomSize : 5,
						 SearchMatchAll : false,
						 InitViewMode : 'Portrait',
						
						 ViewModeToolsVisible : true,
						 ZoomToolsVisible : true,
						 NavToolsVisible : true,
						 CursorToolsVisible : true,
						 SearchToolsVisible : true,
						
						 localeChain: 'zh_CN',//语言 
						 }});
	        });
			
	</script>
		


	</div>


  </body>
</html>


以上只是一个简单的文件描述,大家可以选择下载该web项目,web项目下载地址:http://download.csdn.net/detail/lanqibaoer/5355561Web项目已上传,点击进去,可以选择下载

所需工具类:http://download.csdn.net/detail/lanqibaoer/5355587



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值