加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用FlashPaper 实现JSP在线阅读

发布时间:2020-12-15 17:34:58 所属栏目:百科 来源:网络整理
导读:FlashPaper 是Macromedia推出的一款电子文档类工具,通过使用本程序,你可以将需要的文档通过简单的设置转换为SWF格式的Flash动画,原文档的排版样式和字体显示不会受到影响,这样做的好处是不论对方的平台和语言版本是什么,都可以自由的观看你所制作的电子

FlashPaper 是Macromedia推出的一款电子文档类工具,通过使用本程序,你可以将需要的文档通过简单的设置转换为SWF格式的Flash动画,原文档的排版样式和字体显示不会受到影响,这样做的好处是不论对方的平台和语言版本是什么,都可以自由的观看你所制作的电子文档动画,并可以进行自由的放大,缩小和打印,翻页等操作,对文档的传播非常有好处,而且由于Flash动画的普及性和强大的可调节性。

?

这里使用Struts2进行文件上传,后台处理转换,并将文件存放到工程目录

前台使用swfobject_2_2显示Flash文件

首先请安装FlashPaper,其次把swfobject_2_2.zip解压然后把expressInstall.swf和swfobject.js拷贝到工程的根目录(仅仅是为了测试)

编写文件上传页面:

Java代码??

收藏代码

  1. <%@?page?language="java"?contentType="text/html;?charset=utf-8"??
  2. ????pageEncoding="utf-8"%>??
  3. <%@?taglib?prefix="s"?uri="/struts-tags"%>??
  4. <html>??
  5. ????<head>??
  6. ????????<title>上传文件??关注新浪微博:@java小强</title>??
  7. ????</head>??
  8. ????<body>??
  9. ????????<s:form?action="upload"?method="post"?enctype="multipart/form-data">??
  10. ????????????<s:file?name="file"?label="file?name"></s:file>??
  11. ????????????<s:submit?label="ok"?onClick=""?/>??
  12. ????????</s:form>??
  13. ????</body>??
  14. </html>??

注意这里使用了Struts2的标签

Action需要处理上传,然后判断上传文件的类型,调用转换获得转换后文件的路径,并把路径传递到前台:

package?com.xidian.cui.action;??
  • import?java.io.File;??
  • import?javax.servlet.http.HttpServletRequest;??
  • import?org.apache.struts2.ServletActionContext;??
  • import?com.opensymphony.xwork2.ActionSupport;??
  • import?com.xidian.cui.util.FlashPaper;??
  • /**?
  • ?*?@说明?上传执行?
  • ?*?@author?cuisuqiang?
  • ?*?@version?1.0?
  • ?*?@since??关注新浪微博:@java小强?
  • ?*/??
  • @SuppressWarnings("serial")??
  • public?class?FileUploadAction?extends?ActionSupport?{??
  • ????private?File?file;??
  • private?String?fileFileName;??
  • private?String?fileContentType;??
  • ??????
  • ????@SuppressWarnings("deprecation")??
  • public?String?execute()?{??
  • ????????HttpServletRequest?request?=?ServletActionContext.getRequest();??
  • ????????String?tempName?=?FlashPaper.converter(file,?fileContentType,fileFileName,?request);??
  • ????????//?把转换的路径放到请求中??
  • ????????request.setAttribute("tempName",?tempName);??
  • ????????return?"suc";??
  • ????}??
  • ?????????*?获得不同文件的后缀?
  • ?????*/??
  • void?setFileContentType(String?fileContentType)?{??
  • if?(fileContentType.contains("msword"))?{??
  • ????????????this.fileContentType?=?".doc";??
  • ????????}?else?if?(fileContentType.contains("excel"))?{??
  • this.fileContentType?=?".xls";??
  • if?(fileContentType.contains("pdf"))?{??
  • this.fileContentType?=?".pdf";??
  • if?(fileContentType.contains("powerpoint"))?{??
  • this.fileContentType?=?".ppt";??
  • else?{??
  • ????????}??
  • public?File?getFile()?{??
  • return?file;??
  • void?setFile(File?file)?{??
  • this.file?=?file;??
  • public?String?getFileContentType()?{??
  • return?fileContentType;??
  • public?String?getFileFileName()?{??
  • return?fileFileName;??
  • void?setFileFileName(String?fileFileName)?{??
  • this.fileFileName?=?fileFileName;??
  • }??
  • 然后是转换类,因为我做的时候发现如果路径过于复杂很容易出错,所以我做的时候先把上传的文件拷贝到一个临时文件夹,然后转换,转换后的SWF文件也放到该文件夹,最后拷贝到自己指定的位置。这里指定的位置就是工程目录下,为的是方便显示。

    然后我做了一个判断,如果已经转换了该文件,就直接显示。注意这样是不合理的,因为用户可能会上传文件名称一样的文件。但是我这里只是作一个引导,你可以根据自己的业务去记录转换的文件,这样同一个文件转换后不必每次都重复转换,这样做是非常耗时也耗费服务器性能的。

    指定文件夹内存放了我们的文件,但是他会非常占用磁盘空间,这里为了测试我没有删除转换后的临时文件,但是在实际使用中,我们应该在后台定义一个定时器,来删除长期没有使用的文件,并且在每次转换前判断这个临时文件夹如果过大的话,就直接清空临时文件夹。

    关于定时器的使用:http://cuisuqiang.iteye.com/admin/blogs/1320255

    来看转换的代码:

    package?com.xidian.cui.util;??
  • import?java.io.BufferedInputStream;??
  • import?java.io.BufferedOutputStream;??
  • import?java.io.FileInputStream;??
  • import?java.io.FileOutputStream;??
  • import?java.io.InputStream;??
  • import?java.io.OutputStream;??
  • import?java.text.SimpleDateFormat;??
  • import?java.util.Date;??
  • ?*?@说明?将文件转为SWF?
  • class?FlashPaper?extends?Thread?{??
  • ??
  • static?String?converter(File?srcFile,String?fileContentType,String?fileFileName,?HttpServletRequest?request)?{??
  • ????????String?uploadPath?=?request.getRealPath("/");??
  • ????????SimpleDateFormat?format?=?new?SimpleDateFormat("yyyy-MM-dd");??
  • ????????String?dataFile?=?format.format(new?Date());??
  • ????????uploadPath?+=?"swfTemp"?+?dataFile;??
  • ????????File?f?=?new?File(uploadPath);??
  • if?(!f.exists()?&&?!f.isDirectory())?{??
  • ????????????f.mkdirs();??
  • //?SWF?放到服务器下??
  • ????????String?filename?=?uploadPath?+?""?+?fileFileName?+?".swf";??
  • ????????File?file?=?new?File(filename);??
  • if(file.exists()){??
  • return?"swfTemp/"?+?dataFile?+?"/"?+?fileFileName?+?".swf";??
  • //?要转换的文件?放到临时目录??
  • ????????String?docTempFileName?=?"C:"?+?String.valueOf(new?Date().getTime())?+?fileContentType;??
  • ????????File?docTempFile?=?new?File(docTempFileName);??
  • ????????copyFile(srcFile,?docTempFile);??
  • //?转换后的文件?放到临时目录??
  • ????????String?swfTempFileName?=?"C:"?+?String.valueOf(new?Date().getTime())?+?".swf";??
  • ????????File?swfTempFile?=?new?File(swfTempFileName);??
  • try?{??
  • ????????????String?converter?=?"C:Program?FilesMacromediaFlashPaper?2FlashPrinter.exe?-o?"?+?swfTempFile.getAbsolutePath()?+?"?"?+?docTempFile.getAbsolutePath();??
  • ????????????Runtime?pro?=?Runtime.getRuntime();??
  • ????????????pro.exec(converter);??
  • ????????????//?注意,为了测试,这里只要没有转换工程,就一直等待??
  • while(true){??
  • ????????????????if(!swfTempFile.exists()){??
  • ????????????????????Thread.sleep(1000);??
  • ????????????????????continue;??
  • ????????????????}??
  • ????????????????copyFile(swfTempFile,?file);??
  • ????????????????//?删除临时文件??
  • ????????????????swfTempFile.delete();??
  • ????????????????docTempFile.delete();??
  • ????????????}??
  • catch?(Exception?e)?{??
  • ????????????System.out.println("执行失败");??
  • ????????????e.printStackTrace();??
  • return?"";??
  • private?static?final?int?BUFFER_SIZE?=?102400;??
  • void?copyFile(File?src,?File?dir)?{??
  • ????????????InputStream?input?=?null;??
  • ????????????OutputStream?output?=? ????????????????input?=?new?BufferedInputStream(new?FileInputStream(src),??
  • ????????????????????????BUFFER_SIZE);??
  • ????????????????output?=?new?BufferedOutputStream(new?FileOutputStream(dir),85); font-weight:bold">byte[]?buffer?=?new?byte[BUFFER_SIZE];??
  • while?(input.read(buffer)?>?0)?{??
  • ????????????????????output.write(buffer);??
  • ????????????}? ????????????????e.printStackTrace();??
  • finally?{??
  • if?(null?!=?input)?{??
  • ????????????????????input.close();??
  • null?!=?output)?{??
  • ????????????????????output.close();??
  • 跳转到页面显示SWF文件即可:

    <%@?page?language="java"?import="java.util.*"?pageEncoding="UTF-8"%>??
  • <%??
  • String?path?=?request.getContextPath();??
  • String?basePath?=?request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";??
  • %>??
  • ??<head>??
  • ????<base?href="<%=basePath%>">??
  • ????<title>在线阅读??关注新浪微博: ????<script?type="text/javascript"?src="swfobject.js"></script>??
  • ????<script?type="text/javascript">??
  • ????????swfobject.registerObject("myId",?"9.0.0",?"expressInstall.swf");??
  • ????</script>??
  • ??</head>??
  • ??<body>??
  • ????????<div>???
  • ????????????<object?id="myId"?classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"?width="100%"?height="100%">??
  • ????????????????<param?name="movie"?value="${tempName?}"?/>??
  • ????????????????<!--[if?!IE]>-->??
  • ????????????????<object?type="application/x-shockwave-flash"?data="${tempName?}"?width="300"?height="120">??
  • ????????????????<!--<![endif]-->??
  • ????????????????<div>??
  • ????????????????????<h1>Alternative?content</h1>??
  • ????????????????????<p><a?href="http://www.adobe.com/go/getflashplayer"><img?src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif"?alt="Get?Adobe?Flash?player"?/></a></p>??
  • ????????????????</div>??
  • ????????????????</object>??
  • ????????????</object>??
  • ????????</div>??
  • ??</body>??
  • </html> ?
  • (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读