tnblog
首页
视频
资源
登录

Asp.net MVC 利用(aspose+pdfobject.js) 实现在线预览office文档

9895人阅读 2019/8/3 21:11 总访问:75757 评论:2 收藏:1 手机
分类: GET新技能

Aspose.Total是Aspose公司旗下的最全的一套office文档管理方案,通过它,我们可以有计划地操纵一些商业中最流行的文件格式:Word, Excel, PowerPoint, Project,等office文档以及PDF文档。 pdfobejct是一种开源标准友好的JavaScript实用程序,用于将PDF文件嵌入到HTML文档中。

在这里我们将用到这两种来实现在线预览office文档,

pdfobejct可以去官网下载:https://pdfobject.com/

如果找不到的朋友呢,也可以从我的网盘中下载,一些需要的东西都放在里面打包好了。可以直接放在项目中引用。

链接: https://pan.baidu.com/s/1sl7yP68PW4KfbnP9nT8DXg 提取码: qtdw

在这里我们需要引用一下这三个

将需要的css和js下载好后,引用到页面,然后写页面代码

  1. <link href="~/css/index.css" rel="stylesheet" />
  2. <link href="~/Js/PopupDialog/sexylightbox.css" rel="stylesheet" />
  3. <script src="~/Scripts/jquery-1.8.2.js"></script>
  4. <script src="~/Js/pdfobject/pdfobject.js"></script>
  5. <script src="~/Js/index.js"></script>
  6. <script src="~/Js/PopupDialog/jquery.easing.1.3.js"></script>
  7. <script src="~/Js/PopupDialog/sexylightbox.v2.3.jquery.min.js"></script>
  8. <script src="~/Js/zDialog/zDrag.js"></script>
  9. <script src="~/Js/zDialog/zDialog.js"></script>
  10. <!DOCTYPE html>
  11. <html>
  12. <head>
  13.     <meta name="viewport" content="width=device-width" />
  14.     <title>Index</title>
  15. </head>
  16. <body>
  17.     <div class="fileArea">
  18.         <div>
  19.             <img src="~/Images/word.png" />
  20.             <a class="docViewDownload"
  21.                onclick="viewDoc('wordtest.doc');">
  22.                 &nbsp;预&nbsp;览
  23.             </a>
  24.         </div>
  25.         <div>
  26.             <img src="~/Images/excel.png" />
  27.             <a class="docViewDownload"
  28.                onclick="viewDoc('exceltest.xls');">
  29.                 &nbsp;预&nbsp;览
  30.             </a>
  31.         </div>
  32.         <div>
  33.             <img src="~/Images/ppt.png" />
  34.             <a class="docViewDownload"
  35.                onclick="viewDoc('ppttest.pptx');">
  36.                 &nbsp;预&nbsp;览
  37.             </a>
  38.         </div>
  39.         <div>
  40.             <img src="~/Images/pdf.png" />
  41.             <a class="docViewDownload"
  42.                onclick="viewDoc('pdftest.pdf');">
  43.                 &nbsp;预&nbsp;览
  44.             </a>
  45.         </div>
  46.     </div>
  47.     <a id="hidePopupDialog" style="display:none"
  48.        href="" rel="sexylightbox">预览</a>
  49. </body>
  50. </html>

onclick="viewDoc('wordtest.doc')中,写需要浏览的文档的名称以及格式。

然后在这里贴一下CSS和JS的代码,css和JS命名为index,在页面中有引用,当然也可以写在页面当中。

  1. .fileArea {
  2.   width:700px;
  3.   height:700px;
  4. }
  5. .fileArea div {
  6.     float: left;
  7.     width121px;
  8.     height150px;
  9. }
  10. .fileArea img {
  11.     width121px;
  12.     height121px;
  13. }
  14. .docViewDownload {
  15.     float: left;
  16.     cursor: pointer;
  17.     width75px;
  18.     height30px;
  19.     display: block;
  20.     line-height30px;
  21.     margin-left22px;
  22.     color: white;
  23.     background-color#63a1df;
  24. }
  25. /*遮罩层开始*/
  26. .datagrid-mask {
  27.     background#999;
  28. }
  29. .datagrid-mask {
  30.     position: absolute;
  31.     left0;
  32.     top0;
  33.     width100%;
  34.     height100%;
  35.     opacity0.3;
  36.     filteralpha(opacity=30);
  37.     display: none;
  38. }
  39. .datagrid-mask-msg {
  40. }
  41. .datagrid-mask-msg {
  42.     position: absolute;
  43.     top50%;
  44.     margin-top: -20px;
  45.     padding10px 5px 10px 30px;
  46.     width: auto;
  47.     height16px;
  48.     border-width2px;
  49.     border-style: solid;
  50.     display: none;
  51.     background#fff;
  52.     border1px solid #448abb;
  53.     background#fff url('/images/loading.gif') no-repeat scroll 5px center;
  54. }
  55. /*遮罩层结束*/
  1. $(function ({
  2.     SexyLightbox.initialize({ color'white' });
  3. });
  4. var viewDoc = function (fileName{
  5.     showLoading("body""正在生成预览");
  6.     //生成html文件  
  7.     $.ajax({
  8.         url"/PreviewFiles/CourseViewOnLine?fileName=" + fileName,
  9.         type"GET",
  10.         dataType"json",
  11.         successfunction (data{
  12.             closeLoading();
  13.             //alert(JSON.stringify(data));
  14.             //alert(data[0].TempDocHtml);
  15.             var diag = new Dialog();
  16.             diag.Width = 1300;
  17.             diag.Height = 600;
  18.             diag.Title = "内容页为外部连接的窗口";
  19.             diag.URL = data.TempDocHtml + "?ver=" + Math.random() * 10;
  20.             diag.show();
  21.             //$("#hidePopupDialog").attr('href', '' + data[0].TempDocHtml + '?TB_iframe=true&height=450&width=920');
  22.             //$("#hidePopupDialog").click();
  23.         },
  24.         errorfunction ({
  25.             closeLoading();
  26.             alert('生成失败');
  27.         }
  28.     });
  29. }
  30. // 加载遮罩
  31. var showLoading = function (elementTag, message{
  32.     var msg = message ? message : "加载数据,请稍候...";
  33.     $("<div class=\"datagrid-mask\"></div>").css({
  34.         display"block"width"100%",
  35.         height: $(elementTag).height()
  36.     }).appendTo(elementTag);
  37.     $("<div class=\"datagrid-mask-msg\"></div>")
  38.         .html(msg)
  39.         .appendTo(elementTag).css({ display"block"left"30%"top: ($(elementTag).height() - 45) / 2 });
  40. };
  41. //关闭遮罩
  42. var closeLoading = function ({
  43.     $('.datagrid-mask').remove();
  44.     $('.datagrid-mask-msg').remove();
  45. };

这里我们创建一个控制器,控制器名称随意,只要JS中URL地址和控制器名称改成一样的就行。

  1. private bool PdfToHtml(string fileName, string tempFile, string saveDoc)
  2.         {
  3.             //---------------------读html模板页面到stringbuilder对象里---- 
  4.             StringBuilder htmltext = new StringBuilder();
  5.             using (StreamReader sr = new StreamReader(tempFile)) //模板页路径
  6.             {
  7.                 String line;
  8.                 while ((line = sr.ReadLine()) != null)
  9.                 {
  10.                     htmltext.Append(line);
  11.                 }
  12.                 sr.Close();
  13.             }
  14.             fileName = fileName.Replace("\\""/");
  15.             //----------替换htm里的标记为你想加的内容 
  16.             htmltext.Replace("$PDFFILEPATH", fileName);
  17.             //----------生成htm文件------------------―― 
  18.             using (StreamWriter sw = new StreamWriter(saveDoc, false,
  19.                 System.Text.Encoding.GetEncoding("utf-8"))) //保存地址
  20.             {
  21.                 sw.WriteLine(htmltext);
  22.                 sw.Flush();
  23.                 sw.Close();
  24.             }
  25.             return true;
  26.         }
  27.         
  28.         private bool OfficeDocumentToHtml(string sourceDoc, string saveDoc)
  29.         {
  30.             bool result = false;
  31.             //获取文件扩展名
  32.             string docExtendName = System.IO.Path.GetExtension(sourceDoc).ToLower();
  33.             switch (docExtendName)
  34.             {
  35.                 case ".doc":
  36.                 case ".docx":
  37.                     Aspose.Words.Document doc = new Aspose.Words.Document(sourceDoc);
  38.                     doc.Save(saveDoc, Aspose.Words.SaveFormat.Html);
  39.                     result = true;
  40.                     break;
  41.                 case ".xls":
  42.                 case ".xlsx":
  43.                     Workbook workbook = new Workbook(sourceDoc);
  44.                     //workbook.Open(sourceDoc);
  45.                     //workbook.Save(saveDoc, FileFormatType.AsposePdf);
  46.                     workbook.Save(saveDoc, Aspose.Cells.SaveFormat.Html);
  47.                     result = true;
  48.                     break;
  49.                 case ".ppt":
  50.                 case ".pptx":
  51.                     //templateFile = templateFile.Replace("/", "\\");
  52.                     //string templateFile = sourceDoc;
  53.                     //templateFile = templateFile.Replace("/", "\\");
  54.                     PresentationEx pres = new PresentationEx(sourceDoc);
  55.                     pres.Save(saveDoc, Aspose.Slides.Export.SaveFormat.Html);
  56.                     result = true;
  57.                     break;
  58.                 default:
  59.                     break;
  60.             }
  61.             return result;
  62.         }
  63.         [HttpGet]
  64.         public string CourseViewOnLine(string fileName) 
  65.         {
  66.             //DataTable dtlist = new DataTable();
  67.             //dtlist.Columns.Add("TempDocHtml", typeof(string));
  68.             string json = "";
  69.             string fileDire = "/Files";
  70.             string sourceDoc = Path.Combine(fileDire, fileName);
  71.             string saveDoc = "";
  72.             string docExtendName = System.IO.Path.GetExtension(sourceDoc).ToLower();
  73.             bool result = false;
  74.             if (docExtendName == ".pdf")
  75.             {
  76.                 //pdf模板文件
  77.                 string tempFile = Path.Combine(fileDire, "temppdf.html");
  78.                 saveDoc = Path.Combine(fileDire, "viewFiles/onlinepdf.html");
  79.                 result = PdfToHtml(
  80.                       sourceDoc,
  81.                        System.Web.HttpContext.Current.Server.MapPath(tempFile),
  82.                       System.Web.HttpContext.Current.Server.MapPath(saveDoc));
  83.             }
  84.             else
  85.             {
  86.                 saveDoc = Path.Combine(fileDire, "viewFiles/onlineview.html");
  87.                 result = OfficeDocumentToHtml(
  88.                       System.Web.HttpContext.Current.Server.MapPath(sourceDoc),
  89.                       System.Web.HttpContext.Current.Server.MapPath(saveDoc));
  90.             }
  91.             if (result)
  92.             {
  93.                 json = "{\"TempDocHtml\":\"" + saveDoc.Replace("\\","/") + "\"}";
  94.                 //dtlist.Rows.Add(saveDoc);
  95.             }
  96.             return json;
  97.         }

 string fileDire = "/Files";这里路径下就是浏览的文档路径,不要写错了,不然会无法预览。

这时要做的都做好了,我们调试项目看一下

然后随便点击一个看看效果

到这里预览文档就成功了


我们下次再见~



点个关注再走呗

评价

小可爱

2019/8/4 8:49:27

pdf.js了解一下

YOU:@小可爱这个有看过,但是还要转pdf。一个人搞项目很累了。所以直接用这个了。

2019/8/4 13:50:42 回复

利用OBS推流实现抖音电脑屏幕分享直播,pc游戏直播

OBS介绍开放式广播软件是免费开源软件,用于视频录制和直播。支持的功能包括:编码使用H264(X264)和AAC。支持英特尔快速...

利用EF中的对象赋值CurrentValues.SetValues实现更新与添加

有时候我们需要把一个其他对象的属性赋值到ef中的实体实现更新与添加,如果一个一个的去点出来赋值有点麻烦,就可以借助ef...

利用jquery克隆对象

使用jquery的extand方法即可。varclonedata=$.extend({},item);如果不用jquery的话,可以自己实现一个extand方法,参考如下...

利用winRAR简单打包自己开发的WinForm程序

开发完程序之后,就要涉及到程序的打包了,不然别人怎么使用,难道自己要发源码给人家?发送exe文件也不是不可以,但有些时...

东途网教你如何利用抖音做网络推广?

抖音推广之抖音怎么推广产品?  互联网进入了短视频时代,抖音快手火山小视频成了互联网领域的新星。同时,短视频推广也...

JS数组和VUE利用filter(filters)实现数据过滤

先说JS的语法 array.filter(function(currentValue,index,arr), thisValue)thisValue 可选 (不是必须)。对象作为该执行...

利用乐心健康app 修改微信步数

下载安装乐心健康app并使用手机号 注册账号;实现方法手机安装第三方软件乐心健康,注册账号登录,将运动数据同步到微信和...

简化ORM-EF的Lambda查询后排序字段多判断繁琐,并利用表达式树自定义排序拓展方法

问题详述: 假设我们实例化一个学生成绩对象,其对象及成员如下:public class Model(){ public int Id { get; set;...

利用 反射实例化泛型参数

publicstaticvoidss&lt;T&gt;(thisIQueryable&lt;T&gt;ww) { T自定义名=Activator.CreateInstance&lt;T&gt;(); }

利用obs实现直播

免费且开源的用于视频录制以及直播串流的软件。

利用tim qq截图取色

直接ctrl+alt打开截图,点击你想要取色的地方,然后ctrl+c就可以取到颜色了,然后就是正常的ctrl+v粘贴了

基于office 把wordwordxpptpptxxlsxlsx转为pdf在线预览

//,要在服务器安装office,需要引用usingMicrosoft.Office.Interop.Word;usingMicrosoft.Office.Interop.PowerPoint;usingMi...

基于open office 把各种类型转为pdf在线预览

//需要在服务器安装openoffice,引用cli_basetypes,cli_cppuhelper,cli_oootypes,cli_ure,cli_uretypes publicboolCon...

office2010安装与激活过程

去下载Office2010https://pan.baidu.com/s/1r929BBEzeJ-zxOac9z9SkA#list/path=/sharelink231672117-146812709623164/offic...

office 2010 安装剪贴画不可用

打开控制面板进入控制页面中心点击卸载程序进行程序修改与卸载点击鼠标右键进行修改选中添加与删除功能点击继续office 共享...
幼儿园抢饭第一名
排名
37
文章
10
粉丝
10
评论
11
系统重装(二):安装Windows系统
: 看了你的教程觉得我又行了!于是我去了趟小米之家!
解决:iframe登录过期跳转登录页面嵌套问题
庸人 : 我去,我上个星期刚解决这个问题。。。。。
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术