2015-08-19 10 views
2

Мне нужно преобразовать выбранные формы PowerPoint в XAML, чтобы я мог эффективно разместить эквивалентную векторную форму внутри своего приложения WPF (конечный результат XAML должен быть масштабируемый - преобразование к изображению побеждает цель того, что я пытаюсь сделать).Преобразование выбранных форм PowerPoint (или DrawingML) в XAML

Я открыт для различных способов достижения этой цели, в том числе для написания дополнения PowerPoint (если это позволит мне получить доступ к точкам координат безье выбранных фигур в PowerPoint). Я недостаточно знаком с добавлениями PowerPoint, чтобы узнать, возможно ли это или нет.

Мой первый подход состоял в том, чтобы скопировать формы PowerPoint в буфер обмена, а затем преобразовать содержимое буфера обмена в объекты, которые я могу понять, а затем сгенерировать XAML. Если я это сделаю, я смогу перейти к представлению DrawingML (через Art_GVML ClipFormat), но неясно, как легко преобразовать DrawingML в XAML (похоже, что недели, подверженные ошибкам, работают для создания с нуля).

В буфере обмена доступны другие форматы (EMF, System.Drawing.Imaging.Metafile, PowerPoint 12.0 Internal Shapes), но все они выглядят как тупики.

Любые предложения?

+0

Какую версию документов PowerPoint вам нужно использовать? pptx или ppt или оба – csharpwinphonexaml

+0

Я не использую какой-либо сохраненный документ PowerPoint. Я работаю с приложениями PowerPoint в прямом эфире. –

+0

Какая версия PowerPoint 2003, 2007, 2010, 2013 ...? – csharpwinphonexaml

ответ

2

Вы можете попробовать это:

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

затем WMF в XAML: Microsoft Forum:

1) Проверьте http://www.wpf-graphics.com/ReaderWmf.aspx и это связано проект http://www.wpf-graphics.com/Paste2Xaml.aspx. Это читатели EMF/WMF для WPF. Вы должны написать простую утилиту для чтения в изображениях и записать их обратно. Я немного поиграл с ними и с ними очень повезло. Если они будут работать на вас, это будет мой первый выбор. Конечно, вам нужно их протестировать. Конверсии, подобные этому, никогда не идеальны из-за различий в дизайне между различными форматами, поэтому убедитесь, что вы не используете что-то, что не поддерживается в конвертере.

2) Еще один проект, с которым я столкнулся, был http://lab.aspitalia.com/15/EmfToXaml-Beta.aspx. Я не играл с ним, но вы можете взглянуть на него.

3) Если прямой маршрут не работает, вы можете подумать о преобразовании файлов WMF в другой векторный формат, например SVG, а затем преобразовать этот SVG-файл в XAML. Существует множество инструментов для преобразования EMF/WMF в SVG. Для преобразования SVG в XAML вы можете посмотреть http://www.codeplex.com/XamlTune и http://www.wpf-graphics.com/ReaderSvg.aspx. Я сомневаюсь, что это будет работать, а также прямое преобразование, но вы никогда не знаете.

О надписях PowerPoint и в приведенном выше примере вам нужны библиотеки Microsoft Office Interop.

 Смежные вопросы

  • Нет связанных вопросов^_^