• 在浏览器里直接查看ppt的一个代替方法


     之前,我曾经写过一篇叫“在IE里打开,浏览PPT时出现下载框的简单方法”,不过经园子里sharper,JoeLee,Sapphire 等前辈大侠的提醒和批评才发现自己犯了一个低级错误,那个方法也只是实现在ie打开ppt文件,并将其最大化,使用浏览模式屏蔽出现的下载对话框而已,确实也没什么大作用,一旦客户端不装office powerpoint也就打不开了。


       于是我把那篇文章删掉了,自己在网上找相关的解决方法,还是没什么新的发现,也没发现可以使用的支持在ie浏览ppt的ActiveX插件,再说ie对Activex插件好像有安全级别限制,也不怎么合适。

      
       在网上也看到在ie打开浏览office文档的一个方法,摘录于此,文章地址是http://blog.joycode.com/kaneboy/archive/2004/11/03/37889.aspx

        有朋友询问如何在Web页面上做到像SharePoint中的效果一样,能直接激活客户端的Word来打开.doc文件,而不是类似直接点击.doc文档链接时Word在IE中被打开那样。想想这个问题应该很多人都会感兴趣,所以干脆写一篇blog来大致描述一下方法。

    在安装Office2003以后,有一个ActiveX控件被安装到了系统中,这个控件位于“Program Files\Microsoft Office\OFFICE11\owssupp.dll”。通过这个控件,客户端页面上的JavaScript就可以激活本地的Office软件,来实现打开、编辑Office文档。(另,Office XP应该就已经包含这个ActiveX控件了。)

        首先,用Script创建一个本地的对象:

    openDocObj = new ActiveXObject("SharePoint.OpenDocuments.2"); // 为了兼容Office XP,可以创建“SharePoint.OpenDocuments.1”

        然后,调用openDocObj的相应的方法。比如打开服务器上的一个Office文档:

    openDocObj.ViewDocument("http://www.abc.com/documents/sample.doc");

    openDocObj对象会根据参数中不同的Office文档类型(.doc、.xls、.ppt)来打开不同的程序(Word、Excel、PowerPoint)。ViewDocument()方法还有一个重载签名,可以让我们手工指定激活哪个程序来打开文档:

    openDocObj.ViewDocument("http://www.abc.com/documents/sample.doc", 要激活的程序的ProgID);

        那么要打开Office程序在线编辑文件又如何?

    openDocObj.EditDocument("http://www.abc.com/documents/sample.doc");

        就可以直接激活Word,在Word里面编辑文档,然后直接点击Word里面的保存功能,就可以将文件保存会服务器上了。注意:为了让Word能将编辑后的文档直接保存会服务器,访问Web站点的当前上下文的Windows Identity必须对服务器的相应目录(即“http://www.abc.com/documents”这个虚拟目录所对应的服务器上的物理路径)有相应的写权限,否则保存动作会失败。编辑完成后,EditDocument()会返回一个bool值,来反映编辑操作是否成功。

        我们还可以通过打开服务器上的一个文档模版,来创建一个新的文档:

    openDocObj.CreateNewDocument("http://www.abc.com/documents/sampleTemplate.dot", "http://www.abc.com/documents/");

        就可以使用“http://www.abc.com/documents/sampleTemplate.dot”这个模版来创建一个新的文档,默认新文档的保存地点是“http://www.abc.com/documents/”。创建新文档时使用的程序取决于模版文件的类型(比如.dot模版会对应Word)。新文档的保存同样需要注意权限问题。CreateNewDocument()方法同样会返回一个bool值来反映操作是否成功。

        CreateNewDocument()方法的第一个参数,除了可以使用一个模版的地址外,还可以直接指定为希望用来创建新文档的客户端程序的ProgID。


       不过,也是需要客户端安装ms office.

       后来想到使用word时可以把doc另存为网页,我想ppt文档应该也支持这个功能,但是如果每次都手工转也太烦了,于是就通过写一个转换ppt为html的类来实现,在每次上传后或前用这个类实现将ppt转换为html文件。


       以下是具体的实现类:


    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Office;
    using Microsoft.Office.Interop.PowerPoint;
    namespace PPTtoHtml
    {
        public class ConvertPowerPoint
        {
            private Microsoft.Office.Interop.PowerPoint.Application ppt;
            ///
            /// 指向具体的文件;
            ///
            private Microsoft.Office.Interop.PowerPoint.Presentation pptFile;
            private string _HtmlFileName;

            /// <summary>
            /// 另存为的HTML文件的文件路径
            /// </summary>
            public string HtmlFileName
            {
                set
                {
                    _HtmlFileName = value;
                }
            }


            public ConvertPowerPoint()
            {
                ppt = new Application();
            }

      
            /// <summary>
            /// 转换过程
            /// </summary>
            /// <param name="pptFileName"> 欲转换的PowerPoint文件名称</param>
            public void Convert(string pptFileName)
            {

                pptFile = ppt.Presentations.Open(pptFileName, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoCTrue,
                    Microsoft.Office.Core.MsoTriState.msoFalse);

                pptFile.SaveAs(_HtmlFileName, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsHTML, Microsoft.Office.Core.MsoTriState.msoCTrue);
                pptFile.Close();

            }
        }
    }

       以下是转换后的html截图:

      
        经vs2005测试通过,当然这个方法只是个替代方案而已,在我没找到更好的方法之前,暂时先使用,方便那些没有装office powerpoint的用户直接在浏览器上浏览我们提供的ppt,同时也提供相应的ppt文件供有安装powerpoint的或有需要的用户自己下载使用。

        同时,如果您有更有效的,也欢迎您不吝赐教!


  • 相关阅读:
    java中的匿名内部类总结
    (转)NIO与AIO,同步/异步,阻塞/非阻塞
    (转)也谈BIO | NIO | AIO (Java版)
    socket Bio demo
    (转)socket Aio demo
    (转)深入理解Java的接口和抽象类
    (转)Java:类与继承
    (转)Java中的static关键字解析
    (转)java字节流和字符流的区别
    (整理)MyBatis入门教程(一)
  • 原文地址:https://www.cnblogs.com/xryyforver/p/1508552.html
Copyright © 2020-2023  润新知