2015-08-19 2 views
2

Je dois convertir des formes PowerPoint sélectionnées en XAML pour pouvoir placer efficacement une forme vectorielle équivalente dans mon application WPF (le résultat final XAML doit être évolutif - conversion à une image défait le but de ce que j'essaye de faire).Convertir les formes PowerPoint sélectionnées (ou DrawingML) en XAML

Je suis ouvert à une variété de façons d'accomplir cela, y compris l'écriture d'un addin PowerPoint (si cela pouvait me donner accès aux coordonnées du point de Bézier des formes sélectionnées dans PowerPoint). Je ne connais pas assez les ajouts PowerPoint pour savoir si cela est possible ou non.

Ma première approche consistait à copier les formes PowerPoint dans le presse-papiers, puis à convertir le contenu du presse-papiers en objets que je peux comprendre, puis générer le XAML à partir de là. Si je fais cela, je peux accéder à la représentation DrawingML (à travers Art :: GVML ClipFormat), mais il est difficile de savoir comment convertir facilement DrawingML en XAML (ressemble à des semaines de travail sujettes aux erreurs à créer à partir de zéro).

Il existe d'autres formats disponibles dans le Presse-papiers (EMF, System.Drawing.Imaging.Metafile, PowerPoint 12.0 Formes internes), mais ils semblent tous être des impasses.

Des suggestions?

+0

Quelle version de documents PowerPoint devez-vous utiliser? pptx ou ppt ou les deux – csharpwinphonexaml

+0

Je n'utilise aucun document PowerPoint enregistré. Je travaille en direct avec les applications PowerPoint. –

+0

Alors quelle version PowerPoint 2003, 2007, 2010, 2013 ...? – csharpwinphonexaml

Répondre

2

Vous pouvez essayer ceci:

Forme Powerpoint WMF

Microsoft.Office.Interop.PowerPoint.Application app = new Microsoft.Office.Interop.PowerPoint.Application(); 
var pps = app.Presentations; 
string d ="filepath.pptx"; 
Presentation ppt = pps.Open(d, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse); 
for (int j = 1; j < ppt.Slides.Count; j++) 
{ 
    Slide sld = ppt.Slides[j]; 
    List<Microsoft.Office.Interop.PowerPoint.Shape> shapes = new List<Microsoft.Office.Interop.PowerPoint.Shape>(); 
    for (int k = 1; k < sld.Shapes.Count; k++) 
    { 
     Microsoft.Office.Interop.PowerPoint.Shape shape = sld.Shapes[k]; 
     shape.Export("outputFilePath.wmf", PpShapeFormat.ppShapeFormatWMF); 
    } 
} 

puis WMF à XAML: Microsoft Forum:

1) Départ http://www.wpf-graphics.com/ReaderWmf.aspx et son projet http://www.wpf-graphics.com/Paste2Xaml.aspx liés. Ce sont des lecteurs EMF/WMF pour WPF. Vous écririez un utilitaire simple pour lire dans les images et les réécrire. J'ai joué un peu avec eux et j'ai eu beaucoup de chance avec eux. S'ils travaillent pour vous, ce serait mon premier choix. Vous aurez besoin de les tester bien sûr. Les conversions comme celle-ci ne sont jamais parfaites en raison de la différence de conception entre les différents formats, alors assurez-vous que vous n'utilisez pas quelque chose qui n'est pas pris en charge dans le convertisseur.

2) Un autre projet que j'ai rencontré était http://lab.aspitalia.com/15/EmfToXaml-Beta.aspx. Je n'ai pas joué avec, mais vous pourriez y jeter un coup d'oeil.

3) Si la route directe ne fonctionne pas, vous pouvez envisager de convertir les fichiers WMF dans un format vectoriel différent comme SVG, puis de convertir ce fichier SVG en XAML. Il y a beaucoup d'outils pour la conversion EMF/WMF en SVG. Pour la conversion SVG en XAML, vous pouvez regarder http://www.codeplex.com/XamlTune et http://www.wpf-graphics.com/ReaderSvg.aspx. Je doute que cela fonctionne aussi bien qu'une conversion directe, mais on ne sait jamais. À propos des compléments PowerPoint et de l'exécution de l'exemple ci-dessus, vous avez besoin de bibliothèques Microsoft Office Interop.