背景 在实现应用开发中 存在这样一种需求 在一张图中动态显示图中图元的数据并控制图元的显示方式比如一张电气接线图 需要动态显示各个开关的状态及各个电气设备的参数
问题 如何以Web方式满足这样一个需求?
解决方案 用Visio绘制图形 在ASPNET中调用Visio提供的编程接口去控制Visio图中的图元并转换成Web上可以显示的图像格式对于每个要动态显示数据的图形 定义一个自定义属性标识它比如TagNum 然后在程序中根据TagNum的值从数据库中读取数据来设置相应图形的数据
需要添加对Microsoft Visio Type Library的引用(COM组件)代码如下
using MicrosoftOfficeInteropVisio;
private void Button_Click(object sender SystemEventArgs e)
{
Document doc=null;
Cell cell=null;
ApplicationClass app=new ApplicationClass();//运行Visio应用程序
string CurrentPath=MapPath();
doc=appDocumentsOpenEx(CurrentPath+\\bin\\testvsd(short)MicrosoftOfficeInteropVisioVisOpenSaveArgsvisOpenCopy);//打开一个visio文件
const string CUST_PROP_PREFIX = Prop; //自定义属性前缀
try
{
for(int i=;i<=docPages[]ShapesCount;i++)
{
docPages[]Shapes[i]Rotate();//将图形旋转度
docPages[]Shapes[i]Text=hello;//设置图形的文本
if(docPages[]Shapes[i]get_CellExists(TagNum(short)MicrosoftOfficeInteropVisioVisExistsFlagsvisExistsAnywhere)!=)//检查定制是否存在指定定制属性
{
docPages[]Shapes[i]Text=data;//在此处显示图形数据
}
}
docSaved=true;//告诉Visio应用程序该文件已保存 不然Visio要出现是否要保存的对话框实际上并未保存因为我们不想对源文件作修改只是修改过后显示一下就行了
docPages []Export(CurrentPath+\\testjpg);//转换成jpg格式的文件
}
finally
{
docClose();//关闭打开的文件
appQuit();//退出Visio应用程序
}
}