最近项目需要在线预览功能,经过各方面的资料研究,可行的方案是swftools+FlexPaper,现把实现思路及碰到问题总结一下:
1、swftools-2013-04-09-1007.exe提供pdf转swf文件,供FlexPaper调用。
2、FlexPaper由开源变为商业化,新版本只提供前十页显示,购买后才能实现全功能,功能更强大,支持FLASH、HTML4、HTML5等模式,为免费实现在线预览功能,本项目在此使用此前的开源版本,但是自带水印,介意的化可考虑破解版,网上自寻。
3、本项目仅支持pdf上传预览,如扩展word上传,可考虑word转pdf在转swf。
4、FlexPaperViewer.swf和FlexPaperViewer.htm必须放在WebRoot根目录下才可以,这也是多次尝试之后得出的结论,网上的资料大致相同,但是根据步骤始终无法实现正常预览的原因。
5、服务器必须安装swftools,以保证上传文件时调用pdf转swf文件。
目录结构如下:
显示效果如下:
================华丽的分割线==========以下为代码==============
1、文件上传时调用:
// =================================PDF2SWF=============================================== String uploadDir = request.getSession().getServletContext().getRealPath("/"); String pdfPath = ""; if (list.size() > 0) { for (int i = 0; i < list.size(); i++) { DicWsjsFj wj = new DicWsjsFj(); wj.setMid(id); wj.setFjmc(list.get(i).get("name").toString()); wj.setPath(list.get(i).get("newname").toString()); wsjsDao.saveOrUpdateFj(wj); // =================================PDF2SWF=============================================== pdfPath = uploadDir.substring(0, uploadDir.length()-1) + list.get(i).get("newname").toString().replace("/", "\\"); PDF2SwfHelper.execPdfToSwf(pdfPath); // request.getSession().setAttribute("filePath", pdfPath); } }
2、PDF2SwfHelper.java
package com.zljy.oa.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class PDF2SwfHelper { public static void execPdfToSwf(String pdfPath) { String SWFPath = PropUtil.getProperties("SWFPath"); Process process = null; String cmd = "\"" + SWFPath + "\\pdf2swf.exe\" \"" + pdfPath + "\" -s flashversion=9 \"" + pdfPath + ".swf\""; System.out.println("cmd--->" + cmd); try { process = Runtime.getRuntime().exec(cmd);// 执行命令 System.out.print(loadStream(process.getInputStream())); System.err.print(loadStream(process.getErrorStream())); System.out.print(loadStream(process.getInputStream())); int result = process.waitFor(); if (result == 0) { try { // TODO: } catch (Exception e) { e.printStackTrace(); } } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("cmd over!"); } public static void main(String[] args){ try { //System.out.println(Runtime.getRuntime().exec("cmd /c start c://swf.bat")); System.out.println("11"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } execPdfToSwf("D:\\ActivitiTomcat\\webapps\\oa\\upload\\winPlan\\201503201530571522746426268764261.pdf"); } private static String loadStream(InputStream in) throws IOException { int ptr = 0; // 把InputStream字节流 替换为BufferedReader字符流 BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder buffer = new StringBuilder(); while ((ptr = reader.read()) != -1) { buffer.append((char) ptr); } return buffer.toString(); } }
3、前台页面
<a href="${pageContext.request.contextPath}/FlexPaperViewer.htm?filePath=${fn:substring(fj.path,1,fn:length(fj.path))}.swf">在线阅读(仅支持PDF格式)</a><br/>
4、 FlexPaperViewer.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- saved from url=(0014)about:internet --> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>在线阅读</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <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="js/swfobject/swfobject.js"></script> <script type="text/javascript" src="js/flexpaper_flash_debug.js"></script> <script type="text/javascript" src="js/jquery-1.8.0.min.js"></script> <script type="text/javascript"> <!-- For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. --> var swfVersionStr = "10.0.0"; <!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. --> var xiSwfUrlStr = "playerProductInstall.swf"; var swfFile = getParameter("filePath"); if(swfFile == ""){ swfFile = "flexPaper/Paper.swf"; } var flashvars = { SwfFile : escape(swfFile), Scale : 1.0, StartAtPage:1, ZoomTransition : "easeOut", ZoomTime : 0.5, ZoomInterval : 0.2, FitPageOnLoad : true, FitWidthOnLoad : false, PrintEnabled : true, FullScreenAsMaxWindow : false, ProgressiveLoading : true, // PrintToolsVisible : true, // ViewModeToolsVisible : true, // ZoomToolsVisible : true, // FullScreenVisible : true, // NavToolsVisible : true, // CursorToolsVisible : true, // 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( "FlexPaperViewer.swf", "flashContent", "1024", "768", swfVersionStr, xiSwfUrlStr, flashvars, params, attributes); swfobject.createCSS("#flashContent", "display:block;text-align:left;"); function getParameter(param){ var query = window.location.search; var iLen = param.length; var iStart = query.indexOf(param); if (iStart == -1) return ""; iStart += iLen + 1; var iEnd = query.indexOf("&", iStart); if (iEnd == -1) return query.substring(iStart); return query.substring(iStart, iEnd); } </script> </head> <body> <div style="position:absolute;left:10px;top:10px;"> <div id="flashContent"> <p> To view this page ensure that Adobe Flash Player version 10.0.0 or greater is installed. </p> <script type="text/javascript"> var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://"); document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='" + pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>"); </script> </div> </div> <!-- <div style="position:absolute;left:750px;top:10px;font-family:Verdana;font-size:9pt;"> <table border="0" width="230"> <tr><th colspan=3>Operations</th></tr> <tr><td>loadSwf</td><td><input type=text style="width:70px;" id="txt_swffile" value="Paper.swf"></td><td><input type=submit value="Invoke" onclick="getDocViewer().loadSwf($('#txt_swffile').val())"></td></tr> <tr><td>fitWidth</td><td></td><td><input type=submit value="Invoke" onclick="getDocViewer().fitWidth()"></td></tr> <tr><td>fitHeight</td><td></td><td><input type=submit value="Invoke" onclick="getDocViewer().fitHeight()"></td></tr> <tr><td>gotoPage</td><td><input type=text style="width:70px;" id="txt_pagenum" value="3"></td><td><input type=submit value="Invoke" onclick="getDocViewer().gotoPage($('#txt_pagenum').val())"></td></tr> <tr><td>getCurrPage</td><td></td><td><input type=submit value="Invoke" onclick="alert('Current page:' + getDocViewer().getCurrPage())"></td></tr> <tr><td>nextPage</td><td></td><td><input type=submit value="Invoke" onclick="getDocViewer().nextPage()"></td></tr> <tr><td>prevPage</td><td></td><td><input type=submit value="Invoke" onclick="getDocViewer().prevPage()"></td></tr> <tr><td>setZoom</td><td><input type=text style="width:70px;" id="txt_zoomfactor" value="1.30"></td><td><input type=submit value="Invoke" onclick="getDocViewer().setZoom($('#txt_zoomfactor').val())"></td></tr> <tr><td>searchText</td><td><input type=text style="width:70px;" id="txt_searchtext" value="text"></td><td><input type=submit value="Invoke" onclick="getDocViewer().searchText($('#txt_searchtext').val())"></td></tr> <tr><td>switchMode</td><td><input type=text style="width:70px;" id="txt_viewmode" value="Tile"></td><td><input type=submit value="Invoke" onclick="getDocViewer().switchMode($('#txt_viewmode').val())"></td></tr> <tr><td>printPaper</td><td></td><td><input type=submit value="Invoke" onclick="getDocViewer().printPaper()"></td></tr> </table> <br/><br/> <table border="0" width="230"> <tr><th>Event Log</th></tr> <tr><td><textarea rows=6 cols=28 id="txt_eventlog" style="width:215px;"></textarea></td></tr> <tr><td><input type=text style="width:215px;" id="txt_progress" value=""></td></tr> </table> </div> --> </body> </html>
附:
1、FlexPaperDemo仅含前台例子
2、swftools-2013-04-09-1007安装文件
PS:文件10M限制,安装文件自行百度
相关推荐
标题 "openoffice+swftools+flexpaper在线预览文档" 涉及到的是一个技术解决方案,用于在Web环境中实现文档的在线预览。这个方案主要包括三个关键组件:OpenOffice、SwfTools和FlexPaper。 1. **OpenOffice**: ...
《.NET + SWFTools + FlexPaper:PDF转SWF实现在线预览的全面解析》 在数字化时代,为了提供方便快捷的文档查看体验,许多网站和应用开始采用在线预览功能,尤其对于PDF文档。本文将深入探讨如何利用.NET框架、...
总的来说,通过OpenOffice的文档解析能力,SwfTools的SWF转换功能,以及FlexPaper的前端展示技术,我们可以构建一个类似百度文库的在线阅读平台,让用户在网页上便捷、舒适地浏览和预览各种类型的文档。这样的系统...
本篇文章将详细讲解如何利用Java技术栈,结合OpenOffice、swfTools和FlexPaper,来实现一个文档在线预览的简易DEMO。 首先,我们来看核心组件: 1. **OpenOffice**:这是一个开源的办公软件套件,包含了一个用于...
本文档将详细阐述一个模仿百度文库文档在线预览系统的实现过程,该系统通过结合Java、FlexPaper和swfTools等技术手段,实现了对上传文档的在线预览功能,同时禁止了用户直接下载原始文档的功能。 #### 如何将文档转...
Java、SWFTools、OpenOffice 和 FlexPaper 是构建在线阅读平台的关键技术,它们共同作用于创建一个高效且用户友好的文档预览系统。这个实例主要关注如何将这些工具结合使用,为用户提供PDF、DOC等常见格式文档的在线...
Java+FlexPaper+swfTools 是一种常见的技术组合,用于实现文档在线预览和阅读功能。这个技术栈主要由三个核心组件组成:Java、FlexPaper 和 swfTools。下面将详细解释这三个组件以及如何整合它们来创建一个文档在线...
### Java+FlexPaper+swfTools 仿百度文库文档在线预览系统设计与实现 本文将详细介绍如何使用Java结合FlexPaper和swfTools技术来实现一个类似百度文库的文档在线预览系统。该系统的主要功能是允许用户在线浏览各种...
本文将深入探讨如何使用C#编程语言结合FlexPaper和SWFTools来实现高效的PDF在线预览功能。 FlexPaper是一款开源的JavaScript库,专为在网页上展示PDF和图像文件而设计。它提供了流畅的用户体验,支持多页滚动、缩放...
SWF是Adobe Flash Player支持的文件格式,可以在网页中播放,因此`pdf2swf`常用于创建可在线浏览的PDF预览版本。 2. **SWFTools**: SWFTools是一系列用于处理SWF文件的开源工具集合,包括pdf2swf、image2swf、rafl...
FlexPaper+SWFTools+ASP.NET实现仿百度文库源码是一种在线文档预览和分享的解决方案,它结合了多种技术来提供类似百度文库的功能。这个系统的主要目的是让用户能够方便地上传、浏览和分享各种格式的文档,如PDF、DOC...
本实例通过整合OpenOffice、SWFTools和FlexPaper,提供了一种有效的方法来实现这个功能,使得用户可以在浏览器中预览Word、Excel、PPT和TXT等格式的文件。 1. **OpenOffice**: OpenOffice是一个开源的办公软件套件...
根据提供的文档标题、描述、标签以及部分内容,本文将详细介绍如何使用Java、FlexPaper及swfTools来设计并实现一个类似于百度文库的文档在线预览系统。本系统旨在让用户能够在线预览各种类型的文档,无需下载或安装...
Java-FlexPaper-swfTools-仿百度文库文档在线预览系统设计与实现 本文主要介绍了使用 Java、FlexPaper 和 swfTools 实现在线文档预览系统的设计和实现。该系统可以将上传的文档(包括 ppt、word、excel、txt 等)...
FlexPaper、SwfTools 和 JodConverter 是三个在文档在线预览领域中广泛使用的开源工具。下面将分别介绍这三个工具及其在文档处理中的作用。 1. **FlexPaper**: FlexPaper 是一款强大的在线文档查看和转换解决方案...
本文将详细讲解一个基于C#的在线文档展示实例,该实例利用了FLEXPAPER插件、SWFTOOLS以及Office 2016来实现从Office文件到PDF再到SWF的转换,最终实现在线展示的效果。 首先,我们来了解FLEXPAPER。FLEXPAPER是一款...
ASP.NET 是微软开发的一个用于构建Web应用程序的框架,它可以与FlexPaper和SWFTools结合,提供服务器端的支持,创建动态、交互式的PDF预览功能。 FlexPaper 的主要特点包括: 1. **跨平台**:FlexPaper 可以在各种...
swftools、flexpaper等工具包。swftools用于将pdf转换为swf文件,而flexpaper则可以实现对swf文件的播放,从而实现pdf文件的预览。
总的来说,OpenOffice、FlexPaper和Swftools的组合为开发者提供了一个高效且经济的在线文档预览解决方案,对于那些需要在网站或应用中集成文档预览功能的项目来说,这是一个极具吸引力的选择。通过深入理解和运用...