2013-03-31 12 views
8

Attualmente ho un'applicazione WPF in C#, ma trovo che sia incredibilmente difficile trovare tutti i modi utili per incorporare una presentazione di PowerPoint nella mia finestra.Come posso incorporare una presentazione di PowerPoint in un'applicazione WPF senza aprire un'altra finestra?

Una soluzione che ho trovato qui: Embedding a Powerpoint show into a C# application

Questa soluzione ha creato il problema di avere corsa PowerPoint in un'altra finestra, ma solo mostrare la sua interfaccia utente all'interno dell'applicazione WPF. Ciò significava che quando la finestra WPF era focalizzata, la presentazione di PowerPoint non era, e smetteva di giocare. C'era anche il problema di arresto anomalo di PowerPoint quando la finestra era chiusa.

Un'altra soluzione che ho trovato è stato qui: http://www.codeproject.com/Articles/118676/Embedding-PowerPoint-presentation-player-into-a-WP

la soluzione è stata popolare, ma ho trovato difficoltà a lavorare. Non conosco alcuna programmazione Win32, o C++, quindi l'ho trovato estremamente difficile da modificare. Sono riuscito a farlo smettere di visualizzare una seconda copia di PowerPoint (una funzione prevista nel progetto originale), ma non ho ancora trovato un modo per aprire automaticamente la presentazione di PowerPoint.

Quindi quello di cui ho bisogno è un modo per aprire in modo pulito la presentazione di PowerPoint automaticamente e in background (non voglio che l'interfaccia utente di PowerPoint venga visualizzata in nessun punto) e per consentirne l'esecuzione automatica (e non risponde da inserire) mentre l'applicazione è in esecuzione. Sarebbe meraviglioso se potessi tenerlo in C# e WPF, e non avere a che fare con Win32 e C++.

È possibile? A questo punto mi sto davvero rammaricando di questo progetto semplicemente a causa dei problemi di integrazione di PowerPoint.

+1

Un altro modo è la conversione la presentazione ad un altro formato, come un video, che può essere riprodotto con WPF MediaPlayer. Questo potrebbe essere utile: http://stackoverflow.com/questions/13311579/ – Joulukuusi

+0

Questa è una buona idea. Lo esaminerò. –

+0

@Joulukuusi La tua soluzione è quella che ha funzionato meglio per noi. Per favore, crea una risposta in modo che io possa darti la taglia. –

risposta

9

Si potrebbe convertire la presentazione in un formato video on-the-fly:

// 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; 
} 

E allora si potrebbe giocare con MediaElement:

<MediaElement Name="player" LoadedBehavior="Manual" UnloadedBehavior="Stop" /> 

public void PlayPresentation(string filename) 
{ 
    var wmvfile = GetVideoFromPpt(filename); 
    player.Source = new Uri(wmvfile); 
    player.Play(); 
} 

Non dimenticare di File.Delete(wmvfile) quando hai terminato di giocare a video!

+1

Finché non è necessaria l'interazione dell'utente per la presentazione, questa è una soluzione abbastanza decente. –

2

Avviare la presentazione tramite la riga di comando con il flag/s riprodurrà la presentazione senza avviare la schermata iniziale.

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

vorrei provare che di concerto con alcune delle soluzioni incorporare WPF che hai citato o dare un'occhiata a this approach.

So poco di WPF, quindi spero che qualcuno possa fornire una risposta migliore incorporando tutti questi pezzi.

1

Non mi piace molto, e non sono sicuro che questo si applica alla situazione. Avresti bisogno di avere accesso alla presentazione, tanto è sicuro. È è piuttosto facile e leggero.

La mia idea di base era incorporare in qualche modo la presentazione in PowerPoint in html e usare semplicemente il controllo del browser per visualizzarlo. Sembra che ci sia un number of ways per farlo.

Ho deciso di provare e salvare la presentazione direttamente come html, che si è rivelato possibile (almeno per PP2010), anche se il layout potrebbe essere più bello. Un altro approccio (ad esempio i documenti di Google) potrebbe produrre qualcosa di più bello. Ho preso il seguente da questo link.

  • In PowerPoint 2010, aprire la presentazione che si desidera esportare in formato HTML
  • Premere Alt + F11.
  • Premere Ctrl + G.
  • Nel riquadro Immediata, digitare la seguente, e quindi premere Invio: ActivePresentation.SaveAs "<Drive>:\users\<username>\desktop\<filename>.htm", ppSaveAsHTML, msoFalse

    Nota Per risparmiare utilizzando il singolo file pagina Web (* .mht; * .mhtml) formato di file, sostituire htm alla fine del nome del file con mht e sostituire ppSaveAsHTML con ppSaveAsWebArchive.

Se si esporta in htm, si ottiene un sacco di file aggiuntivi, in MHT è solo un singolo file in modo che mi adatti meglio. Sono abbastanza sicuro che sarebbe anche possibile automatizzare questo passaggio nel codice se devi andare generico con la tua soluzione.

Per visualizzare il file html in un controllo webbrowser è la parte facile, l'ho caricato nel mio dropbox per comodità e basta impostare la fonte (lascerò lì per qualche giorno se si vuole dare un'occhiata a lui direttamente).

Per quanto riguarda l'avvio della presentazione immediatamente, dovrò esaminarlo un po 'di più.

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

enter image description here

+0

Quando si visualizza una presentazione di PowerPoint in un browser web, come posso accedere alle informazioni come il numero di diapositive? –

+0

Oh, non importa. Ora mi rendo conto che la parte 'Slide 1 of 3' è stata aggiunta durante la conversione in html. –

1

C'è un controllo WPF chiamato DocumentViewer.

  1. Prima il pptx deve essere convertito in formato .xps.
  2. Quindi collegarlo alla proprietà Document di DocumentViewer.

Here è il link per convertire i documenti d'ufficio (compresi pptx) per XPS in do diesis.

XAML

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

</DocumentViewer> 

legarsi al Document proprietà del controllo (Si noti che ConvertPptxDocToXPSDoc è il metodo per convertire pptx XPS)

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

Questo non funzionerà se la presentazione ha suoni, ma per il resto è una buona idea. – Joulukuusi

+0

Hai visto i seguenti post? [post1] (http://stackoverflow.com/q/11432875/873979) [post2] (http://www.codeproject.com/Articles/118676/Embedding-PowerPoint-presentation-player-into-a-WP) – Haritha

Problemi correlati