首页 文章

如何在不打开另一个窗口的情况下将PowerPoint演示文稿嵌入到WPF应用程序中?

提问于
浏览
9

目前我在C#中有一个WPF应用程序,但我发现找到任何有用的方法将PowerPoint演示文稿嵌入到我的窗口中是非常困难的 .

我在这里找到一个解决方案:Embedding a Powerpoint show into a C# application

此解决方案产生了在另一个窗口中运行PowerPoint的问题,但只是在WPF应用程序中显示其UI . 这意味着当WPF窗口被聚焦时,PowerPoint演示文稿没有,并且停止播放 . 当窗口关闭时,还存在PowerPoint崩溃的问题 .

我发现的另一个解决方案是:http://www.codeproject.com/Articles/118676/Embedding-PowerPoint-presentation-player-into-a-WP

解决方案很受欢迎,但我发现它很难处理 . 我不知道任何Win32编程,OR C,所以我发现它很难修改 . 我设法让它停止显示PowerPoint的第二个副本(原始项目中的预期功能),但我还没有找到一种方法来自动打开PowerPoint演示文稿 .

所以我需要的是一种自动和在后台干净地打开PowerPoint演示文稿的方法(我不希望在任何时候显示PowerPoint UI),并允许它自动运行(而不是响应输入)应用程序正在运行 . 如果我能将它保存在C#和WPF中,并且不必处理Win32和C,那将是非常好的 .

这可能吗?在这一点上,我真的后悔这个项目只是因为PowerPoint集成的麻烦 .

4 回答

  • 2

    您可以即时将演示文稿转换为视频格式:

    // not tested as I don't have the Office 2010, but should work
    private string GetVideoFromPpt(string filename)
    {
        var app = new PowerPoint.Application();
        var presentation = app.Presentations.Open(filename, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);
    
        var wmvfile = Guid.NewGuid().ToString() + ".wmv";
        var fullpath = Path.GetTempPath() + filename;
    
        try
        {
            presentation.CreateVideo(wmvfile);
            presentation.SaveCopyAs(fullpath, PowerPoint.PpSaveAsFileType.ppSaveAsWMV, MsoTriState.msoCTrue);
        }
        catch (COMException ex)
        {
            wmvfile = null;
        }
        finally
        {
            app.Quit();
        }
    
        return wmvfile;
    }
    

    然后你会用 MediaElement 来玩它:

    <MediaElement Name="player" LoadedBehavior="Manual" UnloadedBehavior="Stop" />
    
    public void PlayPresentation(string filename)
    {
        var wmvfile = GetVideoFromPpt(filename);
        player.Source = new Uri(wmvfile);
        player.Play();
    }
    

    当你完成视频播放时别忘了 File.Delete(wmvfile)

  • 1

    使用/ s标志通过命令行启动演示文稿将播放幻灯片,而不启动启动画面 .

    powerpnt.exe /s c:\path\to\your\presentation.pptx
    

    我会尝试与你提到的一些WPF嵌入式解决方案一起或者看看this approach .

    我对WPF知之甚少,所以希望有人可以提供更好的答案,包含所有这些部分 .

  • 11

    我真的不喜欢它,我肯定是这样的 . 然而,它相当容易和轻量级 .

    我的基本想法是以某种方式将powerpoint演示文稿嵌入到html中,并使用webbrowser控件来显示它 . 似乎有一个number of ways这样做 .

    我决定尝试将演示文稿直接保存为html,结果证明是可能的(至少对于PP2010而言),尽管布局可能更好 . 另一种方法(例如谷歌文档)可能会产生更好的效果 . 我从link获取了以下内容 .

    • 在PowerPoint 2010中,打开要导出为HTML的演示文稿

    • 按Alt F11 .

    • 按Ctrl G.

    • 在“立即”窗格中,键入以下内容,然后按Enter键: ActivePresentation.SaveAs "<Drive>:\users\<username>\desktop\<filename>.htm", ppSaveAsHTML, msoFalse

    Note 要使用单个文件网页(* .mht; * .mhtml)文件格式进行保存,请将文件名末尾的htm替换为 mht ,并将ppSaveAsHTML替换为 ppSaveAsWebArchive .

    如果你用htm导出它,你会得到很多额外的文件,因为它只是一个文件,所以更适合我 . 我非常确定如果您需要对解决方案进行通用化,也可以在代码中自动执行此步骤 .

    要在webbrowser控件中显示html文件是很容易的部分,为了方便起见我将它上传到我的Dropbox并设置了源代码(如果你想直接查看它,我会把它放在那里几天) .

    至于立即开始幻灯片放映,我将不得不再研究一下 .

    <WebBrowser x:Name="webbrowser" Source="https://dl.dropbox.com/u/27614341/test.mht"/>
    

    enter image description here

  • 1

    有一个名为 DocumentViewer 的WPF控件 .

    • 首先应将pptx转换为.xps文件格式 .

    • 然后将其绑定到DocumentViewer的 Document 属性 .

    Here是将Office文档(包括 pptx )转换为C sharp中的XPS的链接 .

    XAML

    <DocumentViewer Name="myDocumentViewer" Margin="0,0,0,59">
    
    </DocumentViewer>
    

    绑定到控件的 Document 属性(注意 ConvertPptxDocToXPSDoc 是将pptx转换为xps的方法)

    myDocumentViewer.Document = this.ConvertPptxDocToXPSDoc(this.FileName, this.newXPSDocumentName).GetFixedDocumentSequence();
    

相关问题