Преобразовать выбранные формы 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.

Другие вопросы по тегам