Java模擬實現百度文檔在線瀏覽


Java模擬實現百度文檔在線瀏覽


這個思路是我參考網上而來,代碼是我實現。

採用Apache下面的OpenOffice將資源文件轉化爲pdf文件,然後將pdf文件轉化爲swf文件,用FlexPaper瀏覽。

ok,

A、下載OpenOffice (轉換資源文件)

B、下載JodConverter(調用OpenOffice)

C、下載Swftools(Pdf2Swf)

D、下載 FlexPaper(瀏覽swf文件)


這裏我已經全部下載好了,大家只需要下載:http://down.51cto.com/data/1980603


下載之後,先別急安裝,請看完這篇博文


1、先看我們的MyEclipse工程結構

wKiom1TPOomBqJi9AAI16KIMH8Y013.jpg


2、

將我們下載下來的wKiom1TPOwCAE5YQAAAZW7nJ3Nk933.jpg解壓之後將所有的jar文件拷貝到baiduDoclib下面去

wKioL1TPPA2was0bAAEC_rTHC-k842.jpg


3、  WebRoot下面新建wKioL1TPPFKQcG8VAAAO_BfzbDc134.jpg文件夾,將解壓後的wKiom1TPO5Piigy_AAAg5uWVZqM672.jpg全部拷貝到FlexPaper中去


4、新建BaiDuServlet.java文件


package com.baidu.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;

import javax.p_w_picpathio.stream.FileImageInputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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;

/**
 * @Author:NuoYan
 * @Date:2015-2-2 下午2:24:58 
 * TODO: 1、第一步,首先獲取到需要查看的文件
 *       2、第二部,將獲取的文件(doc,xls,txt,ppt,03/07版本轉化爲PDF),這一步需要調用OpenOffice
 *       3、第三部,將資源文件轉換好的PDF文件轉換爲swf文件,使用FlexPaperViewer.swf進行瀏覽查看
 */
public class BaiDuServlet extends HttpServlet {
	private File sourceFile;// 要轉化的源文件
	private File pdfFile;// pdf中間文件對象
	private File swfFile;// swf目標文件對象
	private String filePath;// 用來保存文件路徑
	private String fileName;// 不包括後綴名的文件名

	public File getSourceFile() {
		return sourceFile;
	}

	public void setSourceFile(File sourceFile) {
		this.sourceFile = sourceFile;
	}

	public File getPdfFile() {
		return pdfFile;
	}

	public void setPdfFile(File pdfFile) {
		this.pdfFile = pdfFile;
	}

	public File getSwfFile() {
		return swfFile;
	}

	public void setSwfFile(File swfFile) {
		this.swfFile = swfFile;
	}

	public String getFilePath() {
		return filePath;
	}

	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String saveFileName = request.getParameter("savFile");
		System.out.println(saveFileName);
		String webPath = request.getRealPath("/");
		filePath = webPath + "reader\\" + saveFileName;
		fileName = filePath.substring(0, filePath.lastIndexOf("."));
		// 創建三個文件對象
		sourceFile = new File(filePath);
		pdfFile = new File(fileName + ".pdf");
		swfFile = new File(fileName + ".swf");
		System.out.println(pdfFile);
		System.out.println(swfFile);
		// 1、將源文件轉化爲pdf格式文件
		src2pdf();
		try {
			// 2、將pdf文件轉化爲swf文件
			pdf2swf();
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 將轉化好的文件綁定到session上去
		request.getSession().setAttribute("swfName", swfFile.getName());
		System.out.println(swfFile.getName());
		// 重定向到預覽頁面
		response.sendRedirect(request.getContextPath() + "/reader/baseFile.jsp");
	}

	/**
	 * @Author:NuoYan
	 * @Date:2015-2-2 下午2:28:22 TODO://源文件轉化爲PDF文件
	 */
	private void src2pdf() {
		if (sourceFile.exists()) {
			// 如果不存在,需要轉份爲PDF文件
			if (!pdfFile.exists()) {
				// 啓用OpenOffice提供的轉化服務
				OpenOfficeConnection conn = new SocketOpenOfficeConnection(8100);
				// 連接OpenOffice服務器
				try {
					conn.connect();
					// 建立文件轉換器對象
					DocumentConverter converter = new OpenOfficeDocumentConverter(
							conn);
					converter.convert(sourceFile, pdfFile);
					// 斷開鏈接
					conn.disconnect();
					System.out.println("轉換成功");
				} catch (ConnectException e) {
					e.printStackTrace();
				}
			} else {
				System.out.println("已經存在PDF文件,不需要在轉換!!");
			}
		} else {
			System.out.println("文件路徑不存在!!!");
		}

	}

	/**
	 * @Author:NuoYan
	 * @Date:2015-2-2 下午2:28:32
	 * @throws Exception
	 * TODO:PDF轉化爲SWF文件
	 */
	private void pdf2swf() throws Exception {
		if (!swfFile.exists()) {
			if (pdfFile.exists()) {
				String command = "C:\\Pdf2swf\\pdf2swf.exe "
						+ pdfFile.getPath() + " -o " + swfFile.getPath()
						+ " -T 9";
				System.out.println("轉換命令:" + command);
				// Java調用外部命令,執行pdf轉化爲swf
				Runtime r = Runtime.getRuntime();
				Process p = r.exec(command);
				System.out.println(loadStream(p.getInputStream()));
				System.out.println("swf文件轉份成功!!!");
				System.out.println(swfFile.getPath());
			} else {
				System.out.println("不存在PDF文件");
			}
		}

	}
	
	private static String loadStream(InputStream in) throws Exception {
		int len = 0;
		in = new BufferedInputStream(in);
		StringBuffer buffer = new StringBuffer();
		while ((len = in.read()) != -1) {
			buffer.append((char) len);
		}
		return buffer.toString();
	}

}


5、修改index.jsp


<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>百度文庫在線預覽</title>
   <meta http-equiv="pragma" content="no-cache">
   <meta http-equiv="cache-control" content="no-cache">
   <meta http-equiv="expires" content="0">    
   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
   <meta http-equiv="description" content="This is my page">
  </head>
  <body>
   <a href="<%=request.getContextPath()%>/BaiDuServlet?savFile=1234.xls">在線預覽</a>
  </body>
</html>


6、編寫baseFile.jsp文件


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>在線閱讀</title>
<script type="text/javascript" src="../FlexPaper/js/flexpaper_flash.js"></script>
<style type="text/css">
html,body{height: 100%;}
body {
	margin: 0;padding: 0;overflow: auto;
}
#flashContent { display:none; }
</style>
</head>
<body>
<div style="position:absolute;left:10px;top:10px;">
	        <a id="viewerPlaceHolder" style="width:1000px;height:480px;display:block"></a>
	        <script type="text/javascript"> 
				var fp = new FlexPaperViewer(	
						 '../FlexPaper/FlexPaperViewer',
						 'viewerPlaceHolder', { config : {
						 SwfFile : escape('../reader/<%=(String)session.getAttribute("swfName")%>'),
						 Scale : 0.6, 
						 ZoomTransition : 'easeOut',
						 ZoomTime : 0.5,
						 ZoomInterval : 0.2,
						 FitPageOnLoad : true,
						 FitWidthOnLoad : false,
						 FullScreenAsMaxWindow : false,
						 ProgressiveLoading : false,
						 MinZoomSize : 0.2,
						 MaxZoomSize : 5,
						 SearchMatchAll : false,
						 InitViewMode : 'Portrait',
						 PrintPaperAsBitmap : false,
						 
						 ViewModeToolsVisible : true,
						 ZoomToolsVisible : true,
						 NavToolsVisible : true,
						 CursorToolsVisible : true,
						 SearchToolsVisible : true,
  						
  						 localeChain: 'zh_CN'
						 }});
	        </script>
        </div>

</body>
</html>


注意baseFile.jsp中的代碼,不會你可以參考這裏


wKiom1TPPH6w-eXHAADBd6XYdeo117.jpg


/**************************************************************************************/


7、到這裏就完成,需要注意的是:

1、wKioL1TPPbDCQ7SOAAAj1OEioRA406.jpg文件安裝路徑不要太深,不然Java調用外部命令不能執行,我這裏是C盤下

wKioL1TPPdeTPZf0AAAk56wHaeA554.jpg


2、wKioL1TPPfzR23txAACPHt6wVzY664.jpg

    2.1、紅色1標記路徑不能錯,我就犯這個錯誤了        

    2.2、紅色標記2還可以寫http://127.0.0.1:8080/baiduDoc/reader/...


3、啓動OpenOffice的命令,不是直接雙擊啓動的。官網啓動方式,使用cd命令打開安裝目錄!

安裝完openoffice後

1.安裝服務

cd C:\Program Files (x86)\OpenOffice4\program

這一步你可以看你的OpenOffice安裝哪裏

執行

soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

2.查看是否安裝成功

   2.1查看端口對應的pid

   netstat -ano|findstr "8100"

   2.2查看pid對應的服務程序名

   tasklist|findstr "ipd值"


效果圖示:


wKiom1TQKE7xDqSxAAPNwcLtPA4361.jpg


源碼地址:


http://down.51cto.com/data/1980608


有問題留言,來找我吧!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章