学习Java模拟实现百度文档在线浏览

这个思路是我参考网上而来,代码是我实现。

采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper浏览。

ok,

A、下载OpenOffice (转换资源文件)

B、下载JodConverter(调用OpenOffice)

C、下载Swftools(Pdf2Swf)

D、下载 FlexPaper(浏览swf文件)

下载之后,先别急安装,请看完这篇博文

1、先看我们的MyEclipse工程结构

2、将我们下载下来的jodconverter-2.2.2.zip解压之后将所有的jar文件拷贝到baiduDoc的lib下面去

3、在WebRoot下面新建FlexPaper文件夹,将解压后的FlexPaper全部拷贝到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.imageio.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中的代码,不会你可以参考这里

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

7、到这里就完成,需要注意的是:

(1)、swftools-2013-04-09-1007.exe文件安装路径不要太深,不然Java调用外部命令不能执行

(2)、

   

    2.1、红色1标记路径不能错,我就犯这个错误了       

    2.2、红色标记2还可以写http://127.0.0.1:8080/baiduDoc/reader/...

(3)、启动OpenOffice的命令,不是直接双击启动的。官网启动方式,使用cd命令打开安装目录!

安装完openoffice后

A.安装服务

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

这一步你可以看你的OpenOffice安装哪里

执行

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

B.查看是否安装成功

   2.1查看端口对应的pid

   netstat -ano|findstr "8100"

   2.2查看pid对应的服务程序名

   tasklist|findstr "ipd值"

效果图示:

以上就是本文的全部内容,希望对大家的学习有所帮助。

以上是 学习Java模拟实现百度文档在线浏览 的全部内容, 来源链接: utcz.com/p/208865.html

回到顶部