2

我需要将选定的 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),但它们似乎都是死胡同。

有什么建议么?

4

1 回答 1

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:微软论坛

1)查看http://www.wpf-graphics.com/ReaderWmf.aspx及其相关项目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/XamlTunehttp://www.wpf-graphics.com/ReaderSvg.aspx。我怀疑这会像直接转换一样有效,但你永远不知道。

关于 PowerPoint 加载项和运行上述示例,您需要 Microsoft Office 互操作库。

于 2015-08-19T14:29:44.907 回答