透過 Microsoft 免費提供的 Visio Viewer ActiveX 控制項,可在瀏覽器中直接檢視儲存於資料庫的 Visio 二進制圖檔。本文完整示範 ASP.NET 整合架構:主頁面嵌入 ActiveX、動態串流輸出 .vsd 檔案、客戶端自動安裝引導。
<object classid="clsid:279D6C9A-652E-4833-BEFC-312CA8887857">,透過 JavaScript 動態設定 SRC 指向串流頁。ContentType = "application/vnd.ms-visio.viewer" 直接輸出至 Response.OutputStream。
<object id="Viewer1"
classid="clsid:279D6C9A-652E-4833-BEFC-312CA8887857"
codebase="https://example.com/VisioViewer2003.exe"
width="100%" height="100%" viewastext>
<param name="SRC" value="">
<param name="ToolbarVisible" value="-1">
<param name="PageTabsVisible" value="-1">
<param name="HighQualityRender" value="-1">
<param name="BackColor" value="16777200">
<param name="PageColor" value="16777215">
<param name="AlertsEnabled" value="-1">
<param name="ContextMenuEnabled" value="-1">
</object>
<div align="right" style="font-size:x-small">
如無法顯示,請 <a href="VisioViewer2003.exe">下載安裝 Visio Viewer</a>
</div>
protected void Page_Load(object sender, EventArgs e) {
string visioId = Request.QueryString["VisioID"];
if (!string.IsNullOrEmpty(visioId)) {
string script = $@"";
ClientScript.RegisterStartupScript(typeof(string), "loadvisio", script);
}
}
private void Page_Load(object sender, EventArgs e) {
string visioId = Request.QueryString["VisioID"];
if (visioId != null) {
using (IDataReader dr = visioDAL.GetByVisioID(visioId)) {
if (dr.Read()) {
byte[] visioBytes = (byte[])dr["visioImage"];
OutputVisioFile(visioBytes);
}
}
}
}
private void OutputVisioFile(byte[] fileBytes) {
Response.ContentType = "application/vnd.ms-visio.viewer";
Response.OutputStream.Write(fileBytes, 0, fileBytes.Length);
Response.Flush();
Response.End();
}
codebase 屬性可指向安裝包實現自動下載提示。此方案零客戶端安裝 Visio 完整版即可實現 Web 端圖紙瀏覽,適合 B/S 架構的圖形管理系統。