OfficeControl.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833
  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',right:'w',user:{},menuRight:''};
  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. 0,//relative,设定签名位置的参照对象.0:表示按照屏幕位置插入,此时,Left,Top属性不起作用。1:光标位置;2:页边距;3:页面距离 4:默认设置栏,段落(为兼容以前版本默认方式)
  169. 100);
  170. }catch(err){
  171. //$.ligerDialog.error("insertHandSign:" +err.name + ": " + err.message);
  172. alert("insertHandSign:" +err.name + ": " + err.message);
  173. }
  174. },
  175. /**
  176. * 可以设置文件用户
  177. */
  178. this.setDocUser=function(){
  179. with(_self.controlObj.ActiveDocument.Application){
  180. UserName = _self.config.user.name;//设置用户信息
  181. UserInitials= _self.config.user.name;//设置用户信息缩写
  182. }
  183. },
  184. /**
  185. * 获取模版
  186. */
  187. this.getTemplate=function(callback){
  188. var url=__ctx +"/platform/system/sysOfficeTemplate/dialog.ht?type="+this.templatetype;
  189. var winArgs="dialogWidth=600px;dialogHeight=400px;help=0;status=0;scroll=1;center=1";
  190. url=url.getNewUrl();
  191. /*var rtn=window.showModalDialog(url,"",winArgs);
  192. return rtn;*/
  193. /*KILLDIALOG*/
  194. DialogUtil.open({
  195. height:400,
  196. width: 600,
  197. title : '获取模版',
  198. url: url,
  199. isResize: true,
  200. sucCall:callback
  201. });
  202. },
  203. /**
  204. * 模版套红。
  205. */
  206. this.insertContentTemplate=function(){
  207. try{
  208. this.templatetype = 2;
  209. _self.getTemplate(function(rtn){
  210. this.templatetype = 1;
  211. if(rtn==undefined || rtn==null ){
  212. return false;
  213. }
  214. var templateUrl = __ctx + "/platform/system/sysOfficeTemplate/getTemplateById.ht?templateId=" + rtn.templateId;
  215. //选择对象当前文档的所有内容
  216. var curSel = _self.controlObj.ActiveDocument.Application.Selection;
  217. curSel.WholeStory();
  218. curSel.Cut();
  219. if(!(Sys.firefox) && !(Sys.chrome)){ //IE是同步的,它 会等待模版加载成功后执行书签的插入 (火狐和谷歌就不可以)
  220. //插入模板
  221. _self.controlObj.AddTemplateFromURL(templateUrl); //AddTemplateFromURL
  222. var BookMarkName = "content";
  223. if(!_self.controlObj.ActiveDocument.BookMarks.Exists(BookMarkName)){
  224. alert("Word 模板中不存在名称为:\""+BookMarkName+"\"的书签!");
  225. return false;
  226. }
  227. var bkmkObj = _self.controlObj.ActiveDocument.BookMarks(BookMarkName);
  228. var saverange = bkmkObj.Range;
  229. saverange.Paste();
  230. _self.controlObj.ActiveDocument.Bookmarks.Add(BookMarkName,saverange);
  231. }else{
  232. //插入模板(火狐谷歌 异步)
  233. _self.controlObj.AddTemplateFromURL(templateUrl); //AddTemplateFromURL
  234. }
  235. });
  236. }catch(err){
  237. //$.ligerDialog.error("insertTemplate:" +err.name + ": " + err.message);
  238. alert("insertTemplate:" +err.name + ": " + err.message);
  239. }
  240. },
  241. /**
  242. * 插入word模版。
  243. */
  244. this.insertTemplate=function(){
  245. try{
  246. _self.getTemplate(function(rtn){
  247. if(rtn==undefined || rtn==null ){
  248. return;
  249. }
  250. var headFileURL = __ctx + "/platform/system/sysOfficeTemplate/getTemplateById.ht?templateId=" + rtn.templateId;
  251. //_self.controlObj.ActiveDocument.Application.Selection.HomeKey(6,0);//光标移动到文档开头
  252. _self.controlObj.OpenFromURL(headFileURL);//在光标位置插入红头文档
  253. });
  254. }catch(err){
  255. //$.ligerDialog.error("insertTemplate:" +err.name + ": " + err.message);
  256. alert("insertTemplate:" +err.name + ": " + err.message);
  257. }
  258. },
  259. /**
  260. * 获取控件的html。
  261. */
  262. this.getControlHtml=function(controlId){
  263. var cabPath=__ctx +"/media/office/OfficeControl.cab#version=5,0,2,5";
  264. var classid = "A39F1330-3322-4a1d-9BF0-0BA2BB90E970";
  265. var str = '';
  266. if (Sys.ie) {
  267. str = '<object id="'+controlId+'" codeBase="'+cabPath+'" height="'+this.height+'" width="'+this.width+'" classid="clsid:'+classid+'" style="z-index:-1;">';
  268. for(var key in this.params){
  269. str+=' <param name="'+key+'" value="'+this.params[key]+'"> ';
  270. }
  271. str+="</object>";
  272. } else if (Sys.firefox||Sys.chrome) {
  273. if(this.config.doctype=='pdf'){
  274. 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 +'" ';
  275. }else{
  276. 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 +'" ';
  277. }for(var key in this.params){
  278. str += '_'+key+'="'+this.params[key]+'" ';
  279. }
  280. str +='clsid="{'+classid+'}" >';
  281. str +='</object> ';
  282. }
  283. //是火狐和谷歌时 增加插入套红模版和只读设置的回调函数
  284. if(Sys.firefox||Sys.chrome){
  285. str += ' <script type="text/javascript" > ';
  286. str += ' function addTemplateOnComplete'+ this.config.myNum +'(){ ';
  287. str += ' addTemplateOnComplete("'+this.config.myNum+'"); ';
  288. str += ' } ';
  289. str += ' ';
  290. str += ' function documentOpenedOnComplete'+ this.config.myNum +'(){ ';
  291. str += ' documentOpenedOnComplete("'+this.config.myNum+'"); ';
  292. str += ' } ';
  293. str += ' </script> ';
  294. }
  295. return str;
  296. },
  297. /**
  298. * 将控件添加到div容器中。
  299. * 第一个参数:
  300. * div的容器ID
  301. * 第二个参数:
  302. * conf:
  303. * doctype:文挡类型:可以为doc,xls,ppt
  304. * fileId:服务器保存的文件ID
  305. */
  306. this.renderTo=function(divContainerId,conf){
  307. this.config=$.extend({},this.config,conf);
  308. //格式为空时默认设置为doc文件
  309. if(!this.config.doctype){
  310. this.config.doctype = "doc";
  311. }
  312. if(!(Sys.firefox) && !(Sys.chrome)){
  313. Sys.ie = true;
  314. }
  315. this.controlId="office_" + divContainerId;
  316. var html=this.getControlHtml(this.controlId);
  317. var menuBar = '<div name="menuBar" menuBarRight="w" ></div>';
  318. $("#" +divContainerId).html("");
  319. if(this.config.right=='r'){
  320. menuBar = '<div name="menuBar" style="display:none;" menuBarRight="r" ></div>';
  321. }
  322. $("#" +divContainerId).append(menuBar);
  323. $("#" +divContainerId).append(html);
  324. var obj=document.getElementById(this.controlId);
  325. this.controlObj=obj;
  326. this.controlObj.MenuBar=false;
  327. this.controlObj.Titlebar=false;
  328. this.controlObj.IsShowToolMenu=true;
  329. this.controlObj.ToolBars=true;
  330. var jqControlObj=$(this.controlObj);
  331. //修改控件的高度。
  332. jqControlObj.height(jqControlObj.parent().height()-26);
  333. var docType=this.config.doctype;
  334. var menuRight = this.config.menuRight;
  335. var items=[];
  336. //2013-05-31 add
  337. if(docType=="pdf"){
  338. if(menuRight.pdfgzRight=='y'){
  339. items.push( { text: 'PDF盖章' ,click:this.buttonClick});
  340. }
  341. }else{
  342. if(menuRight.wjRight=='y'){
  343. items.push({ text: '文件', menu: this.memuItems});
  344. }
  345. if(docType=="doc"){
  346. if(menuRight.lhRight=='y'){
  347. items.push({ text: '留痕',click:this.buttonClick });
  348. }
  349. if(menuRight.blhRight=='y'){
  350. items.push({ text: '不留痕' ,click:this.buttonClick});
  351. }
  352. if(menuRight.qchjRight=='y'){
  353. items.push( { text: '清除痕迹' ,click:this.buttonClick});
  354. }
  355. }
  356. if(menuRight.mbthRight=='y'){
  357. items.push( { text: '模版套红' ,click:this.buttonClick});
  358. }
  359. if(menuRight.xzmbRight=='y'){
  360. items.push({ text: '选择模版' ,click:this.buttonClick});
  361. }
  362. if(menuRight.sxqmRight=='y'){
  363. items.push({ text: '手写签名' ,click:this.buttonClick});
  364. }
  365. if(menuRight.gzRight=='y'){
  366. items.push({ text: '盖章' ,click:this.buttonClick});
  367. }
  368. if(menuRight.zcpdfRight=='y'){
  369. items.push( { text: '转成PDF' ,click:this.buttonClick});
  370. }
  371. if(menuRight.ekeygzRight=='y'){
  372. items.push( { text: 'Ekey盖章' ,click:this.buttonClick});
  373. }
  374. }
  375. if(menuRight.qpRight=='y'){
  376. items.push({ text: '全屏' ,click:this.buttonClick});
  377. }
  378. if($("#" +divContainerId +" div[name='menuBar']").ligerMenuBar){//明细页面不需要
  379. $("#" +divContainerId +" div[name='menuBar']").ligerMenuBar({ items:items});
  380. }
  381. if(Sys.ie||Sys.firefox||Sys.chrome){
  382. if(docType=="pdf"){
  383. this.addPDFSupport();
  384. this.isFileOpen=true;
  385. }else{
  386. this.initDoc();
  387. }
  388. }
  389. else{
  390. //$.ligerDialog.warn('office控件只支持IE、Firefox和Chrome 32位版的浏览器!');
  391. alert('office控件只支持IE、Firefox和Chrome 32位版的浏览器!');
  392. }
  393. };
  394. /**
  395. * 控件载入时,载入文档。
  396. */
  397. this.initDoc=function(){
  398. //指定了文件。
  399. if(this.config.fileId!="" && this.config.fileId>0){
  400. var path= __ctx + "/platform/system/sysFile/getFileById.ht?fileId=" + this.config.fileId;
  401. try{
  402. var docType=this.getDocType();
  403. this.controlObj.OpenFromURL(path,null,docType);
  404. this.isFileOpen=true;
  405. }
  406. catch(err){
  407. try{
  408. this.addPDFSupport();
  409. this.isFileOpen=true;
  410. }
  411. catch(err){
  412. this.newDoc();
  413. }
  414. }
  415. }
  416. //新建文档。
  417. else{
  418. this.newDoc();
  419. }
  420. //IE浏览器是同步的 增加 设置文档是否只读,其它的为异步(由回调接管函数 OfficeControl.js 中有 documentOpenedOnComplete 处理 )
  421. if(Sys.ie){
  422. this.setFileReadOnly(false);
  423. }
  424. };
  425. /**
  426. * 关闭文档。
  427. */
  428. this.closeDoc=function(){
  429. if(Sys.ie||Sys.firefox||Sys.chrome){ //$.browser.msie
  430. this.initDoc();
  431. }else{
  432. //$.ligerDialog.warn('office控件只支持IE、Firefox和Chrome 32位版的浏览器!');
  433. alert('office控件只支持IE、Firefox和Chrome 32位版的浏览器!');
  434. }
  435. try{
  436. this.controlObj.close();
  437. this.isFileOpen=false;
  438. }catch(err){
  439. //$.ligerDialog.error('closeDoc:' +err.name + ": " + err.message);
  440. alert('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. alert("newDoc:" +err.name + ": " + err.message);
  460. }
  461. }
  462. };
  463. /**
  464. * 保存文件到服务器。
  465. * 服务器返回文件id到this.config.fileId,同时返回文件ID。
  466. */
  467. this.saveRemote=function(inputObjNum){
  468. var path= __ctx + "/platform/system/sysFile/saveFile.ht";
  469. var uploadName = this.controlId +"_name";
  470. var fileType = OfficePlugin.fileObjs.get(inputObjNum).getAttribute("fileType");
  471. if(typeof fileType == "undefind"){
  472. fileType = "";
  473. }
  474. var params="fileId=" + this.config.fileId + "&uploadName="+ uploadName + "&fileType=" + fileType;
  475. try{
  476. //保存数据到服务器。
  477. var curDate=new Date();
  478. var docName=Math.random()*curDate.getMilliseconds()*10000;
  479. /*如果人后辍名为空时,需要用对象的类型来区分是什么文件返回当前控件中的文档类型,
  480. 只读 0: 没有文档; 100 =其他文档类型;
  481. 1=word;2=Excel.Sheet或者 Excel.Chart ;
  482. 3=PowerPoint.Show; 4= Visio.Drawing;
  483. 5=MSProject.Project; 6= WPS Doc;
  484. 7:Kingsoft Sheet; 51 = PDF文档
  485. */
  486. if(this.config.doctype==''||this.config.doctype==null|| 'undefined' == typeof (this.config.doctype)){
  487. var type = this.controlObj.DocType;
  488. if(type==2){
  489. this.config.doctype = "xls";
  490. }else if(type==3){
  491. this.config.doctype = "ppt";
  492. }else if(type==51){
  493. this.config.doctype = "pdf";
  494. }else{
  495. this.config.doctype = "doc";
  496. }
  497. }
  498. var result;
  499. if(Sys.firefox||Sys.chrome){ //火狐谷歌浏览器控件文档保存事件(异步的)
  500. if(typeof(inputObjNum)!=undefined && inputObjNum!=null){
  501. params += "&inputObjNum="+ inputObjNum; // 用于保存返回的值对象的名称 (异步的才会有)
  502. }
  503. //当你用SaveToURL方法时,回调属性用:ForOnSaveToURL 如果是SaveAsOtherFormatToURL的话,就用ForOnSaveAsOtherFormatToURL回调
  504. if(this.config.doctype=='pdf'){
  505. //直接保存文档,不用转换成指定是什么格式的文件方法
  506. this.controlObj.SaveToURL(path,uploadName,params,docName+"." + this.config.doctype,0);
  507. }else{
  508. //保存文档时要转换成指定兼容文档的的格式方法
  509. this.controlObj.SaveAsOtherFormatToURL(5,path,uploadName,params,docName+"." + this.config.doctype,0);
  510. }
  511. result=-11;
  512. }else{ //IE是同步的
  513. //SaveToURL
  514. if(this.config.doctype=='pdf'){
  515. //直接保存文档,不用转换成指定是什么格式的文件方法
  516. result=this.controlObj.SaveToURL(path,uploadName,params,docName+"." + this.config.doctype,0);
  517. }else{
  518. //保存文档时要转换成指定兼容文档的的格式方法
  519. result=this.controlObj.SaveAsOtherFormatToURL(5,path,uploadName,params,docName+"." + this.config.doctype,0);
  520. }
  521. this.config.fileId=result;
  522. }
  523. return result;
  524. }
  525. catch(err){
  526. //alert("saveRemote:" +err.name + ": " + err.message);
  527. if(Sys.firefox||Sys.chrome){
  528. return -13; //报错时表示火狐谷歌下OFFICE不正常
  529. }
  530. return -12;
  531. }
  532. };
  533. /**
  534. * 对文档进行签单
  535. */
  536. this.signature=function(){
  537. var url = __ctx + "/platform/system/seal/dialog.ht";
  538. var winArgs = "dialogWidth=800px;dialogHeight=600px;help=0;status=0;scroll=1;center=0;resizable=1;";
  539. url = url.getNewUrl();
  540. /*var retVal = window.showModalDialog(url, "", winArgs);
  541. if(typeof(retVal)==undefined||retVal==null){
  542. return false;
  543. }
  544. if(retVal.fileId.isEmpty()){
  545. return false;
  546. }
  547. var sealUrl=__ctx + "/platform/system/sysFile/getFileById.ht?fileId=" + retVal.fileId;
  548. try{
  549. // this.controlObj.AddSignFromURL(retVal.userName,sealUrl);
  550. this.controlObj.AddSecSignFromURL(_self.config.user.name,//签章的用户名
  551. sealUrl,//印章所在服务器相对url
  552. 0,//left
  553. 0,//top
  554. 1,//relative
  555. 2, //print mode 2
  556. false,//是是否使用证书,true或者false,
  557. false //是否锁定印章
  558. );
  559. }catch(err){
  560. alert("signature:" +err.name + ": " + err.message);
  561. return -1;
  562. }*/
  563. var that=this;
  564. /*KILLDIALOG*/
  565. DialogUtil.open({
  566. height:600,
  567. width: 800,
  568. title : '对文档进行签单',
  569. url: url,
  570. isResize: true,
  571. //自定义参数
  572. sucCall:function(retVal){
  573. if(typeof(retVal)==undefined||retVal==null){
  574. return false;
  575. }
  576. if(retVal.fileId.isEmpty()){
  577. return false;
  578. }
  579. var sealUrl=__ctx + "/platform/system/sysFile/getFileById.ht?fileId=" + retVal.fileId;
  580. try{
  581. that.controlObj.AddSecSignFromURL(_self.config.user.name,//签章的用户名
  582. sealUrl,//印章所在服务器相对url
  583. 0,//left
  584. 0,//top
  585. 1,//relative
  586. 2, //print mode 2
  587. false,//是是否使用证书,true或者false,
  588. false //是否锁定印章
  589. );
  590. }catch(err){
  591. alert("signature:" +err.name + ": " + err.message);
  592. return -1;
  593. }
  594. }
  595. });
  596. };
  597. /**
  598. * 对Office文档进行Ekey硬件签章
  599. */
  600. this.signatureFromEkey = function(){
  601. if(this.controlObj!=null){
  602. /*if(!this.controlObj.IsEkeyConnected) //暂时不确定
  603. {
  604. alert("没有检测到EKEY,请将EKEY插入到计算机!然后点击确定继续.");
  605. return;
  606. }*/
  607. this.controlObj.AddSecSignFromEKEY(
  608. _self.config.user.name, //username
  609. 0, //left
  610. 0, // top,
  611. 1, // relative,
  612. 2, // PrintMode,
  613. false, // IsUseCertificate,
  614. false, // IsLocked,
  615. true, // IsCheckDocChange,
  616. false, // IsShowUI
  617. true, // signpass,
  618. -1, // ekeySignIndex,
  619. true, // IsAddComment,
  620. true // IsBelowText
  621. );
  622. }
  623. };
  624. /**
  625. * 对PDF文档进行Ekey硬件签章
  626. */
  627. this.signaturePdfFromEkey=function(){
  628. if(this.controlObj!=null){
  629. /*if(!this.controlObj.IsEkeyConnected)
  630. {
  631. alert("没有检测到EKEY.请将EKEY插入到计算机!然后点击确定继续.");
  632. return;
  633. }*/
  634. alert("signaturePdfFromEkey");
  635. this.controlObj.ActiveDocument.AddPDFSecSignFromEKEY(_self.config.user.name,null,"111111",null,1,null,null,null,null,true,false,true,false,null);
  636. }
  637. };
  638. /**
  639. * 把Office文件转换成PDF文件。
  640. * 服务器返回文件id到this.config.fileId,同时返回文件ID。
  641. */
  642. this.officeToPdf=function(){
  643. if(!confirm("文档转换成PDF后将不可以恢复原有格式文档,确认转换吗?"))
  644. {
  645. return;
  646. }
  647. try{
  648. //保存数据到服务器。
  649. var pdfUrl = __ctx + "/platform/system/sysFile/saveFilePdf.ht";
  650. var uploadName = this.controlId +"_pdf";
  651. var params="fileId=" + this.config.fileId + "&uploadName="+ uploadName;
  652. var pdfName = this.config.fileId+".pdf";
  653. this.controlObj.PublishAsPDFToURL(pdfUrl,uploadName,params,pdfName,0,null,true,true,false,true,true,true);
  654. //window.location.href=window.location.href;
  655. }
  656. catch(err){
  657. alert("officeToPdf:" +err.name + ": " + err.message);
  658. }
  659. };
  660. /**
  661. * 把打开PDF文件
  662. */
  663. this.addPDFSupport=function()
  664. {
  665. //this.controlObj = document.getElementById(this.controlId);
  666. if(document.URL.indexOf("file://")>=0)
  667. {
  668. if(!confirm("如果从本地磁盘打开的URL,需要手工运行命令'regsvr32 ntkopdfdoc.dll'注册插件文件.您确认已经注册了吗?"))
  669. {
  670. return;
  671. }
  672. }
  673. var path = __ctx + "/platform/system/sysFile/getFileById.ht?fileId=" + this.config.fileId;
  674. this.controlObj.AddDocTypePlugin(".pdf","PDF.NtkoDocument","4.0.0.1",__ctx+"/media/office/ntkopdfdoc.cab",51,true); //引用pdf组件
  675. // this.controlObj.BeginOpenFromURL(path); //打开PDF从URL "media/office/bpm.pdf"
  676. this.controlObj.OpenFromURL(path);
  677. };
  678. /**
  679. * 参数为true时把文档设置为只读,false按文档原来的权限设置
  680. */
  681. this.setFileReadOnly=function(isRead)
  682. {
  683. var type = this.config.doctype;
  684. if(type==''||type==null|| 'undefined' == typeof (type)||type=='pdf'||type=='PDF'){
  685. return;
  686. }
  687. try{
  688. if(isRead){
  689. this.controlObj.SetReadOnly(true,'');
  690. this.config.right=='r';
  691. }else{
  692. if(this.config.right!='w'&&this.config.right!='b'){
  693. this.controlObj.SetReadOnly(true,'');
  694. }
  695. }
  696. }catch(err){
  697. //alert("setFileReadOnly:" +err.name + ": " + err.message);
  698. }
  699. };
  700. };
  701. /**
  702. * 火狐谷歌浏览器控件文档保存事件(异步的,IE是同步的)回调接管函数 注意不在OfficeControl类里面 一定是单独方法 是控件属性的ForOnSaveToURL对应的方法 (SaveToURL保存后的回调函数)
  703. * html 为后台返回的内容
  704. */
  705. var saveMethodOnCompleteNum = 0; // 有几次回调文件了
  706. function saveMethodOnComplete(type, code, html) {
  707. saveMethodOnCompleteNum = saveMethodOnCompleteNum + 1;
  708. var arrys = html.split("##");
  709. var arryNum = arrys[0]; //保存对象的序号
  710. var arryValue = arrys[1]; //要保存的内容
  711. if(arryNum>=0){
  712. //返回小于1的情况要不要重新获取旧值做保存?
  713. /*if(arryValue<=0){
  714. arryValue = OfficePlugin.fileObjs.get(arryNum).getAttribute("value"); //保存到对象的值;
  715. }*/
  716. if(arryValue>0){
  717. OfficePlugin.fileObjs.get(arryNum).setAttribute("value",arryValue); //保存到对象的值
  718. OfficePlugin.officeObjs[arryNum].config.fileId = arryValue; //控件中config对象的fileId
  719. OfficePlugin.hasSubmitOffices[arryNum]=true; //完成标志
  720. OfficePlugin.submitNewNum = OfficePlugin.submitNewNum + 1; //每回调一次就 提交数量的变量就 加上 1
  721. if(OfficePlugin.submitNum == OfficePlugin.submitNewNum){ //当提交问题 等于 提交数量的变量 时 表示所有文档 都提交了 然后做 业务相关的提交
  722. if(OfficePlugin.callBack){
  723. OfficePlugin.callBack();
  724. }else{
  725. var data=CustomForm.getData();
  726. //设置表单数据
  727. $("#formData").val(data);
  728. $('#frmWorkFlow').submit();
  729. }
  730. OfficePlugin.submitNewNum = 0; //重置 提交数量的变量
  731. saveMethodOnCompleteNum = 0; //重置 回调用提交方法次数的变量
  732. }
  733. }else{
  734. if(saveMethodOnCompleteNum==OfficePlugin.submitNum){
  735. //$.ligerDialog.warn("提交失败,OFFICE控件没能正常使用,请重新安装 !!!","提示");
  736. alert("提交失败,OFFICE控件没能正常使用,请重新安装 !!!");
  737. }
  738. }
  739. }else{
  740. if(saveMethodOnCompleteNum==OfficePlugin.submitNum){
  741. //$.ligerDialog.warn("提交失败,OFFICE控件没能正常使用,请重新安装 !!!","提示");
  742. alert("提交失败,OFFICE控件没能正常使用,请重新安装 !!!");
  743. }
  744. }
  745. }
  746. /**
  747. * 火狐谷歌浏览器控件文档在套红模版事件(异步的,IE是同步的)回调接管函数 注意不在OfficeControl类里面 一定是单独方法 是控件属性的ForOnAddTemplateFromURL对应的方法 (AddTemplateFromURL保存后的回调函数)
  748. * html 为后台返回的内容
  749. */
  750. function addTemplateOnComplete(myNum) {
  751. //OfficePlugin.fileObjs.get(myNum).setAttribute("value",arryValue); //保存到对象的值
  752. myObj = OfficePlugin.officeObjs[myNum]; //OfficeControl 实例对象
  753. var BookMarkName = "content";
  754. if(!myObj.controlObj.ActiveDocument.BookMarks.Exists(BookMarkName)){
  755. alert("Word 模板中不存在名称为:\""+BookMarkName+"\"的书签!");
  756. return false;
  757. }
  758. // var bkmkObj = myObj.controlObj.ActiveDocument.BookMarks(BookMarkName); //IE的方法
  759. var bkmkObj = myObj.controlObj.ActiveDocument.BookMarks.Item(BookMarkName); //火狐和谷歌特有的
  760. var saverange = bkmkObj.Range;
  761. saverange.Paste();
  762. myObj.controlObj.ActiveDocument.Bookmarks.Add(BookMarkName,saverange);
  763. }
  764. /**
  765. * 火狐谷歌浏览器控件文档在打开文档后的事件(异步的,IE是同步的)
  766. *
  767. */
  768. function documentOpenedOnComplete(myNum) {
  769. myObj = OfficePlugin.officeObjs[myNum]; //OfficeControl 实例对象
  770. //文档要求为只读时,通过Office 实例对象设置文档为只读
  771. if(myObj!=null&& myObj != undefined){
  772. myObj.setFileReadOnly(false);
  773. }
  774. if(typeof documentOpenedOnCompleteCallback != 'undefined'){
  775. documentOpenedOnCompleteCallback();
  776. }
  777. }