用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

ooP    -  云代码空间

——

java web结合flexpaper实现类百度文库的文档在线预览

2014-02-26|3153阅||

摘要:总体思路:页面发送查看请求——后台获取需要查看的文件——转换文件为pdf——转换pdf为swf——jsp页面进行swf文件的显示 说明:以下只是关键步骤和关键代码,从中逻辑需要自己组装。

1、下载并安装(记住安装路径,代码中需要用到

2、准备jar包

3、下载flexpaper,整理出以下文件放在项目中

4、office转pdf的代码
package com.hzh.energymonitoring.util;

import java.io.File;

import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;

import com.hzh.common.systemconfig.SystemConfigUtils;

/**
 * 这是一个工具类,主要是为了使Office2003-2007全部格式的文档
 * (.doc|.docx|.xls|.xlsx|.ppt|.pptx)转化为pdf文件
 */
public class OfficeToPDF {

	public static final String OFFICE_DOC = "doc";
	public static final String OFFICE_DOCX = "docx";
	public static final String OFFICE_XLS = "xls";
	public static final String OFFICE_XLSX = "xlsx";
	public static final String OFFICE_PPT = "ppt";
	public static final String OFFICE_PPTX = "pptx";
	public static final String OFFICE_TO_PDF = "pdf";

	/**
	 * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件<br>
	 * 
	 * @param inputFilePath
	 *            源文件路径,如:"e:/test.docx"
	 * @param outputFilePath
	 *            目标文件路径,如:"e:/test_docx.pdf"
	 * @return
	 */
	public static boolean openOfficeToPDF(String inputFilePath,
			String outputFilePath) {
		return office2pdf(inputFilePath, outputFilePath);
	}

	/**
	 * 获取OpenOffice.org 3的安装目录
	 * 
	 * @return OpenOffice.org 3的安装目录
	 */
	public static String getOfficeHome() {
		return SystemConfigUtils.getSystemConfigValue("OPENOFFICE_PATH");
	}

	/**
	 * 连接OpenOffice.org 并且启动OpenOffice.org
	 * 
	 * @return
	 */
	public static OfficeManager getOfficeManager() {
		DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
		// 获取OpenOffice.org 3的安装目录
		String officeHome = getOfficeHome();
		config.setOfficeHome(officeHome);
		// 启动OpenOffice的服务
		OfficeManager officeManager = config.buildOfficeManager();
		officeManager.start();
		return officeManager;
	}

	/**
	 * 转换文件
	 * 
	 * @param inputFile
	 * @param outputFilePath_end
	 * @param inputFilePath
	 * @param outputFilePath
	 * @param converter
	 */
	public static void converterFile(File inputFile, String outputFilePath_end,
			String inputFilePath, String outputFilePath,
			OfficeDocumentConverter converter) {
		File outputFile = new File(outputFilePath_end);
		// 假如目标路径不存在,则新建该路径
		if (!outputFile.getParentFile().exists()) {
			outputFile.getParentFile().mkdirs();
		}
		converter.convert(inputFile, outputFile);
	}

	/**
	 * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件
	 * 
	 * @param inputFilePath
	 *            源文件路径,如:"e:/test.docx"
	 * @param outputFilePath
	 *            目标文件路径,如:"e:/test_docx.pdf"
	 * @return
	 */
	public static boolean office2pdf(String inputFilePath, String outputFilePath) {
		boolean flag = false;
		OfficeManager officeManager = getOfficeManager();
		// 连接OpenOffice
		OfficeDocumentConverter converter = new OfficeDocumentConverter(
				officeManager);
		if (null != inputFilePath) {
			File inputFile = new File(inputFilePath);
			// 判断目标文件路径是否为空
			if (null == outputFilePath) {
				// 转换后的文件路径
				String outputFilePath_end = getOutputFilePath(inputFilePath);
				if (inputFile.exists()) {// 找不到源文件, 则返回
					converterFile(inputFile, outputFilePath_end, inputFilePath,
							outputFilePath, converter);
					flag = true;
				}
			} else {
				if (inputFile.exists()) {// 找不到源文件, 则返回
					converterFile(inputFile, outputFilePath, inputFilePath,
							outputFilePath, converter);
					flag = true;
				}
			}
			officeManager.stop();
		} else {
			flag = false;
		}
		return flag;
	}

	/**
	 * 获取输出文件
	 * 
	 * @param inputFilePath
	 * @return
	 */
	public static String getOutputFilePath(String inputFilePath) {
		String outputFilePath = inputFilePath.replaceAll("."
				+ getPostfix(inputFilePath), ".pdf");
		return outputFilePath;
	}

	/**
	 * 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"
	 * 
	 * @param inputFilePath
	 * @return
	 */
	public static String getPostfix(String inputFilePath) {
		return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
	}

}
5、pdf转swf的代码
package com.hzh.energymonitoring.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import com.hzh.common.systemconfig.SystemConfigUtils;

/**
 * PDF转SWF工具
 */
public class PdfToSwf {

	/**
	 * pdf文件后缀名
	 */
	public static final String FILE_NAME_OF_PDF = "pdf";
	/**
	 * swf文件后缀名
	 */
	public static final String FILE_NAME_OF_SWF = "swf";

	/**
	 * 获得文件的路径
	 * 
	 * @param file
	 *            文件的路径 ,如:"c:/test/test.swf"
	 * @return 文件的路径
	 */
	public static String getFilePath(String file) {
		String result = file.substring(0, file.lastIndexOf("/"));
		if (file.substring(2, 3) == "/") {
			result = file.substring(0, file.lastIndexOf("/"));
		} else if (file.substring(2, 3) == "\\") {
			result = file.substring(0, file.lastIndexOf("\\"));
		}
		return result;
	}

	/**
	 * 新建一个目录
	 * 
	 * @param folderPath
	 *            新建目录的路径 如:"c:\\newFolder"
	 */
	public static void newFolder(String folderPath) {
		try {
			File myFolderPath = new File(folderPath.toString());
			if (!myFolderPath.exists()) {
				myFolderPath.mkdir();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 转化pdf为swf文件
	 * 
	 * @param sourcePath
	 *            pdf文件路径 ,如:"c:/hello.pdf"
	 * @param destPath
	 *            swf文件路径,如:"c:/test/test.swf"
	 * @return 正常情况下返回:0,失败情况返回:1
	 * @throws IOException
	 */
	public static int convertPDF2SWF(String sourcePath, String destPath)
			throws IOException {
		// 如果目标文件的路径是新的,则新建路径
		newFolder(getFilePath(destPath));

		// 源文件不存在则返回
		File source = new File(sourcePath);
		if (!source.exists()) {
			return 0;
		}

		String path = SystemConfigUtils.getSystemConfigValue("SWFTOOLS_PATH");

		// 调用pdf2swf命令进行转换
		String command = path
				+ "/pdf2swf.exe  -t \""
				+ sourcePath
				+ "\" -o  \""
				+ destPath
				+ "\" -s flashversion=9 -s languagedir=D:\\xpdf\\xpdf-chinese-simplified ";
		// 调用外部程序
		Process process = Runtime.getRuntime().exec(command);
		final InputStream is1 = process.getInputStream();
		new Thread(new Runnable() {
			public void run() {
				BufferedReader br = new BufferedReader(new InputStreamReader(
						is1));
				try {
					while (br.readLine() != null)
						;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}).start(); // 启动单独的线程来清空process.getInputStream()的缓冲区
		InputStream is2 = process.getErrorStream();
		BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
		// 保存输出结果流
		StringBuilder buf = new StringBuilder();
		String line = null;
		while ((line = br2.readLine()) != null)
			// 循环等待ffmpeg进程结束
			buf.append(line);
		while (br2.readLine() != null)
			;
		try {
			process.waitFor();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return process.exitValue();
	}

	/**
	 * pdf文件转换为swf文件操作
	 * 
	 * @param sourcePath
	 *            pdf文件路径 ,如:"c:/hello.pdf"
	 * @param destPath
	 *            swf文件路径,如:"c:/test/test.swf"
	 * @return
	 */
	public static boolean pdf2swf(String sourcePath, String destPath) {
		boolean flag = false;
		try {
			PdfToSwf.convertPDF2SWF(sourcePath, destPath);
			flag = true;
		} catch (Exception ex) {
			flag = false;
		}
		return flag;
	}

}
6、JSP页面加载swf代码
<%@ page contentType="text/html; charset=utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>showWenKU</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script type="text/javascript"
	src="${pageContext.request.contextPath}/flexpaper/swfobject/swfobject.js"></script>
<script type="text/javascript"
	src="${pageContext.request.contextPath}/flexpaper/flexpaper.js"></script>

<script type="text/javascript">
            var swfVersionStr = "9.0.124";
            <!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->
            var xiSwfUrlStr = "${expressInstallSwf}";
            var flashvars = { 
                  SwfFile : escape("${pageContext.request.contextPath}/flexpaper/swf/test_1392283106730_1392283562352.swf?v1.4.0final"),
                  Scale : 0.8, //放大因子,是一个0以上的数(带小数 1 = 100%) 。
                  ZoomTransition : "easeOut",//光学变焦过渡,默认值是easeOut,可取值: easenone, easeout, linear, easeoutquad
                  ZoomTime : 0.5, //时间过渡让变焦达到新的放大因子,值为0或更大的数。
                  ZoomInterval : 0.1,//区间的滑动缩放。放大因子缺省值是0.1。如同在工具栏上使用滑动条按钮的效果。
                  FitPageOnLoad : true, //(布尔) 适合初始页大小(依高度而定)的装载页。如同在工具栏上使用fit-page按钮的效果。
                  FitWidthOnLoad : true, // (布尔)适合初始页宽度大小的装载页。如同在工具栏上使用fit-width按钮的效果。
                  PrintEnabled : true,   //是否支持打印
                  FullScreenAsMaxWindow :false,  //是否支持全屏
                  ProgressiveLoading : false,  //是否支持延迟加载
                  SearchMatchAll : true,//设置为true时,单击搜索所有符合条件的地方高亮显示
                  PrintToolsVisible : false,
                  ViewModeToolsVisible : true,//(布尔)显示或隐藏视图模式与工具栏
                  ZoomToolsVisible : true,//(布尔) 从工具栏显示或隐藏变焦工具
                  FullScreenVisible : true,//(布尔)以最大化方式打开一个新浏览器窗口。
                  NavToolsVisible : true,//(布尔)显示或隐藏导航工具
                  CursorToolsVisible : false,//(布尔) 显示或隐藏光标工具
                  SearchToolsVisible : true,
                  localeChain: "en_US" //语言
             };
             var params = {
                
                };
            params.quality = "high";
            params.bgcolor = "#ffffff";
            params.allowscriptaccess = "sameDomain";
            params.allowfullscreen = "true";
            var attributes = {};
            attributes.id = "FlexPaperViewer";
            attributes.name = "FlexPaperViewer";
            swfobject.embedSWF(
                "${pageContext.request.contextPath}/flexpaper/swf/FlexPaperViewer.swf", "flashContent", 
                "800", "532", 
                swfVersionStr, xiSwfUrlStr, 
                flashvars, params, attributes);
            swfobject.createCSS("#flashContent", "display:block;text-align:left;");
        </script>

</head>
<body>
	<div id="flashContent"></div>
</body>
</html>
页面展示效果如图:


顶 10踩 6收藏
文章评论
共1 条评论 1/1页
发表评论

个人资料

  • 昵称: ooP
  • 等级: 中级程序员
  • 积分: 260
  • 代码: 15 个
  • 文章: 1 篇
  • 随想: 0 条
  • 访问: 9 次
  • 关注

最新提问

    站长推荐