如何以矢量格式获取Visio形状

时间:2013-12-22 19:48:06

标签: c# svg visio

我试图以矢量格式从Visio项目中获取形状。可以从Visio UI执行此操作,但我无法以编程方式完成它。我的代码如下:

foreach (Visio.Master master in doc.Masters)
{
   imageName = master.NameU;
   string imageFileName = Path.Combine(@"c:\temp", imageName);
   master.Export(imageFileName + ".svg");
} 

功能导出检测传递的文件扩展名并将形状导出为此格式。它适用于任何光栅格式,如bmp png等。我可以将项目的形状作为光栅文件没有问题。如果我传递像emf或wmf这样的格式,它也会保存所有文件,它们实际上是wmf / emf格式。但是它们嵌入了光栅图像,所以实际上它们是光栅的。

最后一个惊喜 - 如果我通过svg扩展,所有导出的文件都是空的,除了几个。这些真的不是空的svg,但它们显示整个visio页面!不是一个单一的形状。每个项目页面的一个svg文件。这不是我想要的。

所以请帮助我 - 如何以编程方式从visio获取矢量格式的每个形状。

2 个答案:

答案 0 :(得分:1)

“Selection”对象的“Export”方法似乎适用于SVG。因此,您可以尝试解决此问题,如下所示:

        foreach (Visio.Master master in doc.Masters)
        {
            string imageName = master.NameU;
            string imageFileName = Path.Combine(@"c:\temp", imageName);

            var selection = doc.Application.ActivePage.CreateSelection(Visio.VisSelectionTypes.visSelTypeEmpty);
            foreach (Visio.Shape shp in master.Shapes)
                selection.Select(shp, (short)Visio.VisSelectArgs.visSelect);

            selection.Export(imageFileName + ".svg");
        }

答案 1 :(得分:0)

我不确定Visio是否只能将单个形状导出到SVG,但您可以根据大小和位置创建页面的副本,然后逐个复制每个形状,并将页面导出为SVG,它会给你形状。

如果您对标准非常熟悉,也可以逐步浏览结构图中的几何体并将其导出到SVG。

另一种选择是使用Path.Points()方法将每个形状导出到简单的SVG路径,该方法为几何中的每个笔划路径返回一个XY点阵列。这将创建比干净的SVG输出更大的路径,但它使Visio为您渲染点的路径,因此您不处理弧和样条等...

相关问题