将选定的 PowerPoint 形状(或 DrawingML)转换为 XAML

Convert Selected PowerPoint Shapes (or DrawingML) to XAML

我需要将选定的 PowerPoint 形状转换为 XAML,这样我就可以在我的 WPF 应用程序中有效地放置等效的基于矢量的形状(XAML 最终结果必须是 scalable - 转换为图像违背了我想要做的事情的目的)。

我愿意接受多种方法来完成此任务,包括编写 PowerPoint 插件(如果这能让我访问 PowerPoint 中所选形状的贝塞尔点坐标)。我对 PowerPoint 插件不够熟悉,不知道这是否可行。

我的第一个方法是将 PowerPoint 形状复制到剪贴板,然后将剪贴板内容转换为我可以理解的对象,然后从那里生成 XAML。如果我这样做,我可以得到 DrawingML 表示(通过 Art::GVML ClipFormat),但不清楚如何轻松地将 DrawingML 转换为 XAML(从头开始创建看起来需要数周的容易出错的工作).

剪贴板上还有其他可用格式(EMF、System.Drawing.Imaging.Metafile、PowerPoint 12.0 内部形状),但它们似乎都是死胡同。

有什么建议吗?

你可以试试这个:

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 and it's related project http://www.wpf-graphics.com/Paste2Xaml.aspx。这些是 WPF 的 EMF/WMF 读者。您将编写一个简单的实用程序来读入图像并再次将它们写回。我和他们一起玩过一点,并且运气很好。如果他们愿意为你工作,这将是我的第一选择。你当然需要测试它们。由于各种格式之间的设计差异,这样的转换永远不会完美,因此请确保您没有使用转换器不支持的内容。

2) 我 运行 参与的另一个项目是 http://lab.aspitalia.com/15/EmfToXaml-Beta.aspx。没玩过,你可以看看

3) 如果直接路径不起作用,您可以考虑将 WMF 文件转换为不同的矢量格式,如 SVG,然后将该 SVG 文件转换为 XAML。 EMF/WMF 到 SVG 的转换有很多工具。对于 SVG 到 XAML 的转换,您可以查看 http://www.codeplex.com/XamlTune and http://www.wpf-graphics.com/ReaderSvg.aspx。我怀疑这是否会像直接转换一样有效,但你永远不知道。

关于 PowerPoint 加载项和 运行 以上示例您需要 Microsoft Office Interop 库。