Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将选定的PowerPoint形状(或DrawingML)转换为XAML_C#_Wpf_Xaml_.emf_Drawingml - Fatal编程技术网

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

C# 将选定的PowerPoint形状(或DrawingML)转换为XAML,c#,wpf,xaml,.emf,drawingml,C#,Wpf,Xaml,.emf,Drawingml,我需要将选定的PowerPoint形状转换为XAML,这样我就可以在我的WPF应用程序中有效地放置一个等效的基于向量的形状(XAML的最终结果必须是可伸缩的-转换为图像违背了我尝试的目的) 我有很多方法可以实现这一点,包括编写PowerPoint加载项(如果这可以让我访问PowerPoint中选定形状的bezier点坐标)。我对PowerPoint加载项不够熟悉,不知道这是否可行 我的第一种方法是将PowerPoint形状复制到剪贴板,然后将剪贴板内容转换为我能理解的对象,然后从那里生成XAML

我需要将选定的PowerPoint形状转换为XAML,这样我就可以在我的WPF应用程序中有效地放置一个等效的基于向量的形状(XAML的最终结果必须是可伸缩的-转换为图像违背了我尝试的目的)

我有很多方法可以实现这一点,包括编写PowerPoint加载项(如果这可以让我访问PowerPoint中选定形状的bezier点坐标)。我对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);
    }
}
Microsoft.Office.Interop.PowerPoint.Application=new Microsoft.Office.Interop.PowerPoint.Application();
var pps=应用程序演示文稿;
string d=“filepath.pptx”;
演示ppt=pps.Open(d,MsoTriState.msoFalse,MsoTriState.msoFalse,MsoTriState.msoFalse);
对于(int j=1;j
然后WMF到XAML::

1) 检查和它的相关项目。这些是WPF的EMF/WMF读取器。您可以编写一个简单的实用程序来读入图像,然后再将它们写出来。我和他们一起玩过一点,运气不错。如果他们能为你工作,这将是我的第一选择。当然,你需要测试它们。由于不同格式之间的设计差异,像这样的转换永远不会完美,因此请确保您没有使用转换器中不支持的东西

2) 我遇到的另一个项目是。我没玩过,不过你可以看看

3)如果直接路由不起作用,您可以考虑将WMF文件转换为SVG等不同的向量格式,然后将SVG文件转换为XAML。有很多工具可用于EMF/WMF到SVG的转换。对于SVG到XAML的转换,您可以查看和。我怀疑这将工作以及直接转换,但你永远不知道


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

您需要使用哪个版本的PowerPoint文档?我没有使用任何保存的PowerPoint文档。我正在现场使用PowerPoint应用程序。那么2003年、2007年、2010年、2013年的PowerPoint版本是什么。。。?