FlexPaper 实现百度文库式应用(转)

最近有个项目,需要实现类似百度文库的东西。在参照了博客园几个文章之后实现了这个效果。

【准备工作】  

先下载FlexPaper,这个东西在网上搜下吧,版本变化快,还是现用现搜比较好。

 把FlexPaper里的两个文件添加到项目中。 1:FlexPaperViewer.swf;   2:viewer.swf;

 还有两个JS文件,可以放到你项目对应的JS目录中。  2:swfobject.js;  2:flexpaper_flash.js;

 我是把这个功能放到了用户控件当中。控件中代码如下:

 

 1     <script type="text/javascript" src="../script/swfobject/swfobject.js"></script>
 2 
 3     <script type="text/javascript" src="../script/flexpaper_flash.js"></script>
 4 
 5     <script type="text/javascript" src="../script/jquery.js"></script>
 6 
 7     <script type="text/javascript">
 8                 var swfVersionStr = "9.0.124";
 9                 var xiSwfUrlStr = "${expressInstallSwf}";
10                 var flashvars = {
11                 SwfFile: "../UploadFiles/<%=getVal()%>",
12                     Scale: 1,
13                     ZoomTransition: "linear",
14                     ZoomTime: "greater",
15                     ZoomInterval: 0.1,
16                     FitPageOnLoad: false,
17                     FitWidthOnLoad: false,
18                     PrintEnabled: true,
19                     FullScreenAsMaxWindow: false,
20                     ProgressiveLoading: false,
21 
22                     PrintToolsVisible: true,
23                     ViewModeToolsVisible: true,
24                     ZoomToolsVisible: true,
25                     FullScreenVisible: true,
26                     NavToolsVisible: true,
27                     CursorToolsVisible: true,
28                     SearchToolsVisible: false,
29 
30                     localeChain: "zh_CN"
31                 };
32                 var params = {
33 
34             }
35             params.quality = "high";
36             params.bgcolor = "#ffffff";
37             params.allowscriptaccess = "sameDomain";
38             params.allowfullscreen = "true";
39             var attributes = {};
40             attributes.id = "FlexPaperViewer";
41             attributes.name = "FlexPaperViewer";
42             swfobject.embedSWF(
43                 "FlexPaperViewer.swf""flashContent",
44                 "680""505",
45                 swfVersionStr, xiSwfUrlStr,
46                 flashvars, params, attributes);
47             swfobject.createCSS("#flashContent""display:none;text-align:left;");
48     </script>
49 
50     <div id="flashContent">
51 
52         <script type="text/javascript">
53                         var pageHost = ((document.location.protocol == "https:"? "https://" : "http://");
54                         <%--document.write("<a href='http://www.adobe.com/go/getflashplayer'>"); --%>
55         </script>
56 

57     </div>  

上面代码基本无需改动,可能你需要调整大小或者相关的界面设置,查看该插件的文档即可找到。

唯一需要改动的地方可能就是你使用的版本号,还有第11行:SwfFile: "../UploadFiles/<%=getVal()%>"

 这行代码指明你要读取的文件所在位置,这个文件必须是SWF结尾的文件。

 效果如图:

=================================================================

现在说说怎么把WORD,PPT,EXCEL变成这个swf文件。

 还需要一个辅助工具,SWFTools。下载这个文件,并安装。需要用到里面的pdf2swf.exe进行PDF到SWF的转换。

 先上代码。

 1 /// <summary>
 2         /// 上传按钮
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         protected void Button1_Click(object sender, EventArgs e)
 7         {
 8             ////获取文件信息 
 9             string FileName = FileUpload1.FileName;
10             string file_str = "文件名称:" + FileName + "<br>";
11             file_str = "文件类型:" + FileUpload1.PostedFile.ContentType + "<br>";
12             file_str = "文件长度:" + FileUpload1.PostedFile.ContentLength.ToString() + "KB<br>";
13             //上传文件到服务器 
14             //string _FileName = FileUpload1.PostedFile.FileName.Substring(FileName.LastIndexOf("\\") + 1);// 取出文件名的路径(不包括文件的名称) 
15 
16             string upload_file = Server.MapPath("./upload/"+ FileName;//取出服务器虚拟路径,存储上传文件 
17 
18             FileUpload1.PostedFile.SaveAs(upload_file);//开始上传文件 
19 
20             string sWebPath = Request.MapPath("");
21             string sFile = sWebPath + "\\upload\\56.pdf";
22             string dFile = sFile.Replace(".pdf"".swf");
23 
24             if (!File.Exists(dFile))
25             {
26                 if (!Doc2Swf(@"C:\SWFTools\pdf2swf.exe", sFile, dFile,FileName))
27                 {
28                     Response.Write("该文档被加密,不能转换!");
29                 }
30             }
31         }
32 
33         private Boolean Doc2Swf(string appPath, string Source, string Des,string filename)
34         {
35             Process pc = new Process();
36             ProcessStartInfo psi = new ProcessStartInfo(appPath, Source + " " + Des);
37             try
38             {
39                 pc.StartInfo = psi;
40                 pc.Start();
41                 pc.WaitForExit();
42                 val = filename.Replace(".pdf"".swf");
43                 //getVal(val);
44             }
45             catch
46             {
47                 return false;
48                 throw;
49             }
50             finally
51             {
52                 pc.Close();
53             }
54             return File.Exists(Des);

55         }  


 上传的文件必须是PDF格式的文件。先把后缀Replace成swf.

 再通过这行代码 执行文件的实质转换 Doc2Swf(@"C:\SWFTools\pdf2swf.exe", sFile, dFile,FileName)

 其中需要改的也就是第一个参数,刚才装的软件路径。 

 以上出现的代码,是项目和我写测试时候代码结合。因为项目中有些东西又封装了,看起来没有这样清晰。

基本这样就算完成。下面还有一个情况就是,这个文件必须是PDF,那WORD,PPT,EXCEL又如何转PDF呢。

因为项目没有那么强烈说,需要直接上传WORD,PPT这样的要求,所以我也没研究用程序转换的方法。

这里我再提供一个工具,微软提供,免费使用。 

SaveAsPDFandXPS  这个软件装完后,你的WORD,PPT,EXCEL就可以直接保存成PDF。

posted @ 2011-12-28 11:05  Carpe_Diem  阅读(1227)  评论(0编辑  收藏  举报