前面介紹的Visio開發知識,都是基於Winform的Visio的開發知識,圖紙的展示都是基於Winform方式展示的。但很多時候,如果能夠通過Web方式可以查看最新的圖紙信息,那麼系統將更加趨向完美,你說是不是呢?
通過Web方式查看Visio圖紙實現起來也是很容易的,首先需要在IE客戶端安裝一個Visio Viewer的ActiveX控件支持(微軟提供),然後剩下來的就是編碼展示了,展示的方式和其他的ActiveX控件展示方式差不多。先看看總體的界面實現思路,讓大家有一個較好的理解後,然後我們在一步步分析如何實現。
單擊查看饋線圖的按鈕後,新開一個窗口展示Visio的圖紙(是不是和Winform看到的效果差不多呢?呵呵)
下面介紹下如何實現這個功能:
1、第一個頁面的實現很簡單,你指定一個鏈接指向新的頁面(VisioContainer.aspx),該頁面包含Visio View的ActiveX控件,連接中帶一些參數過來,指明是查看那個圖紙的就OK了。
2、這個頁面(VisioContainer.aspx)實現很關鍵,在此頁面放置一個Visio Viewer的ActiveX控件,這個控件最重要的一個變量是SRC,它需要指向一個Visio的文件路徑,如果Visio圖紙是文件的話,直接賦值就可以顯示了。但是,我們的系統是基於數據庫存儲的,所有的Visio圖紙都是已二進制的方式存儲在數據庫的,那該如何實現呢?先看頁面代碼
<form id="Form1" runat="server">
<div>
<div align="right" style="font-size:x-small">如圖紙不能正常顯示,請<a href="http://www.cnblogs.com/Visio/Visio Viewer 2003.exe">下載安裝Visio Viewer2003</a></div>
<object id="Viewer1" codebase="http://www.cnblogs.com/Visio/Visio Viewer 2003.exe" height="100%" width="100%"
classid="clsid:279D6C9A-652E-4833-BEFC-312CA8887857" viewastext>
<param name="_cx" value="31485">
<param name="_cy" value="20373">
<param name="BackColor" value="16777200">
<param name="AlertsEnabled" value="-1">
<param name="ContextMenuEnabled" value="-1">
<param name="GridVisible" value="0">
<param name="HighQualityRender" value="-1">
<param name="PageColor" value="16777215">
<param name="PageVisible" value="-1">
<param name="PropertyDialogEnabled" value="-1">
<param name="ScrollbarsVisible" value="-1">
<param name="SizeGripVisible" value="-1">
<param name="ToolbarVisible" value="-1">
<param name="SRC" value="">
<param name="CurrentPageIndex" value="0">
<param name="Zoom" value="-1">
<param name="PageTabsVisible" value="-1">
<param name="ToolbarButtons" value="">
<param name="ToolbarCustomizable" value="-1">
</object>
</div>
</form>
其中我們需要動態指定SRC的值,因此在頁面(VisioContainer.aspx)後台代碼中動態綁定了,這裡我們使用了JavaScript的方式來加載Visio Viewer 的SRC路徑信息。
protected void Page_Load(object sender, EventArgs e)
{
string VisioID= Request.QueryString["VisioID"];
StringBuilder sb = new StringBuilder();
sb.Append("<script language='javascript'>");
sb.AppendFormat("Form1.Viewer1.src = 'VisioFile.aspx?VisioID={0}'", System.Web.HttpUtility.UrlEncode(VisioID));
sb.Append("</script>");
ClientScript.RegisterStartupScript(typeof(string),"loadvisio", sb.ToString());
}
我們通過一個新的頁面VisioFile.aspx來動態生成Visio文件,然後賦值給SRC屬性即可實現了。
VisioFile.aspx的頁面只需要實現PageLoad函數即可,如下所示
private void Page_Load(object sender, System.EventArgs e)
{
string VisioID = Request.QueryString["VisioID"];
if (VisioID != null)
{
VisioImageRelease VisioImage = new VisioImageRelease();
using (IDataReader dr = VisioImage.GetByVisioID(VisioID))
{
dr.Read();
byte[] visioImage = (byte[])dr["visioImage"];
OutputVisioFile(visioImage);
}
}
}
/// <summary>
/// 輸入Visio文件到流
/// </summary>
/// <param name="visioFile">Visio文件字節數組</param>
private void OutputVisioFile(byte[] visioFile)
{
Response.ContentType = "application/vnd.ms-visio.viewer";
Response.OutputStream.Write(visioFile, 0, visioFile.Length);
Response.Flush();
Response.End();
}
這樣我們就可以實現Web端展示Visio圖紙的功能了。