我试图以矢量格式从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获取矢量格式的每个形状。
答案 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为您渲染点的路径,因此您不处理弧和样条等...