1、在線預覽Word文件
(1) 運行環境
① 瀏覽器:支持IE7-IE11(平台版本還支持Chrome和Firefox)
② IE工具欄-Internet 選項:將www.ntko.com加入到瀏覽器的可信站點中,不啟用保護模式,並將HTTPS驗證取消
③ 如果是開發人員首次使用文檔控件,需要將控件手動注冊控件,獲取控件的版本clisid以及版本信息Version(如果程序已經開發完則可以忽略此步驟)
(2) 創建一個加載控件的JS文件,用戶只需修改控件版本號Version,classid,cab包路徑,以及添加授權即可。具體可訪問http://dev.ntko.com:8000/查看
① JS文件代碼如下:(-1表示TRUE,0表示FALSE)
////----在線編輯word並保存 document.write('<object id="TANGER_OCX" classid="clsid:A64E3073-2016-4baf-A89D-FFE1FAA10EC0"'); document.write('codebase="NTKO/OfficeControl.cab#version=5,0,3,0" width="100%" height="100%"> '); document.write('<param name="Toolbars" value="-1"> '); // 工具欄 document.write('<param name="Menubar" value="0"> '); //菜單欄 document.write('<param name="CustomToolBar" value="-1"> '); document.write('<param name="Titlebar" value="-1"> '); //標題欄 document.write('<param name="Caption" value="華測計量技術有限公司專用">');//標題內容 document.write('<param name="IsUseControlAgent" value="-1"> '); //是否是控制請求數據,其他請他不允許 document.write('<param name="IsNoCopy" value="0"> '); //0不允許復制 document.write('<param name="IsDirectConnect" value="-1"> '); document.write('<param name="DefaultOpenDocType" value="1"> ');//1表示只能打開word文檔 document.write('<param name="FileOpen" value="0"> '); document.write('<param name="FileNew" value="0"> '); document.write('<param name="FileSave" value="0"> '); document.write('<param name="FileSaveAs" value="0"> '); document.write('<param name="FilePrint" value="0"> '); document.write('<param name="FilePrintPreview" value="0"> '); document.write('<param name="ProductCaption" value="Office Anywhere 3.0"> '); document.write('<param name="ProductKey" value="65F867689D7FF5CD02FBE4AA23764306F715A9E2">'); document.write('<SPAN STYLE="color:red">不能裝載NTKO OFFICE文檔控件。請在檢查瀏覽器的選項中檢查瀏覽器的安全設置。</SPAN> '); document.write('</object> ');
① View代碼如下:
@{ ViewBag.Title = "Word"; } <h2>Index</h2> <html> <head> <title>NTKO Office文檔控件預覽Word修改保存回服務器演示示例</title> <meta http-equiv="content-type" content="text/html; charset=gb2312"> </head> <body bgcolor="#ffffff" ;> <p> <span>針對Word書簽的操作</span> <button onclick="AddPicToWord()">添加圖片</button> <button onclick="ReplacePicToWord()">替換圖片</button> <button onclick="AddTextToWord()">插入文字</button> <button onclick="ReplaceTextToWord()">替換指定的文字</button> <input type="submit" value="保存文檔" id="_upload"> </p> <script src="~/Scripts/ntkoGenObj.js"></script> </body> </html> <script src="~/Scripts/jquery-1.10.2.min.js"></script> <script language="javascript"> //ntko控件初始化完成后才進行文檔的加載 $(function () { inIt(); }); function inIt() { if (TANGER_OCX == null) { alert("NTKO OFFICE文檔控件未能正確裝載。請在本頁面裝載時窗口上方出現的提示條上點擊裝載ActiveX控件,並在隨后出現的安裝ActiveX的對話框中選擇‘是’。"); return; } OpenFile(); } //以文件流的形式加載文件 function OpenFile() { TANGER_OCX.BeginOpenFromURL('@Url.Action("ReturnFileStream", "WordView")', true); } //保存修改后的文件回服務器 $("#_upload").click(function () { var list = TANGER_OCX.ActiveDocument.BookMarks;//書簽列表 alert("書簽數:" + list.Count); TANGER_OCX.SaveToURL('@Url.Action("uploadFile", "WordView")', "TANGER_OCX", "", "", "", true); }); var bookmarkname = "審核人"; var bookmarkname2 = "批准人"; //添加圖片 function AddPicToWord() { //書簽列表 var list = TANGER_OCX.ActiveDocument.BookMarks; alert("書簽數為:" + list.Count); //判斷書簽是否存在 if (TANGER_OCX.ActiveDocument.BookMarks.Exists(bookmarkname) && TANGER_OCX.ActiveDocument.BookMarks.Exists(bookmarkname2)) { alert("書簽存在,開始插入審核人簽名"); TANGER_OCX.ActiveDocument.Application.Selection.GoTo(-1, 0, 0, bookmarkname);//跳轉指定書簽位置 TANGER_OCX.AddPicFromURL("@Url.Content("~/NTKO/william.jpg")", true, 0, 0, 1, 100, 1);//添加圖片,true是以浮動圖片插入,false就相當於嵌入在光標處了 ---插入正確 //AddIdtoPicture(bookmarkname);//為圖片添加唯一標識(暫時用不到) alert("書簽存在,開始插入批准人簽名"); TANGER_OCX.ActiveDocument.Application.Selection.GoTo(-1, 0, 0, bookmarkname2);//跳轉指定書簽位置 TANGER_OCX.AddPicFromURL("@Url.Content("~/NTKO/jimly.jpg")", true, 0, 0, 1, 100, 1);//添加圖片,true是以浮動圖片插入,false就相當於嵌入在光標處了 ---插入正確 alert("圖片添加成功"); } } //為圖片列表中圖片添加唯一標識(圖片的AlternativeText屬性可以設置為書簽的名字name) function AddIdtoPicture(name) { alert("開始添加唯一標識" + name); var shapes = TANGER_OCX.ActiveDocument.Shapes; for (var i = 1; i <= shapes.Count; i++) { if (shapes(i).Type == 13) { if (shapes(i).AlternativeText == "") { alert(name); shapes(i).AlternativeText = name; } } } } //判斷書簽是否存在,然后刪除圖片,替換圖片 function ReplacePicToWord() { var list = TANGER_OCX.ActiveDocument.BookMarks; alert("書簽數為:" + list.Count); for (var i = 1; i <= list.Count; i++) { var markname = TANGER_OCX.ActiveDocument.BookMarks(i).Name; alert(markname); } if (TANGER_OCX.ActiveDocument.BookMarks.Exists(bookmarkname)) { alert("書簽存在,開始替換審核人簽名"); var shapes = TANGER_OCX.ActiveDocument.Shapes; alert("圖片數量" + shapes.Count); for (var i = 1; i <= shapes.Count; i++) { alert(shapes(i).Type + shapes(i).AlternativeText); //根據圖片的類型以及AlternativeText屬性(書簽的名字來確定圖片) if (shapes(i).Type == 13 && shapes(i).AlternativeText == "william") { shapes(i).Delete(); alert("刪除成功"); } } TANGER_OCX.ActiveDocument.Application.Selection.GoTo(-1, 0, 0, bookmarkname);//跳轉指定書簽位置 TANGER_OCX.AddPicFromURL("@Url.Content("~/NTKO/jimly.jpg")", true, 0, 0, 1, 100, 1);//添加圖片,true是以浮動圖片插入,false就相當於嵌入在光標處了 ---插入正確 } else { alert("書簽不存在,請添加"); } } </script> <script> var bookName = "審核時間"; //在書簽位置設置書簽值 function AddTextToWord() { if (TANGER_OCX.ActiveDocument.BookMarks.Exists(bookName)) { //判斷書簽是否存在 TANGER_OCX.SetBookmarkValue(bookName, "2018/03/13"); //添加書簽值 TANGER_OCX.ActiveDocument.Bookmarks(bookName).Range.Select();//選中書簽的內容 //設置為上標 TANGER_OCX.ActiveDocument.Application.Selection.Font.SuperScript = 9999998; TANGER_OCX.ActiveDocument.Application.Selection.Font.Italic = true;//設置成斜體 TANGER_OCX.ActiveDocument.Application.Selection.Font.Bold = true;//加粗 TANGER_OCX.ActiveDocument.Application.Selection.Font.StrikeThrough = true;//帶有刪除線 TANGER_OCX.ActiveDocument.Application.Selection.Font.Underline = true;//帶有下划線 TANGER_OCX.ActiveDocument.Application.Selection.Font.NameFarEast = "宋體";//字體 TANGER_OCX.ActiveDocument.Application.Selection.Font.Size = 18;//大小 TANGER_OCX.ActiveDocument.Application.Selection.Font.Color = 255;//顏色 //設置為下標 //TANGER_OCX.ActiveDocument.Application.Selection.Font.Subscript = 9999998; } } //判斷書簽是否存在,然后替換書簽值(替換文本) function ReplaceTextToWord() { if (TANGER_OCX.ActiveDocument.BookMarks.Exists(bookName)) { TANGER_OCX.SetBookmarkValue(bookName, "YYYYYYYYYYYY"); } } //替換文當中所有內容和Text值相等的值(暫時用不着) function Searchs() { var sel = null; sel = TANGER_OCX.ActiveDocument.Application.Selection; var result = true; sel.Find.ClearFormatting(); sel.Find.Text = "王永樂"; sel.Find.Forward = true; sel.Find.Wrap = 1; do { result = sel.Find.Execute(); if (result) { sel.Font.Color = 255; sel.Font.Name = "Arial"; sel.Font.Size = 24; } } while (result); } </script>
① Controller代碼如下:
/// <summary> /// 打開文件(流的形式返回) /// </summary> /// <returns></returns> public ActionResult ReturnFileStream() { var bytes = Properties.Resources.word; var fileStream = new MemoryStream(bytes); return new FileStreamResult(fileStream,"application/xhtml+xml"); } /// <summary> /// 保存文件 /// </summary> /// <returns></returns> [HttpPost] public ActionResult uploadFile() { var files = Request.Files[0]; var path = Server.MapPath($"~/{DateTime.Now.ToLongDateString()}.doc"); FileStream fs = new FileStream(path, FileMode.OpenOrCreate); byte[] bytes = new byte[files.InputStream.Length]; files.InputStream.Read(bytes, 0, bytes.Length); fs.Write(bytes, 0, bytes.Length); fs.Close(); return View("Index"); }