Преобразовать выбранные формы PowerPoint (или DrawingML) в XAML
Мне нужно преобразовать выбранные формы PowerPoint в XAML, чтобы я мог эффективно разместить эквивалентную векторную форму в своем приложении WPF (конечный результат XAML должен быть масштабируемым - преобразование в изображение не соответствует цели того, что я пытаюсь сделать),
Я открыт для различных способов достижения этой цели, включая написание надстройки PowerPoint (если это может дать мне доступ к координатам точки Безье выбранных фигур в PowerPoint). Я недостаточно знаком с надстройками PowerPoint, чтобы знать, возможно ли это или нет.
Мой первый подход состоял в том, чтобы скопировать формы PowerPoint в буфер обмена, а затем преобразовать содержимое буфера обмена в объекты, которые я могу понять, и затем сгенерировать XAML оттуда. Если я сделаю это, я смогу добраться до представления DrawingML (через Art::GVML ClipFormat), но неясно, как легко преобразовать этот DrawingML в XAML (выглядит как недолгая, подверженная ошибкам работа по созданию с нуля).
В буфере обмена доступны другие форматы (EMF, System.Drawing.Imaging.Metafile, PowerPoint 12.0 Internal Shapes), но все они кажутся тупиковыми.
Какие-либо предложения?
1 ответ
Вы можете попробовать это:
Powerpoint Shape для 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:
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.