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

在应用开发中,存在动态显示图中图元数据并控制显示方式的需求。本文提出用Visio绘制图形,在ASP.NET中调用其编程接口控制图元并转换为Web可显示格式,根据自定义属性从数据库读取数据设置图形数据,还给出示例代码及测试环境,同时列出未解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景: 在实现应用开发中, 存在这样一种需求, 在一张图中动态显示图中图元的数据并控制图元的显示方式。比如一张电气接线图, 需要动态显示各个开关的状态及各个电气设备的参数。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

问题: 如何以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、  不知如何通过代码改变形状的背景色

 

转载于:https://www.cnblogs.com/dudu/archive/2004/04/29/8027.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值