OfficeControl.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807
  1. /**
  2. * office控件。
  3. * 使用方法:
  4. * var obj=new OfficeControl();
  5. * obj.renderTo("divContainer",{fileId:123});
  6. * divContainer: 文档容器id
  7. * fileId:附件id,如果指定那么根据该文件id加载word文档。
  8. *
  9. * saveRemote:保存文档到服务器
  10. *
  11. * @returns {OfficeControl}
  12. */
  13. OfficeControl=function(){
  14. {
  15. var Sys = {};
  16. var ua = navigator.userAgent.toLowerCase();
  17. var s;
  18. (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] : (s = ua
  19. .match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] : (s = ua
  20. .match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] : (s = ua
  21. .match(/opera.([\d.]+)/)) ? Sys.opera = s[1] : (s = ua
  22. .match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
  23. this.controlId="";
  24. this.controlObj=null;
  25. this.height="100%";
  26. this.width="100%";
  27. var _self=this;
  28. this.isFileOpen=false;
  29. this.templatetype = 1;// 模板类型
  30. //这里发布给客户时,可以修改ProductCaption,ProductKey值。
  31. this.params={
  32. Caption:"欢迎使用",
  33. MakerCaption:"广州宏天软件有限公司",
  34. MakerKey:"CF4960BFDB79D36ADDC5493B116D39D6A4E335D9",
  35. ProductCaption:"广州宏天软件有限公司",
  36. ProductKey:"32B10860DB12537FF0003CC2BFD0FA190CB0407E",
  37. // WebUserName:"广州宏天软件有限公司",
  38. TitlebarColor:"14402205",
  39. IsCheckEkey:"0",
  40. IsUseUTF8URL:"-1",
  41. IsUseUTF8Data:"-1",
  42. BorderStyle:"1",
  43. BorderColor:"14402205",
  44. TitlebarTextColor:"0",
  45. MenubarColor:"14402205",
  46. MenuButtonColor:"16180947",
  47. MenuBarStyle:"3",
  48. MenuButtonStyle:"7"
  49. };
  50. this.config={doctype:'doc',fileId:"",controlId:"officeObj",myNum:'0',user:{}};
  51. };
  52. /**
  53. * 处理文件菜单事件。
  54. */
  55. this.itemclick=function(item){
  56. var txt=item.text;
  57. switch(txt){
  58. case "新建":
  59. _self.newDoc();
  60. break;
  61. case "打开":
  62. _self.controlObj.showDialog(1);
  63. break;
  64. case "另存为":
  65. if(!_self.isFileOpen) return;
  66. _self.controlObj.showDialog(3);
  67. break;
  68. case "关闭":
  69. if(!_self.isFileOpen) return;
  70. _self.closeDoc();
  71. break;
  72. case "打印设置":
  73. if(!_self.isFileOpen) return;
  74. _self.controlObj.showdialog(5);
  75. break;
  76. case "打印预览":
  77. if(!_self.isFileOpen) return;
  78. _self.controlObj.PrintPreview();
  79. break;
  80. case "打印":
  81. if(!_self.isFileOpen) return;
  82. _self.controlObj.printout(true);
  83. break;
  84. }
  85. },
  86. /**
  87. * 获取文档类型。
  88. */
  89. this.getDocType=function(){
  90. var docType="Word.Document";
  91. var type=this.config.doctype;
  92. switch(type){
  93. case "doc":
  94. docType="Word.Document";
  95. break;
  96. case "xls":
  97. docType="Excel.Sheet";
  98. break;
  99. case "ppt":
  100. docType="PowerPoint.Show";
  101. break;
  102. }
  103. return docType;
  104. },
  105. //click事件需要事先进行定义。
  106. this.memuItems= { width: 120, items:
  107. [{text: '新建', click: this.itemclick },
  108. {text: '打开', click: this.itemclick },
  109. {text: '另存为', click: this.itemclick },
  110. {text: '关闭', click: this.itemclick },
  111. {line: true },
  112. {text: '打印设置', click: this.itemclick },
  113. {text: '打印预览', click: this.itemclick },
  114. {text: '打印', click: this.itemclick }]
  115. };
  116. /**
  117. * 处理菜单点击事件。
  118. */
  119. this.buttonClick=function(item){
  120. var txt=item.text;
  121. switch(txt){
  122. case "留痕":
  123. _self.setDocUser();
  124. _self.controlObj.ActiveDocument.TrackRevisions=true;
  125. break;
  126. case "不留痕":
  127. _self.controlObj.ActiveDocument.TrackRevisions=false;
  128. break;
  129. case "清除痕迹":
  130. _self.controlObj.ActiveDocument.AcceptAllRevisions();
  131. break;
  132. case "模版套红":
  133. _self.insertContentTemplate();
  134. break;
  135. case "选择模版":
  136. _self.insertTemplate();
  137. break;
  138. case "手写签名":
  139. _self.insertHandSign();
  140. break;
  141. case "盖章":
  142. _self.signature();
  143. break;
  144. case "全屏":
  145. _self.controlObj.FullScreenMode=true;
  146. break;
  147. case "转成PDF":
  148. _self.officeToPdf();
  149. break;
  150. case "Ekey盖章":
  151. _self.signatureFromEkey();
  152. break;
  153. case "PDF盖章":
  154. _self.signaturePdfFromEkey();
  155. break;
  156. }
  157. },
  158. /**
  159. * 手写签名
  160. */
  161. this.insertHandSign=function(){
  162. try{
  163. _self.controlObj.DoHandSign2(
  164. _self.config.user.name,//手写签名用户名称
  165. "ntko",//signkey,DoCheckSign(检查印章函数)需要的验证密钥。
  166. 0,//left
  167. 0,//top
  168. 1,//relative,设定签名位置的参照对象.0:表示按照屏幕位置插入,此时,Left,Top属性不起作用。1:光标位置;2:页边距;3:页面距离 4:默认设置栏,段落(为兼容以前版本默认方式)
  169. 100);
  170. }catch(err){
  171. $.ligerDialog.error("insertHandSign:" +err.name + ": " + err.message);
  172. }
  173. },
  174. /**
  175. * 可以设置文件用户
  176. */
  177. this.setDocUser=function(){
  178. with(_self.controlObj.ActiveDocument.Application){
  179. UserName = _self.config.user.name;//设置用户信息
  180. UserInitials= _self.config.user.name;//设置用户信息缩写
  181. }
  182. },
  183. /**
  184. * 获取模版
  185. */
  186. this.getTemplate=function(callback){
  187. var url=__ctx +"/platform/system/sysOfficeTemplate/dialog.ht?type="+this.templatetype;
  188. var winArgs="dialogWidth=600px;dialogHeight=400px;help=0;status=0;scroll=1;center=1";
  189. url=url.getNewUrl();
  190. /*var rtn=window.showModalDialog(url,"",winArgs);
  191. return rtn;*/
  192. /*KILLDIALOG*/
  193. DialogUtil.open({
  194. height:400,
  195. width: 600,
  196. title : '获取模版',
  197. url: url,
  198. isResize: true,
  199. sucCall:callback
  200. });
  201. },
  202. /**
  203. * 模版套红。
  204. */
  205. this.insertContentTemplate=function(){
  206. try{
  207. /* this.templatetype = 2;
  208. var rtn=_self.getTemplate();
  209. this.templatetype = 1;
  210. if(rtn==undefined || rtn==null ){
  211. return false;
  212. }
  213. var templateUrl = __ctx + "/platform/system/sysOfficeTemplate/getTemplateById.ht?templateId=" + rtn.templateId;
  214. //选择对象当前文档的所有内容
  215. var curSel = _self.controlObj.ActiveDocument.Application.Selection;
  216. curSel.WholeStory();
  217. curSel.Cut();
  218. if(!(Sys.firefox) && !(Sys.chrome)){ //IE是同步的,它 会等待模版加载成功后执行书签的插入 (火狐和谷歌就不可以)
  219. //插入模板
  220. _self.controlObj.AddTemplateFromURL(templateUrl); //AddTemplateFromURL
  221. var BookMarkName = "content";
  222. if(!_self.controlObj.ActiveDocument.BookMarks.Exists(BookMarkName)){
  223. alert("Word 模板中不存在名称为:\""+BookMarkName+"\"的书签!");
  224. return false;
  225. }
  226. var bkmkObj = _self.controlObj.ActiveDocument.BookMarks(BookMarkName);
  227. var saverange = bkmkObj.Range;
  228. saverange.Paste();
  229. _self.controlObj.ActiveDocument.Bookmarks.Add(BookMarkName,saverange);
  230. }else{
  231. //插入模板(火狐谷歌 异步)
  232. _self.controlObj.AddTemplateFromURL(templateUrl); //AddTemplateFromURL
  233. }*/
  234. this.templatetype = 2;
  235. _self.getTemplate(function(rtn){
  236. this.templatetype = 1;
  237. if(rtn==undefined || rtn==null ){
  238. return false;
  239. }
  240. var templateUrl = __ctx + "/platform/system/sysOfficeTemplate/getTemplateById.ht?templateId=" + rtn.templateId;
  241. //选择对象当前文档的所有内容
  242. var curSel = _self.controlObj.ActiveDocument.Application.Selection;
  243. curSel.WholeStory();
  244. curSel.Cut();
  245. if(!(Sys.firefox) && !(Sys.chrome)){ //IE是同步的,它 会等待模版加载成功后执行书签的插入 (火狐和谷歌就不可以)
  246. //插入模板
  247. _self.controlObj.AddTemplateFromURL(templateUrl); //AddTemplateFromURL
  248. var BookMarkName = "content";
  249. if(!_self.controlObj.ActiveDocument.BookMarks.Exists(BookMarkName)){
  250. alert("Word 模板中不存在名称为:\""+BookMarkName+"\"的书签!");
  251. return false;
  252. }
  253. var bkmkObj = _self.controlObj.ActiveDocument.BookMarks(BookMarkName);
  254. var saverange = bkmkObj.Range;
  255. saverange.Paste();
  256. _self.controlObj.ActiveDocument.Bookmarks.Add(BookMarkName,saverange);
  257. }else{
  258. //插入模板(火狐谷歌 异步)
  259. _self.controlObj.AddTemplateFromURL(templateUrl); //AddTemplateFromURL
  260. }
  261. });
  262. }catch(err){
  263. $.ligerDialog.error("insertTemplate:" +err.name + ": " + err.message);
  264. }
  265. },
  266. /**
  267. * 插入word模版。
  268. */
  269. this.insertTemplate=function(){
  270. try{
  271. /*var rtn=_self.getTemplate();
  272. if(rtn==undefined || rtn==null ){
  273. return;
  274. }
  275. var headFileURL = __ctx + "/platform/system/sysOfficeTemplate/getTemplateById.ht?templateId=" + rtn.templateId;
  276. _self.controlObj.ActiveDocument.Application.Selection.HomeKey(6,0);//光标移动到文档开头
  277. _self.controlObj.OpenFromURL(headFileURL);//在光标位置插入红头文档
  278. */
  279. _self.getTemplate(function(rtn){
  280. if(rtn==undefined || rtn==null ){
  281. return;
  282. }
  283. var headFileURL = __ctx + "/platform/system/sysOfficeTemplate/getTemplateById.ht?templateId=" + rtn.templateId;
  284. _self.controlObj.ActiveDocument.Application.Selection.HomeKey(6,0);//光标移动到文档开头
  285. _self.controlObj.OpenFromURL(headFileURL);//在光标位置插入红头文档
  286. });
  287. }catch(err){
  288. $.ligerDialog.error("insertTemplate:" +err.name + ": " + err.message);
  289. }
  290. },
  291. /**
  292. * 获取控件的html。
  293. */
  294. this.getControlHtml=function(controlId){
  295. var cabPath=__ctx +"/media/office/OfficeControl.cab#version=5,0,2,5";
  296. var str = '';
  297. if (Sys.ie) {
  298. str = '<object id="'+controlId+'" codeBase="'+cabPath+'" height="'+this.height+'" width="'+this.width+'" classid="clsid:A39F1330-3322-4a1d-9BF0-0BA2BB90E970" style="z-index:-1;">';
  299. for(var key in this.params){
  300. str+=' <param name="'+key+'" value="'+this.params[key]+'"> ';
  301. }
  302. str+="</object>";
  303. } else if (Sys.firefox||Sys.chrome) {
  304. if(this.config.doctype=='pdf'){
  305. str = '<object id="'+controlId+'" codeBase="'+cabPath+'" height="'+this.height+'" width="'+this.width+'" type="application/ntko-plug" ForOnSaveToURL="saveMethodOnComplete" ForOndocumentopened="documentOpenedOnComplete'+ this.config.myNum +'" ForOnAddTemplateFromURL="addTemplateOnComplete'+ this.config.myNum +'" ';
  306. }else{
  307. str = '<object id="'+controlId+'" codeBase="'+cabPath+'" height="'+this.height+'" width="'+this.width+'" type="application/ntko-plug" ForOnSaveAsOtherFormatToURL="saveMethodOnComplete" ForOndocumentopened="documentOpenedOnComplete'+ this.config.myNum +'" ForOnAddTemplateFromURL="addTemplateOnComplete'+ this.config.myNum +'" ';
  308. }for(var key in this.params){
  309. str += '_'+key+'="'+this.params[key]+'" ';
  310. }
  311. str +='clsid="{A39F1330-3322-4a1d-9BF0-0BA2BB90E970}" >';
  312. // str +='<SPAN STYLE="color:red">尚未安装NTKO Web FireFox跨浏览器插件。请点击<a href="ntkoplugins.xpi">安装组1件</a></SPAN> ';
  313. str +='</object> ';
  314. }/*else{
  315. alert("对不起,控件暂时不支持该浏览器!");
  316. }*/
  317. //是火狐和谷歌时 增加插入套红模版和只读设置的回调函数
  318. if(Sys.firefox||Sys.chrome){
  319. str += ' <script type="text/javascript" > ';
  320. str += ' function addTemplateOnComplete'+ this.config.myNum +'(){ ';
  321. str += ' addTemplateOnComplete("'+this.config.myNum+'"); ';
  322. str += ' } ';
  323. str += ' ';
  324. str += ' function documentOpenedOnComplete'+ this.config.myNum +'(){ ';
  325. str += ' documentOpenedOnComplete("'+this.config.myNum+'"); ';
  326. str += ' } ';
  327. str += ' </script> ';
  328. }
  329. return str;
  330. },
  331. /**
  332. * 将控件添加到div容器中。
  333. * 第一个参数:
  334. * div的容器ID
  335. * 第二个参数:
  336. * conf:
  337. * doctype:文挡类型:可以为doc,xls,ppt
  338. * fileId:服务器保存的文件ID
  339. */
  340. this.renderTo=function(divContainerId,conf){
  341. this.config=$.extend({},this.config,conf);
  342. //格式为空时默认设置为doc文件
  343. if(!this.config.doctype){
  344. this.config.doctype = "doc";
  345. }
  346. if(!(Sys.firefox) && !(Sys.chrome)){
  347. Sys.ie = true;
  348. }
  349. this.controlId="office_" + divContainerId;
  350. var html=this.getControlHtml(this.controlId);
  351. var menuBar = '<div name="menuBar" ></div>';
  352. $("#" +divContainerId).html("");
  353. $("#" +divContainerId).append(menuBar);
  354. $("#" +divContainerId).append(html);
  355. var obj=document.getElementById(this.controlId);
  356. this.controlObj=obj;
  357. this.controlObj.MenuBar=false;
  358. this.controlObj.Titlebar=false;
  359. this.controlObj.IsShowToolMenu=true;
  360. this.controlObj.ToolBars=true;
  361. var jqControlObj=$(this.controlObj);
  362. //修改控件的高度。
  363. jqControlObj.height(jqControlObj.parent().height()-26);
  364. var docType=this.config.doctype;
  365. var items=[];
  366. //2013-05-31 add
  367. if(docType=="pdf"){
  368. items.push( { text: 'PDF盖章' ,click:this.buttonClick});
  369. }else{
  370. items.push({ text: '文件', menu: this.memuItems});
  371. if(docType=="doc"){
  372. items.push({ text: '留痕',click:this.buttonClick });
  373. items.push({ text: '不留痕' ,click:this.buttonClick});
  374. items.push( { text: '清除痕迹' ,click:this.buttonClick});
  375. }
  376. items.push( { text: '模版套红' ,click:this.buttonClick});
  377. items.push({ text: '选择模版' ,click:this.buttonClick});
  378. items.push({ text: '手写签名' ,click:this.buttonClick});
  379. items.push({ text: '盖章' ,click:this.buttonClick});
  380. items.push( { text: '转成PDF' ,click:this.buttonClick});
  381. items.push( { text: 'Ekey盖章' ,click:this.buttonClick});
  382. }
  383. items.push({ text: '全屏' ,click:this.buttonClick});
  384. $("#" +divContainerId +" div[name='menuBar']").ligerMenuBar({ items:items});
  385. if(Sys.ie||Sys.firefox||Sys.chrome){
  386. if(docType=="pdf"){
  387. this.addPDFSupport();
  388. this.isFileOpen=true;
  389. }else{
  390. this.initDoc();
  391. }
  392. }
  393. else{
  394. $.ligerDialog.warn('office控件只支持IE、Firefox和Chrome 32位版的浏览器!');
  395. }
  396. };
  397. /**
  398. * 控件载入时,载入文档。
  399. */
  400. this.initDoc=function(){
  401. //指定了文件。
  402. if(this.config.fileId!="" && this.config.fileId>0){
  403. var path= __ctx + "/platform/system/sysFile/getFileById.ht?fileId=" + this.config.fileId;
  404. try{
  405. this.controlObj.OpenFromURL(path);
  406. this.isFileOpen=true;
  407. }
  408. catch(err){
  409. try{
  410. this.addPDFSupport();
  411. this.isFileOpen=true;
  412. }
  413. catch(err){
  414. this.newDoc();
  415. }
  416. }
  417. }
  418. //新建文档。
  419. else{
  420. this.newDoc();
  421. }
  422. //IE浏览器是同步的 增加 设置文档是否只读,其它的为异步(由回调接管函数 OfficeControl.js 中有 documentOpenedOnComplete 处理 )
  423. if(Sys.ie){
  424. this.setFileReadOnly(false);
  425. }
  426. };
  427. /**
  428. * 关闭文档。
  429. */
  430. this.closeDoc=function(){
  431. if(Sys.ie||Sys.firefox||Sys.chrome){ //$.browser.msie
  432. this.initDoc();
  433. }else{
  434. $.ligerDialog.warn('office控件只支持IE、Firefox和Chrome 32位版的浏览器!');
  435. }
  436. try{
  437. this.controlObj.close();
  438. this.isFileOpen=false;
  439. }catch(err){
  440. $.ligerDialog.error('closeDoc:' +err.name + ": " + err.message);
  441. }
  442. };
  443. /**
  444. * 新建文档。
  445. */
  446. this.newDoc=function(){
  447. try
  448. {
  449. var docType=this.getDocType();
  450. this.controlObj.CreateNew(docType);
  451. this.isFileOpen=true;
  452. }
  453. catch(err){
  454. try{
  455. this.controlObj.CreateNew("WPS.Document");
  456. this.isFileOpen=true;
  457. }catch(err){
  458. $.ligerDialog.error("newDoc:" +err.name + ": " + err.message);
  459. }
  460. }
  461. };
  462. /**
  463. * 保存文件到服务器。
  464. * 服务器返回文件id到this.config.fileId,同时返回文件ID。
  465. */
  466. this.saveRemote=function(inputObjNum){
  467. var path= __ctx + "/platform/system/sysFile/saveFile.ht";
  468. var uploadName = this.controlId +"_name";
  469. var params="fileId=" + this.config.fileId + "&uploadName="+ uploadName;
  470. try{
  471. //保存数据到服务器。
  472. var curDate=new Date();
  473. var docName=Math.random()*curDate.getMilliseconds()*10000;
  474. /*如果人后辍名为空时,需要用对象的类型来区分是什么文件返回当前控件中的文档类型,
  475. 只读 0: 没有文档; 100 =其他文档类型;
  476. 1=word;2=Excel.Sheet或者 Excel.Chart ;
  477. 3=PowerPoint.Show; 4= Visio.Drawing;
  478. 5=MSProject.Project; 6= WPS Doc;
  479. 7:Kingsoft Sheet; 51 = PDF文档
  480. */
  481. if(this.config.doctype==''||this.config.doctype==null|| 'undefined' == typeof (this.config.doctype)){
  482. var type = this.controlObj.DocType;
  483. if(type==2){
  484. this.config.doctype = "xls";
  485. }else if(type==3){
  486. this.config.doctype = "ppt";
  487. }else if(type==51){
  488. this.config.doctype = "pdf";
  489. }else{
  490. this.config.doctype = "doc";
  491. }
  492. }
  493. var result;
  494. if(Sys.firefox||Sys.chrome){ //火狐谷歌浏览器控件文档保存事件(异步的)
  495. if(typeof(inputObjNum)!=undefined && inputObjNum!=null){
  496. params += "&inputObjNum="+ inputObjNum; // 用于保存返回的值对象的名称 (异步的才会有)
  497. }
  498. //当你用SaveToURL方法时,回调属性用:ForOnSaveToURL 如果是SaveAsOtherFormatToURL的话,就用ForOnSaveAsOtherFormatToURL回调
  499. if(this.config.doctype=='pdf'){
  500. //直接保存文档,不用转换成指定是什么格式的文件方法
  501. this.controlObj.SaveToURL(path,uploadName,params,docName+"." + this.config.doctype,0);
  502. }else{
  503. //保存文档时要转换成指定兼容文档的的格式方法
  504. this.controlObj.SaveAsOtherFormatToURL(5,path,uploadName,params,docName+"." + this.config.doctype,0);
  505. }
  506. result=-11;
  507. }else{ //IE是同步的
  508. //SaveToURL
  509. if(this.config.doctype=='pdf'){
  510. //直接保存文档,不用转换成指定是什么格式的文件方法
  511. result=this.controlObj.SaveToURL(path,uploadName,params,docName+"." + this.config.doctype,0);
  512. }else{
  513. //保存文档时要转换成指定兼容文档的的格式方法
  514. result=this.controlObj.SaveAsOtherFormatToURL(5,path,uploadName,params,docName+"." + this.config.doctype,0);
  515. }
  516. this.config.fileId=result;
  517. }
  518. return result;
  519. }
  520. catch(err){
  521. //alert("saveRemote:" +err.name + ": " + err.message);
  522. if(Sys.firefox||Sys.chrome){
  523. return -13; //报错时表示火狐谷歌下OFFICE不正常
  524. }
  525. return -12;
  526. }
  527. };
  528. /**
  529. * 对文档进行签单
  530. */
  531. this.signature=function(){
  532. var url = __ctx + "/platform/system/seal/dialog.ht";
  533. var winArgs = "dialogWidth=800px;dialogHeight=600px;help=0;status=0;scroll=1;center=0;resizable=1;";
  534. url = url.getNewUrl();
  535. /*var retVal = window.showModalDialog(url, "", winArgs);
  536. if(typeof(retVal)==undefined||retVal==null){
  537. return false;
  538. }
  539. if(retVal.fileId.isEmpty()){
  540. return false;
  541. }
  542. var sealUrl=__ctx + "/platform/system/sysFile/getFileById.ht?fileId=" + retVal.fileId;
  543. try{
  544. // this.controlObj.AddSignFromURL(retVal.userName,sealUrl);
  545. this.controlObj.AddSecSignFromURL(_self.config.user.name,//签章的用户名
  546. sealUrl,//印章所在服务器相对url
  547. 0,//left
  548. 0,//top
  549. 1,//relative
  550. 2, //print mode 2
  551. false,//是是否使用证书,true或者false,
  552. false //是否锁定印章
  553. );
  554. }catch(err){
  555. alert("signature:" +err.name + ": " + err.message);
  556. return -1;
  557. }*/
  558. var that=this;
  559. /*KILLDIALOG*/
  560. DialogUtil.open({
  561. height:600,
  562. width: 800,
  563. title : '对文档进行签单',
  564. url: url,
  565. isResize: true,
  566. //自定义参数
  567. sucCall:function(retVal){
  568. if(typeof(retVal)==undefined||retVal==null){
  569. return false;
  570. }
  571. if(retVal.fileId.isEmpty()){
  572. return false;
  573. }
  574. var sealUrl=__ctx + "/platform/system/sysFile/getFileById.ht?fileId=" + retVal.fileId;
  575. try{
  576. that.controlObj.AddSecSignFromURL(_self.config.user.name,//签章的用户名
  577. sealUrl,//印章所在服务器相对url
  578. 0,//left
  579. 0,//top
  580. 1,//relative
  581. 2, //print mode 2
  582. false,//是是否使用证书,true或者false,
  583. false //是否锁定印章
  584. );
  585. }catch(err){
  586. alert("signature:" +err.name + ": " + err.message);
  587. return -1;
  588. }
  589. }
  590. });
  591. };
  592. /**
  593. * 对Office文档进行Ekey硬件签章
  594. */
  595. this.signatureFromEkey = function(){
  596. if(this.controlObj!=null){
  597. /*if(!this.controlObj.IsEkeyConnected) //暂时不确定
  598. {
  599. alert("没有检测到EKEY,请将EKEY插入到计算机!然后点击确定继续.");
  600. return;
  601. }*/
  602. this.controlObj.AddSecSignFromEKEY(
  603. _self.config.user.name, //username
  604. 0, //left
  605. 0, // top,
  606. 1, // relative,
  607. 2, // PrintMode,
  608. false, // IsUseCertificate,
  609. false, // IsLocked,
  610. true, // IsCheckDocChange,
  611. false, // IsShowUI
  612. true, // signpass,
  613. -1, // ekeySignIndex,
  614. true, // IsAddComment,
  615. true // IsBelowText
  616. );
  617. }
  618. };
  619. /**
  620. * 对PDF文档进行Ekey硬件签章
  621. */
  622. this.signaturePdfFromEkey=function(){
  623. if(this.controlObj!=null){
  624. /*if(!this.controlObj.IsEkeyConnected)
  625. {
  626. alert("没有检测到EKEY.请将EKEY插入到计算机!然后点击确定继续.");
  627. return;
  628. }*/
  629. alert("signaturePdfFromEkey");
  630. this.controlObj.ActiveDocument.AddPDFSecSignFromEKEY(_self.config.user.name,null,"111111",null,1,null,null,null,null,true,false,true,false,null);
  631. }
  632. };
  633. /**
  634. * 把Office文件转换成PDF文件。
  635. * 服务器返回文件id到this.config.fileId,同时返回文件ID。
  636. */
  637. this.officeToPdf=function(){
  638. if(!confirm("文档转换成PDF后将不可以恢复原有格式文档,确认转换吗?"))
  639. {
  640. return;
  641. }
  642. try{
  643. //保存数据到服务器。
  644. var pdfUrl = __ctx + "/platform/system/sysFile/saveFilePdf.ht";
  645. var uploadName = this.controlId +"_pdf";
  646. var params="fileId=" + this.config.fileId + "&uploadName="+ uploadName;
  647. var pdfName = this.config.fileId+".pdf";
  648. this.controlObj.PublishAsPDFToURL(pdfUrl,uploadName,params,pdfName,0,null,true,true,false,true,true,true);
  649. //window.location.href=window.location.href;
  650. }
  651. catch(err){
  652. alert("officeToPdf:" +err.name + ": " + err.message);
  653. }
  654. };
  655. /**
  656. * 把打开PDF文件
  657. */
  658. this.addPDFSupport=function()
  659. {
  660. // this.controlObj = document.getElementById(this.controlId);
  661. if(document.URL.indexOf("file://")>=0)
  662. {
  663. if(!confirm("如果从本地磁盘打开的URL,需要手工运行命令'regsvr32 ntkopdfdoc.dll'注册插件文件.您确认已经注册了吗?"))
  664. {
  665. return;
  666. }
  667. }
  668. var path = __ctx + "/platform/system/sysFile/getFileById.ht?fileId=" + this.config.fileId;
  669. this.controlObj.AddDocTypePlugin(".pdf","PDF.NtkoDocument","4.0.0.1",__ctx+"/media/office/ntkopdfdoc.cab",51,true); //引用pdf组件
  670. // this.controlObj.BeginOpenFromURL(path); //打开PDF从URL "media/office/bpm.pdf"
  671. this.controlObj.OpenFromURL(path);
  672. };
  673. /**
  674. * 参数为true时把文档设置为只读,false按文档原来的权限设置
  675. */
  676. this.setFileReadOnly=function(isRead)
  677. {
  678. };
  679. };
  680. /**
  681. * 火狐谷歌浏览器控件文档保存事件(异步的,IE是同步的)回调接管函数 注意不在OfficeControl类里面 一定是单独方法 是控件属性的ForOnSaveToURL对应的方法 (SaveToURL保存后的回调函数)
  682. * html 为后台返回的内容
  683. */
  684. var saveMethodOnCompleteNum = 0; // 有几次回调文件了
  685. function saveMethodOnComplete(type, code, html) {
  686. saveMethodOnCompleteNum = saveMethodOnCompleteNum + 1;
  687. var arrys = html.split("##");
  688. var arryNum = arrys[0]; //保存对象的序号
  689. var arryValue = arrys[1]; //要保存的内容
  690. if(arryNum>=0){
  691. //返回小于1的情况要不要重新获取旧值做保存?
  692. /*if(arryValue<=0){
  693. arryValue = OfficePlugin.fileObjs.get(arryNum).getAttribute("value"); //保存到对象的值;
  694. }*/
  695. if(arryValue>0){
  696. OfficePlugin.fileObjs.get(arryNum).setAttribute("value",arryValue); //保存到对象的值
  697. // console.info('设置值结束');
  698. OfficePlugin.officeObjs[arryNum].config.fileId = arryValue; //控件中config对象的fileId
  699. OfficePlugin.hasSubmitOffices[arryNum]=true; //完成标志
  700. OfficePlugin.submitNewNum = OfficePlugin.submitNewNum + 1; //每回调一次就 提交数量的变量就 加上 1
  701. if(OfficePlugin.submitNum == OfficePlugin.submitNewNum){ //当提交问题 等于 提交数量的变量 时 表示所有文档 都提交了 然后做 业务相关的提交
  702. if(OfficePlugin.callBack){
  703. OfficePlugin.callBack();
  704. }else{
  705. var data=CustomForm.getData();
  706. //设置表单数据
  707. $("#formData").val(data);
  708. $('#frmWorkFlow').submit();
  709. }
  710. OfficePlugin.submitNewNum = 0; //重置 提交数量的变量
  711. saveMethodOnCompleteNum = 0; //重置 回调用提交方法次数的变量
  712. }
  713. }else{
  714. if(saveMethodOnCompleteNum==OfficePlugin.submitNum){
  715. $.ligerDialog.warn("提交失败,OFFICE控件没能正常使用,请重新安装 !!!","提示");
  716. }
  717. }
  718. }else{
  719. if(saveMethodOnCompleteNum==OfficePlugin.submitNum){
  720. $.ligerDialog.warn("提交失败,OFFICE控件没能正常使用,请重新安装 !!!","提示");
  721. }
  722. }
  723. }
  724. /**
  725. * 火狐谷歌浏览器控件文档在套红模版事件(异步的,IE是同步的)回调接管函数 注意不在OfficeControl类里面 一定是单独方法 是控件属性的ForOnAddTemplateFromURL对应的方法 (AddTemplateFromURL保存后的回调函数)
  726. * html 为后台返回的内容
  727. */
  728. function addTemplateOnComplete(myNum) {
  729. //OfficePlugin.fileObjs.get(myNum).setAttribute("value",arryValue); //保存到对象的值
  730. myObj = OfficePlugin.officeObjs[myNum]; //OfficeControl 实例对象
  731. var BookMarkName = "content";
  732. if(!myObj.controlObj.ActiveDocument.BookMarks.Exists(BookMarkName)){
  733. alert("Word 模板中不存在名称为:\""+BookMarkName+"\"的书签!");
  734. return false;
  735. }
  736. // var bkmkObj = myObj.controlObj.ActiveDocument.BookMarks(BookMarkName); //IE的方法
  737. var bkmkObj = myObj.controlObj.ActiveDocument.BookMarks.Item(BookMarkName); //火狐和谷歌特有的
  738. var saverange = bkmkObj.Range;
  739. saverange.Paste();
  740. myObj.controlObj.ActiveDocument.Bookmarks.Add(BookMarkName,saverange);
  741. }
  742. /**
  743. * 火狐谷歌浏览器控件文档在打开文档后的事件(异步的,IE是同步的)
  744. *
  745. */
  746. function documentOpenedOnComplete(myNum) {
  747. myObj = OfficePlugin.officeObjs[myNum]; //OfficeControl 实例对象
  748. //文档要求为只读时,通过Office 实例对象设置文档为只读
  749. if(myObj!=null&& myObj != undefined){
  750. myObj.setFileReadOnly(false);
  751. }
  752. }
  753. }