使用Visio Viewer载入数据库中的Visio图
需求很簡單,在SQL Server數據庫中存放用戶上傳的Visio文件,然后使用Visio Viewer在IE中直接顯示用戶上傳的Visio文件的內容。
對于這個需求,我們需要分成兩部分:
1.實現Visio文件的數據庫存放和讀取,并在Asp.Net中能夠下載下來。
2.使用微軟官方提供的Visio Viewer,在HTML中使用該Object來調用Visio圖。
對于第一個功能。首先需要實現的是文件的上傳。在文件上傳時我們一般需要記錄3個內容:文件的Content Type,文件名和文件的二進制內容。用戶上傳文件保存到數據庫的功能代碼很簡單,我這里就不累述了。
然后說一下下載功能,我們新建一個ViewFile.aspx文件,然后在后臺代碼中編寫如下:
protected void Page_Load(object sender, EventArgs e){var p = Mgr.GetProcessByID(Request.QueryString["id"]);Page.Response.Clear();Page.Response.ContentType = p.FileContentType; //內容類型Page.Response.AddHeader("Content-Disposition", "attachment;FileName=" + p.FileName);//文件名Page.Response.BinaryWrite(p.ProcessFile.ToArray());//文件內容Page.Response.End();}OK ,就這么簡單,現在我們只需要運行程序,然后Url中輸入ViewFile.aspx?id=6就可以讀取到ID=6的Visio文件并下載下來。
接下來再說Visio Viewer的調用,編寫一個新的頁面VisioView.aspx,
protected void Page_Load(object sender, EventArgs e){StringBuilder sb = new StringBuilder();sb.Append("<object classid=clsid:279D6C9A-652E-4833-BEFC-312CA8887857 id=vviewer ");sb.Append("codebase=http://download.microsoft.com/download/4/5/2/452f8090-413f-408f-83c0-edd66db786ee/vviewer.exe Width =100% Height = 600 > ");sb.Append("<param name=SRC value=" + "http://localhost:2303/VisioFile.aspx?id=6" + "> ");sb.Append("<param name=HighQualityRender value=1> ");sb.Append("<param name=BackColor value=#000000> ");sb.Append("<param name=PageColor value=#000000> ");sb.Append("<param name=PageVisible value=1> ");sb.Append("<param name=AlertsEnabled value=1> ");sb.Append("<param name=ContextMenuEnabled value=1> ");sb.Append("<param name=GridVisible value=1> ");sb.Append("<param name=PropertyDialogEnabled value=1> ");sb.Append("<param name=ScrollbarsVisible value=1> ");sb.Append("<param name=ToolbarVisible value=1> ");sb.Append("<param name=CurrentPageIndex value=1> ");sb.Append("<param name=Zoom value=-1> ");sb.Append("</object>");lvisio.Text = sb.ToString();//這里是一個Literal控件} 這個地方的代碼都是正確的,但是我們運行asp.net頁面卻會彈出錯誤“Microsoft Office Visio Viewer無法加載指定的URL或文件。”,如圖:
Visio文件正常下載,那么說明我們的src參數是正確的啊!這是什么原因造成的呢,經過簡單的研究,發現原來是Visio Viewer的一個Bug吧,這個控件他只認識Visio格式后綴的url,而我們這里的文件URL是VisioFile.aspx?id=6,這個地方Visio Viewer認為不是一個Visio文件,所以根本不加載其中的內容了。
那么怎么解決呢?辦法有好幾個:
1.做一個.vsd的httphandler,然后指定解釋.vsd格式的類,這樣URL就變成了XXX.vsd格式了。
2.加一個無聊的參數:xx=.vsd。這樣Visio Viewer就以為這個路徑是Visio文件并進行加載了。
我采用第二個方案,修改代碼第6行:
sb.Append("<param name=SRC value=" + "http://localhost:2303/VisioFile.aspx?id=6" + "&xx=.vsd> ");
OK,我們存放在數據庫中的Visio就可以正常顯示在Visio Viewer中了。
轉載于:https://www.cnblogs.com/studyzy/archive/2010/03/16/1687698.html
總結
以上是生活随笔為你收集整理的使用Visio Viewer载入数据库中的Visio图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PLM中BOM核心技术的研究[转]
- 下一篇: 古风男生网名108个