程序员疯子的博客-Code is Art, Code is Poetry!

JAVA实现类似百度文库在线浏览

前言:由于是个教育评比项目,需求要上传Excel,word,等 还要求在线浏览,本来刚参加工作一年,对我来说难度还是有的。查了好多资料发现网上的都千篇一律,真的头疼,而且时间也很短。但还是做出来了,写个博客,记录下
时间是 2014年6月28日23:24:23

研究阶段

发现网上大多都是一下几种实现方式

  • 1.Txt/Word/Excel/PPT=>PDF(OpenOffice+JodConverter)=>SWF(pdf2swf)=>FlexPaper浏览

  • 2.Txt/Word/Excel/PPT=>PDF(MSOffice+JACOB)=>SWF(pdf2swf)=>FlexPaper浏览

  • 3.Txt/Word/Excel/PPT=>SWF (FlashPaper)=> FlexPaper浏览

  • 4.Txt/Word/Excel/PPT=>SWF(print2flash)=> FlexPaper浏览

1,2两种实现方式相对比较复杂,需要先将其他类型转换为PDF类型,再转成SWF类型在容器中显示。所以先下后2种,先说说flashpaper吧,此款软件确实是转换格式的神器,可惜是收费的。不过可以试用30天,对于这种小型的可试用的软件,但不适合开发、再说说print2flash,这款软件是开源的,也能实现转换swf的功能,但是上网找了半天,关于它的代码资料很是匮乏。Java的更是凤毛麟角,无从下手,只好先晾着。鉴于经典案例及网上资料的丰富性,我最终还是用第一种的组合上了。

资料和工具准备:

工具

资料方面,大致搜索了百度文库和开源中国上的一些资料,其实都一样。感觉都是互相转载,不过前辈们已经为我们做了很多了,再次谢过各位分享的前辈。

项目源码:

ConvertServlet的servlet处理类代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package org.timothy.test.servlet;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
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;
public class ConvertServlet extends HttpServlet {
private File sourceFile; //转换源文件
private File pdfFile; //PDF目标文件
private File swfFile; //SWF目标文件
private Runtime r;
public void init() throws ServletException {
sourceFile = new File("G:\\tomcat6\\webapps\\readonline\\swfFile\\1.doc");
pdfFile = new File("G:\\tomcat6\\webapps\\readonline\\swfFile\\1.pdf");
swfFile = new File("G:\\tomcat6\\webapps\\readonline\\swfFile\\Paper.swf");
System.out.println("第一步:生成文件对象,准备转换");
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
//转换成pdf文件
if(sourceFile.exists()) {
if(!pdfFile.exists()) {
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
try {
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(sourceFile, pdfFile);
pdfFile.createNewFile();
connection.disconnect();
System.out.println("第二步:转换为PDF格式 路径" + pdfFile.getPath());
} catch (java.net.ConnectException e) {
e.printStackTrace();
System.out.println("OpenOffice服务未启动");
throw e;
} catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
e.printStackTrace();
System.out.println("读取文件失败");
throw e;
} catch (Exception e){
e.printStackTrace();
try {
throw e;
} catch (Exception e1) {
e1.printStackTrace();
}
}
} else {
System.out.println("已转换为PDF,无需再次转换");
}
} else {
System.out.println("要转换的文件不存在");
}
//转换成swf文件
r = Runtime.getRuntime();
new Thread(){
@Override
public void run() {
if(!swfFile.exists()){
if(pdfFile.exists()) {
try {
System.out.println("E:/SWFTools/pdf2swf.exe " + pdfFile.getPath() +
" -o " + swfFile.getPath() + " -T 9");
Process p = r.exec("E:/SWFTools/pdf2swf.exe " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9");
p.waitFor();
swfFile.createNewFile();
System.out.println("第三步:转换为SWF格式 路径:" + swfFile.getPath());
System.out.println("第si步:转换为SWF格式mingcheng:" + swfFile.getName());
// if(pdfFile.exists()) {
// pdfFile.delete();
// }
} catch (Exception e) {
e.printStackTrace();
try {
throw e;
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
} else {
System.out.println("PDF文件不存在,无法转换");
}
} else {
System.out.println("已经转为SWF文件,无需再次转换");
}
}
}.start();
HttpSession session = request.getSession();
session.setAttribute("fileName", swfFile.getName());
System.out.println("我是测试:"+session.getAttribute("fileName"));
response.sendRedirect(request.getContextPath()+"/readFile.jsp");
}
}

读取文件页面Readfile.Jsp代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<%@ 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>
<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:\/\/192.168.0.13:8080\/readonline\/swfFile\/<%=request.getAttribute("fileName")%>'),
Scale : 0.6,
ZoomTransition : 'easeOut',
ZoomTime : 0.5,
ZoomInterval : 0.2,
FitPageOnLoad : true,
FitWidthOnLoad : false,
PrintEnabled : true,
FullScreenAsMaxWindow : false,
ProgressiveLoading : true,
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>

用官方的Paper.swf作为测试,只需要将SwfFile的地址改掉。
显示效果如下:
image

总结:终于熬夜研究的差不多了,就等明天去公司了,周末也加班,感叹一下,毕竟还是菜鸟努力加油。。。反正基本差不多了,就差放进项目优化了!就这样吧。那些参数有时间在整理咯、、

Fengzijk wechat
欢迎您扫一扫上面的微信公众号,订阅我的公众号!
您的支持将鼓励我继续创作