.net mvc使用FlexPaper插件实现在线预览PDF,EXCEL,WORD的方法

 

FlexPaper插件可以实现在浏览器中在线预览pdf,word,excel等。

在网上看到很多关于这个插件实现预览的技术,但是很难做到word和excel在线预览。

pdf很好实现。

 

首先下载相关的插件信息,这里不多说了。

 

其中这个插件主要需要配合Aspose来实现将上传的excel和word来转换为pdf。再通过pdf2swf来将pdf转换为swf格式。才能在前段在线预览。

1.所以这里还需要下载Aspose.dll  和Aspose.Cells.dll(处理Excel)还有Aspose.Words.dll(处理word)

有了dll之后,需要写一个cs类,专门处理word和excel转换为pdf,以及pdf转换为swf的方法。

直接推荐这篇文章里面已经实现的方法。

 

http://www.bkjia.com/Asp_Netjc/890896.html

 

通过这个类实现的方法

 

2.结合我们上传的文件路径,来实现将上传的文件格式转换以及在线预览。

首先配置前段页面信息

 1  <input type="hidden" id="_filename" value="/./../../@Model" />
 2         <div style="margin:0 auto;width:100%;">
 3             <div id="flashContent" style="display:none;">
 4                 <p>
 5                     To view this page ensure that Adobe Flash Player version
 6                     10.0.0 or greater is installed.
 7                 </p>
 8               
 9             </div>
10 
11             <script src="~/Scripts/jquery-1.10.2.js"></script>
12             <script src="~/Scripts/swfupload/flexpaper_flash.js"></script>
13             <script src="~/Scripts/swfupload/swfobject.js"></script>
14 
15             <script type="text/javascript">
16                 var _filename = $("#_filename").val();
17 
18                  // alert(_filename)
19                 //alert(_filename);
20                 var swfVersionStr = "9.0.0";
21                 var xiSwfUrlStr = "playerProductInstall.swf";
22                 var flashvars = {
23                     SwfFile: escape(_filename),
24                     SwfFile: _filename,
25                     // SwfFile: "/./../../UpDir/expressInstall.swf",                   
26                     Scale: 0.6,
27                     ZoomTransition: "easeOut",
28                     ZoomTime: 0.5,
29                     ZoomInterval: 0.1,
30                     FitPageOnLoad: false,
31                     FitWidthOnLoad: true,
32                     PrintEnabled: true,
33                     FullScreenAsMaxWindow: false,
34                     ProgressiveLoading: true,
35                     PrintToolsVisible: true,
36                     ViewModeToolsVisible: true,
37                     ZoomToolsVisible: true,
38                     FullScreenVisible: true,
39                     NavToolsVisible: true,
40                     CursorToolsVisible: true,
41                     SearchToolsVisible: true,
42                     SearchMatchAll: true,
43                     localeChain: "zh_CN"
44                 };
45                 var params = {
46                     quality: "high",
47                     bgcolor: "#ffffff",
48                     allowscriptaccess: "sameDomain",
49                     allowfullscreen: "true",
50                     wmode: "direct"
51 
52                 }
53                 var attributes = { id: "FlexPaperViewer", name: "FlexPaperViewer" };
54                 swfobject.embedSWF("../../../../Scripts/FlexPaper/FlexPaperViewer.swf", "flashContent", "100%", "1000", swfVersionStr, xiSwfUrlStr, flashvars, params, attributes);
55 
56                 swfobject.createCSS("#flashContent", "display:block;text-align:left;");
57             </script>
58         </div>

一些主要的配置信息我已经标红,至于插件配置信息的属性功能,自行参考网上很多文档介绍,我用的就是一般上传。

 

3.接下来就是controller中实现的转换方法,我直接将路径传给了model返回给页面显示了。

 

 1                        //swf文件路径
 2             string path = Server.MapPath("~\\UpDir") + node.FilePath.Substring(5).Replace('\\', '/') + ".swf";
 3                 //SIO是system.io  我重命名了
 4             SIO.FileInfo fileinfo = new SIO.FileInfo(path);
 5             if (fileinfo.Exists)
 6             {
 7                 return View((object)(node.FilePath + ".swf"));
 8             }
 9             else
10             {
11                 try
12                 {
13                     //上传的源文件地址
14                     string sourcefile = Server.MapPath("~\\UpDir") + node.FilePath.Substring(5);
15                     string FileName = node.name;
16                     string ext = node.FilePath.Substring(node.FilePath.LastIndexOf(".") + 1);
17 
18 
19                     if (ext.ToLower() == "doc" || ext.ToLower() == "docx")
20                     {
21                         string pdffile = sourcefile;
22                         string swffile = Server.MapPath("~\\UpDir") + node.FilePath.Substring(5).Replace('\\', '/');
23                         string path1 = Server.MapPath("~\\UpDir") + node.FilePath.Substring(5).Replace('\\', '/') + ".swf";
24                         Aspose.Words.Document doc = new Aspose.Words.Document(pdffile);
25                         doc.Save(swffile, Aspose.Words.SaveFormat.Pdf);
26 
27                         AsposeUtils.ConvertDocToPdF(swffile, path1);
28                         AsposeUtils.PDFConvertToSwf(swffile, path1, AsposeUtils.GetPageCountByPDF(swffile));
29                     }
30                     else if (ext.ToLower() == "xls" || ext.ToLower() == "xlsx")
31                     {
32                         string pdffile = sourcefile;
33                         string swffile = Server.MapPath("~\\UpDir") + node.FilePath.Substring(5).Replace('\\', '/') + ".pdf";
34                         string path1 = Server.MapPath("~\\UpDir") + node.FilePath.Substring(5).Replace('\\', '/') + ".swf";
35 
36                         Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook(pdffile);
37                      
39                         workbook.Save(swffile, Aspose.Cells.SaveFormat.Pdf);
40 
41                         //AsposeUtils.ConvertExcelToHtml(swffile, swffile);
42                         AsposeUtils.PDFConvertToSwf(swffile, path1, AsposeUtils.GetPageCountByPDF(swffile));
43                     }
44                     else if (ext.ToLower() == "pdf")
45                     {
46 
47                         try
48                         {
49                             string pdffile = sourcefile;
50                             string swffile = path;
51 
52                             SIO.File.Copy(pdffile, swffile, true);
53                             AsposeUtils.PDFConvertToSwf(pdffile, swffile, AsposeUtils.GetPageCountByPDF(pdffile));
54 
55                         }
56                         catch (Exception ex)
57                         {
58                             string str = ex.Message;
59                         }
60                     }
61                     else if (ext.ToLower() == "ppt" || ext.ToLower() == "pptx")
62                     {
63                         string pdffile = sourcefile;
64                         string swffile = path;
65 
66                         AsposeUtils.ConvertPowerPointToPdf(sourcefile, swffile);
67                         AsposeUtils.PDFConvertToSwf(pdffile, swffile, AsposeUtils.GetPageCountByPDF(pdffile));
68                     }
69                     else if (ext.ToLower() == "txt")
70                     {
71                         string pdffile = sourcefile;
72                         string swffile = path;
73 
74                         Txt2Pdf.zscsc(sourcefile, swffile);
75                         AsposeUtils.PDFConvertToSwf(pdffile, swffile, AsposeUtils.GetPageCountByPDF(pdffile));
76                     }
77                     else if (ext.ToLower() == "jpg" || ext.ToLower() == "jpeg" || ext.ToLower() == "png")
78                     {
79                         return View((object)node.FilePath);
80                     }
81                     else
82                     {
83                         // ViewBag.FileName = @"/./../../UpDir/"+ project.ProjectCode + "/" + contract.ContractType + "/" + contract.Id + ".swf"; ;
84                     }

 

 4.我用的上传插件师swfupload,个人觉得不怎么好用,后面用uploadfiy插件了。上传不说了,controller中对word和excel的转换方法和我连接中文章使用的不一样。因为用文章中的总不能在前段使用flexpapaer预览成功。所以标黄的代码是我自己加上的。绿色代码是原先的代码。可以自己参考,两种方法哪个可行用哪个。

 

posted @ 2018-11-29 10:39  Melody.Gkx  阅读(1803)  评论(0编辑  收藏  举报