【问题标题】:How to get Visio shapes in vector format如何以矢量格式获取 Visio 形状
【发布时间】:2013-12-29 08:32:58
【问题描述】:

我试图从 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 获取矢量格式的每个形状。

【问题讨论】:

    标签: c# svg visio


    【解决方案1】:

    “选择”对象的“导出”方法似乎适用于 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");
            }
    

    【讨论】:

    • 完美运行!正是我需要的。非常感谢,对不起,我没有足够的声誉,无法推广答案(Ogromnoe spasibo!
    【解决方案2】:

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

    如果您对标准足够熟悉,您也可以单步执行 shapesheet 中的几何并将其导出为 SVG。

    另一个选项是使用 Path.Points() 方法将每个形状导出到一个简单的 SVG 路径,该方法为几何中的每个笔划路径返回一个 XY 点数组。这将创建比干净的 SVG 输出更大的路径,但它会使 Visio 为您呈现指向点的路径,因此您无需处理弧线和样条线等...

    【讨论】:

    • 感谢 cmets!是的,Visio 可以将每个主控形状从模具导出到 svg。创建具有单一形状的图表的好主意,它可能会有所帮助。可能我会试试这个。作为另一种选择,我想尝试将整个 svg 图(我可以很容易地)拆分为形状。其他方法太难了。我不想深入研究 shapesheet 地狱,即使我设法获得形状几何,我还需要其他视觉属性 - 样式等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 2012-07-27
    • 2022-07-02
    • 1970-01-01
    相关资源
    最近更新 更多