• ASP.NET中Visio图形的控制与数据的动态显示


    背景: 在实现应用开发中, 存在这样一种需求, 在一张图中动态显示图中图元的数据并控制图元的显示方式。比如一张电气接线图, 需要动态显示各个开关的状态及各个电气设备的参数。

    问题: 如何以Web方式满足这样一个需求?

    解决方案: Visio绘制图形, ASP.NET中调用Visio提供的编程接口去控制Visio图中的图元,并转换成Web上可以显示的图像格式。对于每个要动态显示数据的图形, 定义一个自定义属性标识它,比如:TagNum, 然后在程序中根据TagNum的值从数据库中读取数据来设置相应图形的数据。

    参考资源:  Visio 2003 SDK

    示例代码:

    需要添加对Microsoft Visio 11.0 Type Library的引用(COM组件)。代码如下:

         using Microsoft.Office.Interop.Visio;

    private void Button1_Click(object sender, System.EventArgs e)

             {

                  Document doc=null;

                  Cell cell=null;

                  ApplicationClass app=new ApplicationClass();//运行Visio应用程序

                  string CurrentPath=MapPath(".");

                  doc=app.Documents.OpenEx(CurrentPath+"\\bin\\test2.vsd",(short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenCopy);//打开一个visio文件

                  const string CUST_PROP_PREFIX = "Prop."; //自定义属性前缀

                  try

                  {   

                       for(int i=1;i<=doc.Pages[1].Shapes.Count;i++)

                       {

                            doc.Pages[1].Shapes[i].Rotate90();//将图形旋转90

                           doc.Pages[1].Shapes[i].Text="hello";//设置图形的文本

                            if(doc.Pages[1].Shapes[i].get_CellExists("TagNum",(short)Microsoft.Office.Interop.Visio.VisExistsFlags.visExistsAnywhere)!=0)//检查定制是否存在指定定制属性

                           {

                                doc.Pages[1].Shapes[i].Text=data;//在此处显示图形数据

                           }

                       }

                       doc.Saved=true;//告诉Visio应用程序该文件已保存, 不然Visio要出现是否要保存的对话框,实际上并未保存,因为我们不想对源文件作修改,只是修改过后显示一下就行了。

                       doc.Pages [1].Export(CurrentPath+"\\test.jpg");//转换成jpg格式的文件

                  }

                  finally

                  {

                       doc.Close();//关闭打开的文件

                       app.Quit();//退出Visio应用程序

                  }

                 

             }

        

    测试环境:

    Visio 2003+IIS 5.0+.NET FrameWork 1.1

    未解决的问题:

    1、  即使在一个形状中定义了自定义属性, 通过get_CellExists也无法检测到

    2、  不知如何通过代码改变形状的背景色

     

  • 相关阅读:
    21.策略模式(Strategy Pattern)
    22.访问者模式(Visitor Pattern)
    23.状态模式(State Pattern)
    20.备忘录模式(Memento Pattern)
    18.中介者模式(Mediator Pattern)
    Delphi OpenDialog1 文件过滤及多选实现
    计算机存储单位/容量单位(bit、B、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB、CB) 和 带宽单位 bps
    生成FTP快捷键,通过资源管理器打开的方法
    Delphi WinAPI SetJob-暂停、继续、取消或重新启动指定打印机上的打印作业。
    Delphi WinAPI FindFirstPrinterChangeNotification 和FindNextPrinterChangeNotification
  • 原文地址:https://www.cnblogs.com/dudu/p/8027.html
Copyright © 2020-2023  润新知