You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

wps.js 30KB

5 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924
  1. var pluginsMode = location.search.split("=")[1]; //截取url中的参数值
  2. var pluginType = WpsInvoke.ClientType.wps; //加载项类型wps,et,wpp
  3. var pluginName = "WpsOAAssist"; //加载项名称
  4. var wpsClient = new WpsClient(pluginType); //初始化一个多进程对象,多进程时才需要
  5. var clientStr = pluginName + pluginType + "ClientId";
  6. //单进程封装开始
  7. /**
  8. * 此方法是根据wps_sdk.js做的调用方法封装
  9. * 可参照此定义
  10. * @param {*} funcs 这是在WPS加载项内部定义的方法,采用JSON格式(先方法名,再参数)
  11. * @param {*} front 控制着通过页面执行WPS加载项方法,WPS的界面是否在执行时在前台显示
  12. * @param {*} jsPluginsXml 指定一个新的WPS加载项配置文件的地址,动态传递jsplugins.xml模式,例如:http://127.0.0.1:3888/jsplugins.xml
  13. * @param {*} isSilent 隐藏打开WPS,如果需要隐藏,那么需要传递front参数为false
  14. */
  15. function _WpsInvoke(funcs, front, jsPluginsXml, isSilent) {
  16. var info = {};
  17. info.funcs = funcs;
  18. if (isSilent) {
  19. //隐藏启动时,front必须为false
  20. front = false;
  21. }
  22. /**
  23. * 下面函数为调起WPS,并且执行加载项WpsOAAssist中的函数dispatcher,该函数的参数为业务系统传递过去的info
  24. */
  25. if (pluginsMode != 2) {
  26. //单进程
  27. singleInvoke(info, front, jsPluginsXml, isSilent);
  28. } else {
  29. //多进程
  30. multInvoke(info, front, jsPluginsXml, isSilent);
  31. }
  32. }
  33. //单进程
  34. function singleInvoke(info, front, jsPluginsXml, isSilent) {
  35. WpsInvoke.InvokeAsHttp(
  36. pluginType, // 组件类型
  37. pluginName, // 插件名,与wps客户端加载的加载的插件名对应
  38. "dispatcher", // 插件方法入口,与wps客户端加载的加载的插件代码对应,详细见插件代码
  39. info, // 传递给插件的数据
  40. function (result) {
  41. // 调用回调,status为0为成功,其他是错误
  42. if (result.status) {
  43. if (result.status == 100) {
  44. WpsInvoke.AuthHttpesCert(
  45. '请在稍后打开的网页中,点击"高级" => "继续前往",完成授权。'
  46. );
  47. return;
  48. }
  49. alert(result.message);
  50. } else {
  51. console.log(result.response);
  52. showresult(result.response);
  53. }
  54. },
  55. front,
  56. jsPluginsXml,
  57. isSilent
  58. );
  59. /**
  60. * 接受WPS加载项发送的消息
  61. * 接收消息:WpsInvoke.RegWebNotify(type,name,callback)
  62. * WPS客户端返回消息: wps.OAAssist.WebNotify(message)
  63. * @param {*} type 加载项对应的插件类型
  64. * @param {*} name 加载项对应的名字
  65. * @param {func} callback 接收到WPS客户端的消息后的回调函数,参数为接受到的数据
  66. */
  67. WpsInvoke.RegWebNotify(pluginType, pluginName, handleOaMessage);
  68. }
  69. //多进程
  70. function multInvoke(info, front, jsPluginsXml, isSilent) {
  71. wpsClient.jsPluginsXml = jsPluginsXml
  72. ? jsPluginsXml
  73. : "https://127.0.0.1:3888/jsplugins.xml";
  74. if (localStorage.getItem(clientStr)) {
  75. wpsClient.clientId = localStorage.getItem(clientStr);
  76. }
  77. if (isSilent) {
  78. wpsClient.StartWpsInSilentMode(pluginName, function () {
  79. //隐藏启动后的回调函数
  80. mult(info, front);
  81. });
  82. } else {
  83. mult(info, front);
  84. }
  85. wpsClient.onMessage = handleOaMessage;
  86. }
  87. //多进程二次封装
  88. function mult(info, front) {
  89. wpsClient.InvokeAsHttp(
  90. pluginName, // 插件名,与wps客户端加载的加载的插件名对应
  91. "dispatcher", // 插件方法入口,与wps客户端加载的加载的插件代码对应,详细见插件代码
  92. info, // 传递给插件的数据
  93. function (result) {
  94. // 调用回调,status为0为成功,其他是错误
  95. if (wpsClient.clientId) {
  96. localStorage.setItem(clientStr, wpsClient.clientId);
  97. }
  98. if (result.status !== 0) {
  99. console.log(result);
  100. if (result.message == '{"data": "Failed to send message to WPS."}') {
  101. wpsClient.IsClientRunning(function (status) {
  102. console.log(status);
  103. if (status.response == "Client is running.")
  104. alert(
  105. "任务发送失败,WPS 正在执行其他任务,请前往WPS完成当前任务"
  106. );
  107. else {
  108. wpsClient.clientId = "";
  109. wpsClient.notifyRegsitered = false;
  110. localStorage.setItem(clientStr, "");
  111. mult(info);
  112. }
  113. });
  114. return;
  115. } else if (result.status == 100) {
  116. // WpsInvoke.AuthHttpesCert('请在稍后打开的网页中,点击"高级" => "继续前往",完成授权。')
  117. return;
  118. }
  119. alert(result.message);
  120. } else {
  121. console.log(result.response);
  122. }
  123. },
  124. front
  125. );
  126. }
  127. function handleOaMessage(data) {
  128. console.log(data);
  129. }
  130. function handleOaFunc1(message) {
  131. alert("我是函数handleOaFunc1,我接收到的参数是:" + message);
  132. }
  133. function handleOaFunc2(message) {
  134. alert("我是函数handleOaFunc2,我接收到的参数是:" + message);
  135. var span = window.parent.document.getElementById("webnotifyspan");
  136. span.innerHTML = message;
  137. }
  138. /**
  139. * 处理WPS加载项的方法返回值
  140. *
  141. * @param {*} resultData
  142. */
  143. function showresult(resultData) {
  144. let json = eval("(" + resultData + ")");
  145. switch (json.message) {
  146. case "GetDocStatus": {
  147. let docstatus = json.docstatus;
  148. if (typeof docstatus != "undefined") {
  149. let str =
  150. "文档保存状态:" +
  151. docstatus.saved +
  152. "\n文档字数:" +
  153. docstatus.words +
  154. "\n文档页数:" +
  155. docstatus.pages;
  156. alert(str);
  157. }
  158. }
  159. }
  160. }
  161. /**
  162. * 这是页面中针对代码显示的变量定义,开发者无需关心
  163. */
  164. var _wps = {};
  165. // 此处往下,都是对于前端页面如何调用WPS加载项方法的样例,开发者请参考
  166. function newDoc() {
  167. console.log("sasaa");
  168. _WpsInvoke(
  169. [
  170. {
  171. NewDoc: {},
  172. },
  173. ],
  174. true,
  175. "http://127.0.0.1:8080/iestart/jsplugins.xml"
  176. ); // NewDoc方法对应于OA助手dispatcher支持的方法名
  177. }
  178. _wps["newDoc"] = {
  179. action: newDoc,
  180. code: _WpsInvoke.toString() + "\n\n" + newDoc.toString(),
  181. detail:
  182. "\n\
  183. 说明:\n\
  184. 点击按钮,打开WPS文字后,新建一个空白doc文档\n\
  185. \n\
  186. 方法使用:\n\
  187. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行插件中的js函数NewDoc,新建一个空白doc\n\
  188. funcs参数说明:\n\
  189. NewDoc方法对应于OA助手dispatcher支持的方法名\n\
  190. ",
  191. };
  192. function GetDemoPath(fileName) {
  193. var url = document.location.host;
  194. return document.location.protocol + "//" + url + "/file/" + fileName;
  195. }
  196. function GetUploadPath() {
  197. var url = document.location.host;
  198. return document.location.protocol + "//" + url + "/Upload";
  199. }
  200. function GetDemoPngPath() {
  201. var url = document.location.toString();
  202. url = decodeURI(url);
  203. if (url.indexOf("/") != -1) {
  204. url = url.substring(0, url.lastIndexOf("/"));
  205. }
  206. if (url.length !== 0) url = url.concat("/WPS.png");
  207. if (!String.prototype.startsWith) {
  208. String.prototype.startsWith = function (searchString, position) {
  209. position = position || 0;
  210. return this.indexOf(searchString, position) === position;
  211. };
  212. }
  213. if (url.startsWith("file:///")) url = url.substr("file:///".length);
  214. return url;
  215. }
  216. function openDoc() {
  217. var filePath = prompt(
  218. "请输入打开文件路径(本地或是url):",
  219. GetDemoPath("样章.docx")
  220. );
  221. var uploadPath = prompt("请输入文档上传接口:", GetUploadPath());
  222. var uploadFieldName = prompt(
  223. "请输入文档上传到业务系统时自定义字段:",
  224. "自定义字段"
  225. );
  226. var backupPath = prompt("请输入文档备份路径:");
  227. _WpsInvoke([
  228. {
  229. OpenDoc: {
  230. uploadPath: uploadPath, // 保存文档上传接口
  231. fileName: filePath,
  232. uploadFieldName: uploadFieldName,
  233. picPath: GetDemoPngPath(),
  234. copyUrl: backupPath,
  235. userName: "东方不败",
  236. },
  237. },
  238. ]); // OpenDoc方法对应于OA助手dispatcher支持的方法名
  239. }
  240. _wps["openDoc"] = {
  241. action: openDoc,
  242. code: _WpsInvoke.toString() + "\n\n" + openDoc.toString(),
  243. detail:
  244. "\n\
  245. 说明:\n\
  246. 点击按钮,输入要打开的文档路径,输入文档上传接口,如果传的不是有效的服务端地址,将无法使用保存上传功能。\n\
  247. 打开WPS文字后,将根据文档路径下载并打开对应的文档,保存将自动上传指定服务器地址\n\
  248. \n\
  249. 方法使用:\n\
  250. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  251. funcs参数信息说明:\n\
  252. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  253. uploadPath 保存文档上传接口\n\
  254. fileName 打开的文档路径\n\
  255. uploadFieldName 文档上传到业务系统时自定义字段\n\
  256. picPath 插入图片的路径\n\
  257. copyUrl 备份的服务器路径\n\
  258. userName 传给wps要显示的OA用户名\n\
  259. ",
  260. };
  261. function onlineEditDoc() {
  262. var filePath = prompt(
  263. "请输入打开文件路径(本地或是url):",
  264. GetDemoPath("样章.docx")
  265. );
  266. var uploadPath = prompt("请输入文档上传接口:", GetUploadPath());
  267. var uploadFieldName = prompt(
  268. "请输入文档上传到业务系统时自定义字段:",
  269. "自定义字段"
  270. );
  271. _WpsInvoke(
  272. [
  273. {
  274. OnlineEditDoc: {
  275. uploadPath: uploadPath, // 保存文档上传接口
  276. fileName: filePath,
  277. uploadFieldName: uploadFieldName,
  278. buttonGroups:
  279. "btnSaveAsFile,btnImportDoc,btnPageSetup,btnInsertDate,btnSelectBookmark", //屏蔽功能按钮
  280. userName: "东方不败",
  281. },
  282. },
  283. ],
  284. true
  285. ); // onlineEditDoc方法对应于OA助手dispatcher支持的方法名
  286. }
  287. _wps["onlineEditDoc"] = {
  288. action: onlineEditDoc,
  289. code: _WpsInvoke.toString() + "\n\n" + onlineEditDoc.toString(),
  290. detail:
  291. "\n\
  292. 说明:\n\
  293. 点击按钮,输入要打开的文档路径,输入文档上传接口,如果传的不是有效的服务端地址,将无法使用保存上传功能。\n\
  294. 打开WPS文字后,将根据文档路径在线打开对应的文档,保存将自动上传指定服务器地址\n\
  295. \n\
  296. 方法使用:\n\
  297. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  298. funcs参数信息说明:\n\
  299. onlineEditDoc方法对应于OA助手dispatcher支持的方法名\n\
  300. uploadPath 保存文档上传接口\n\
  301. fileName 打开的文档路径\n\
  302. uploadFieldName 文档上传到业务系统时自定义字段\n\
  303. buttonGroups 屏蔽的OA助手功能按钮\n\
  304. userName 传给wps要显示的OA用户名\n\
  305. ",
  306. };
  307. function openRevision() {
  308. var filePath = prompt(
  309. "请输入打开文件路径(本地或是url):",
  310. GetDemoPath("样章.docx")
  311. );
  312. var uploadPath = prompt("请输入文档上传接口:");
  313. _WpsInvoke([
  314. {
  315. OpenDoc: {
  316. uploadPath: uploadPath, // 保存文档上传接口
  317. fileName: filePath,
  318. userName: "王五", //用户名
  319. revisionCtrl: {
  320. bOpenRevision: true,
  321. bShowRevision: true,
  322. },
  323. },
  324. },
  325. ]);
  326. }
  327. _wps["openRevision"] = {
  328. action: openRevision,
  329. code: _WpsInvoke.toString() + "\n\n" + openRevision.toString(),
  330. detail:
  331. "\n\
  332. 说明:\n\
  333. 点击按钮,输入参数后,打开WPS文字后,打开指定文档,并打开修订功能,并显示修订\n\
  334. \n\
  335. 方法使用:\n\
  336. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  337. funcs参数信息说明:\n\
  338. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  339. userName 用户名,设置当前编辑用户名\n\
  340. fileName 打开的文档路径\n\
  341. revisionCtrl 修订功能控制参数\n\
  342. ",
  343. };
  344. function closeRevision() {
  345. var filePath = prompt(
  346. "请输入打开文件路径(本地或是url):",
  347. GetDemoPath("样章.docx")
  348. );
  349. var uploadPath = prompt("请输入文档上传接口:");
  350. _WpsInvoke([
  351. {
  352. OpenDoc: {
  353. uploadPath: uploadPath, // 保存文档上传接口
  354. fileName: filePath,
  355. userName: "王五", //用户名
  356. revisionCtrl: {
  357. bOpenRevision: false,
  358. bShowRevision: false,
  359. },
  360. },
  361. },
  362. ]);
  363. }
  364. _wps["closeRevision"] = {
  365. action: closeRevision,
  366. code: _WpsInvoke.toString() + "\n\n" + closeRevision.toString(),
  367. detail:
  368. "\n\
  369. 说明:\n\
  370. 点击按钮,输入参数后,打开WPS文字后,打开指定文档,并关闭修订功能\n\
  371. \n\
  372. 方法使用:\n\
  373. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  374. funcs参数信息说明:\n\
  375. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  376. userName 用户名,设置当前编辑用户名\n\
  377. fileName 打开的文档路径\n\
  378. revisionCtrl 修订功能控制参数\n\
  379. ",
  380. };
  381. function protectOpen() {
  382. var filePath = prompt(
  383. "请输入打开文件路径(本地或是url):",
  384. GetDemoPath("样章.docx")
  385. );
  386. var uploadPath = prompt("请输入文档上传接口:");
  387. _WpsInvoke([
  388. {
  389. OpenDoc: {
  390. uploadPath: uploadPath, // 保存文档上传接口
  391. fileName: filePath,
  392. openType: {
  393. //文档打开方式
  394. // 文档保护类型,-1:不启用保护模式,0:只允许对现有内容进行修订,
  395. // 1:只允许添加批注,2:只允许修改窗体域(禁止拷贝功能),3:只读
  396. protectType: 3,
  397. password: "123456",
  398. },
  399. },
  400. },
  401. ]);
  402. }
  403. _wps["protectOpen"] = {
  404. action: protectOpen,
  405. code: _WpsInvoke.toString() + "\n\n" + protectOpen.toString(),
  406. detail:
  407. "\n\
  408. 说明:\n\
  409. 点击按钮,输入参数后,打开WPS文字后,打开使用保护模式指定文档\n\
  410. \n\
  411. 方法使用:\n\
  412. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  413. funcs参数信息说明:\n\
  414. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  415. uploadPath 保存文档上传接口\n\
  416. fileName 打开的文档路径\n\
  417. openType 文档打开方式控制参数 protectType:1:不启用保护模式,0:只允许对现有内容进行修订,\n\
  418. \t\t1:只允许添加批注,2:只允许修改窗体域(禁止拷贝功能),3:只读 password为密码\n\
  419. ",
  420. };
  421. function openWithPassWd() {
  422. var filePath = prompt("请输入打开文件路径(本地或是url):");
  423. var docPassword = prompt("请输入文档打开密码:");
  424. var uploadPath = prompt("请输入文档上传接口:");
  425. _WpsInvoke([
  426. {
  427. OpenDoc: {
  428. uploadPath: uploadPath, // 保存文档上传接口
  429. fileName: filePath,
  430. docPassword: {
  431. docPassword: docPassword, // 文档密码
  432. },
  433. },
  434. },
  435. ]);
  436. }
  437. _wps["openWithPassWd"] = {
  438. action: openWithPassWd,
  439. code: _WpsInvoke.toString() + "\n\n" + openWithPassWd.toString(),
  440. detail:
  441. "\n\
  442. 说明:\n\
  443. 点击按钮,输入参数后,打开WPS文字后,使用指定密码打开指定加密文档\n\
  444. \n\
  445. 方法使用:\n\
  446. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  447. funcs参数信息说明:\n\
  448. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  449. uploadPath 保存文档上传接口\n\
  450. fileName 打开的文档路径\n\
  451. docPassword 文档密码\n\
  452. ",
  453. };
  454. function insertRedHeader() {
  455. var filePath = prompt(
  456. "请输入打开文件路径,如果为空则对活动文档套红:",
  457. GetDemoPath("样章.docx")
  458. );
  459. var templateURL = prompt(
  460. "请输入红头模板路径(本地或是url):",
  461. GetDemoPath("红头文件.docx")
  462. );
  463. if (filePath != "" && filePath != null) {
  464. _WpsInvoke([
  465. {
  466. OnlineEditDoc: {
  467. fileName: filePath,
  468. insertFileUrl: templateURL,
  469. bkInsertFile: "Content", //红头模板中填充正文的位置书签名
  470. buttonGroups:
  471. "btnSaveAsFile,btnImportDoc,btnPageSetup,btnInsertDate,btnSelectBookmark", //屏蔽功能按钮
  472. },
  473. },
  474. ]);
  475. } else {
  476. _WpsInvoke([
  477. {
  478. InsertRedHead: {
  479. insertFileUrl: templateURL,
  480. bkInsertFile: "Content", //红头模板中填充正文的位置书签名
  481. },
  482. },
  483. ]);
  484. }
  485. }
  486. _wps["insertRedHeader"] = {
  487. action: insertRedHeader,
  488. code: _WpsInvoke.toString() + "\n\n" + insertRedHeader.toString(),
  489. detail:
  490. "\n\
  491. 说明:\n\
  492. 点击按钮,输入参数后,打开WPS文字后,打开指定文档,然后使用指定红头模板对该文档进行套红头\n\
  493. \n\
  494. 方法使用:\n\
  495. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  496. funcs参数信息说明:\n\
  497. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  498. fileName 打开的文档路径\n\
  499. insertFileUrl 指定的红头模板\n\
  500. bkInsertFile 红头模板中正文的位置书签名\n\
  501. InsertRedHead方法对应于OA助手dispatcher支持的方法名\n\
  502. insertFileUrl 指定的红头模板\n\
  503. bkInsertFile 红头模板中正文的位置书签名\n\
  504. ",
  505. };
  506. function fillTemplate() {
  507. var filePath = prompt(
  508. "请输入打开文件路径(本地或是url):",
  509. GetDemoPath("样章2.docx")
  510. );
  511. var templatePath = prompt(
  512. "请输入需要填充的数据的请求地址:",
  513. document.location.protocol +
  514. "//" +
  515. document.location.host +
  516. "/getTemplateData"
  517. );
  518. _WpsInvoke([
  519. {
  520. OpenDoc: {
  521. fileName: filePath,
  522. templateDataUrl: templatePath,
  523. },
  524. },
  525. ]); // OpenDoc方法对应于OA助手dispatcher支持的方法名
  526. }
  527. _wps["fillTemplate"] = {
  528. action: fillTemplate,
  529. code: _WpsInvoke.toString() + "\n\n" + fillTemplate.toString(),
  530. detail:
  531. "\n\
  532. 说明:\n\
  533. 点击按钮,输入要打开的文档路径,输入文档上传接口,打开WPS文字后,将根据文档路径下载并打开对应的文档,\n\
  534. 并自动从模板服务器获取模板数据并套用到文档中\n\
  535. \n\
  536. 方法使用:\n\
  537. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  538. funcs参数信息说明:\n\
  539. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  540. fileName 打开的文档路径\n\
  541. templateDataUrl 模板的服务器路径\n\
  542. ",
  543. };
  544. function convertDoc() {
  545. var filePath = prompt(
  546. "请输入打开文件路径(本地或是url):",
  547. GetDemoPath("样章.docx")
  548. );
  549. var uploadPath = prompt("请输入文档转换后上传接口:", GetUploadPath());
  550. _WpsInvoke([
  551. {
  552. OpenDoc: {
  553. uploadPath: uploadPath, // 保存文档上传接口
  554. fileName: filePath,
  555. suffix: ".pdf",
  556. uploadWithAppendPath: "1", //与suffix配置使用,传入标志位即可
  557. },
  558. },
  559. ]); // OpenDoc方法对应于OA助手dispatcher支持的方法名
  560. }
  561. _wps["convertDoc"] = {
  562. action: convertDoc,
  563. code: _WpsInvoke.toString() + "\n\n" + convertDoc.toString(),
  564. detail:
  565. "\n\
  566. 说明:\n\
  567. 点击按钮,输入要打开的文档路径,输入文档转换后上传接口,如果传的不是有效的服务端地址,将无法使用保存上传功能。\n\
  568. 打开WPS文字后,将根据文档路径下载并打开对应的文档,转换完将自动上传指定服务器地址\n\
  569. \n\
  570. 方法使用:\n\
  571. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  572. funcs参数信息说明:\n\
  573. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  574. uploadPath 保存文档上传接口\n\
  575. fileName 打开的文档路径\n\
  576. suffix 转换类型\n\
  577. uploadWithAppendPath 保存时一并转换的目标格式\n\
  578. ",
  579. };
  580. function taskPaneBookMark() {
  581. var filePath = prompt(
  582. "请输入打开带书签文件路径(本地或是url):",
  583. GetDemoPath("样章.docx")
  584. );
  585. _WpsInvoke([
  586. {
  587. taskPaneBookMark: {
  588. fileName: filePath,
  589. userName: "东方不败",
  590. },
  591. },
  592. ]); // taskPaneBookMark方法对应于OA助手dispatcher支持的方法名
  593. }
  594. _wps["taskPaneBookMark"] = {
  595. action: taskPaneBookMark,
  596. code: _WpsInvoke.toString() + "\n\n" + taskPaneBookMark.toString(),
  597. detail:
  598. "\n\
  599. 说明:\n\
  600. 点击按钮,输入要打开的文档路径,文档中的书签将会在OA助手的Taskpane中显示出来。\n\
  601. 点击TaskPane中的书签,会自动跳转到书签所对应的文件中的位置,点击Taskpane按F2键可以看Taskpane中的html源码。\n\
  602. \n\
  603. 方法使用:\n\
  604. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  605. funcs参数信息说明:\n\
  606. taskPaneBookMark 方法对应于OA助手dispatcher支持的方法名\n\
  607. fileName 文档的路径\n\
  608. userName 传给wps要显示的OA用户名\n\
  609. ",
  610. };
  611. function exitWPS() {
  612. _WpsInvoke(
  613. [
  614. {
  615. ExitWPS: {},
  616. },
  617. ],
  618. true
  619. );
  620. }
  621. _wps["exitWPS"] = {
  622. action: exitWPS,
  623. code: _WpsInvoke.toString() + "\n\n" + exitWPS.toString(),
  624. detail:
  625. "\n\
  626. 说明:\n\
  627. 点击按钮,关闭已打开的WPS\n\
  628. \n\
  629. 方法使用:\n\
  630. 页面点击按钮,通过wps客户端协议通知WPS,调用oaassist插件,执行传输数据中的指令\n\
  631. funcs参数信息说明:\n\
  632. ExitWPS 方法对应于OA助手dispatcher支持的方法名\n\
  633. ",
  634. };
  635. function getDocStatus() {
  636. _WpsInvoke(
  637. [
  638. {
  639. GetDocStatus: {},
  640. },
  641. ],
  642. false
  643. );
  644. }
  645. _wps["getDocStatus"] = {
  646. action: getDocStatus,
  647. code: _WpsInvoke.toString() + "\n\n" + getDocStatus.toString(),
  648. detail:
  649. "\n\
  650. 说明:\n\
  651. 点击按钮,获取活动文档的状态\n\
  652. \n\
  653. 方法使用:\n\
  654. 页面点击按钮,通过wps客户端协议通知WPS,调用oaassist插件,执行传输数据中的指令\n\
  655. funcs参数信息说明:\n\
  656. GetDocStatus 方法对应于OA助手dispatcher支持的方法名\n\
  657. ",
  658. };
  659. //----公文写作的相关方法 这些都必须是在有「公文写作」组件的版本中运行 Start--------
  660. /**
  661. * 判断当前OS是否是Linux系统
  662. *
  663. * @returns
  664. */
  665. function checkOSisLinux() {
  666. if (detectOS() == "Linux") {
  667. return true;
  668. } else {
  669. alert("此方法仅在WPS Linux特定版本支持");
  670. }
  671. }
  672. /**
  673. * 新建一个使用公文写作打开的公文
  674. *
  675. */
  676. function newOfficialDocument() {
  677. if (checkOSisLinux()) {
  678. _WpsInvoke([
  679. {
  680. NewOfficialDocument: {
  681. isOfficialDocument: true,
  682. },
  683. },
  684. ]); // NewOfficialDocument方法对应于OA助手dispatcher支持的方法名
  685. }
  686. }
  687. _wps["newOfficialDocument"] = {
  688. action: newOfficialDocument,
  689. code: _WpsInvoke.toString() + "\n\n" + newOfficialDocument.toString(),
  690. detail:
  691. "\n\
  692. 说明:\n\
  693. 点击按钮,打开WPS公文写作后,新建一个公文\n\
  694. \n\
  695. 方法使用:\n\
  696. 页面点击按钮, 通过wps客户端协议来启动WPS, 调用oaassist插件, 执行插件中的js函数NewOfficialDocument, 新建一个默认模板的公文 n\
  697. funcs参数说明:\n\
  698. NewOfficialDocument方法对应于OA助手dispatcher支持的方法名 n\
  699. ",
  700. };
  701. /**
  702. * 打开一个使用公文写作打开的公文
  703. */
  704. function openOfficialDocument() {
  705. if (checkOSisLinux()) {
  706. var filePath = prompt(
  707. "请输入打开文件路径(本地或是url):",
  708. GetDemoPath("公文样章.wps")
  709. );
  710. var uploadPath = prompt("请输入文档上传接口:", GetUploadPath());
  711. var uploadFieldName = prompt(
  712. "请输入文档上传到业务系统时自定义字段:",
  713. "自定义字段"
  714. );
  715. var backupPath = prompt("请输入文档备份路径:");
  716. _WpsInvoke([
  717. {
  718. OpenDoc: {
  719. uploadPath: uploadPath, // 保存文档上传接口
  720. fileName: filePath,
  721. uploadFieldName: uploadFieldName,
  722. picPath: GetDemoPngPath(),
  723. copyUrl: backupPath,
  724. userName: "东方不败",
  725. },
  726. },
  727. ]); // OpenDoc方法对应于OA助手dispatcher支持的方法名
  728. }
  729. }
  730. _wps["openOfficialDocument"] = {
  731. action: openOfficialDocument,
  732. code: _WpsInvoke.toString() + "\n\n" + openOfficialDocument.toString(),
  733. detail:
  734. "\n\
  735. 说明:\n\
  736. 点击按钮,输入要打开的文档路径,输入文档上传接口,如果传的不是有效的服务端地址,将无法使用保存上传功能。\n\
  737. 打开WPS文字后,将根据文档路径下载并打开对应的文档,保存将自动上传指定服务器地址\n\
  738. \n\
  739. 方法使用:\n\
  740. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  741. funcs参数信息说明:\n\
  742. OpenDoc方法对应于OA助手dispatcher支持的方法名\n\
  743. uploadPath 保存文档上传接口\n\
  744. fileName 打开的文档路径\n\
  745. uploadFieldName 文档上传到业务系统时自定义字段\n\
  746. picPath 插入图片的路径\n\
  747. copyUrl 备份的服务器路径\n\
  748. userName 传给wps要显示的OA用户名\n\
  749. ",
  750. };
  751. /**
  752. * 在线不落地打开一个使用公文写作打开的公文
  753. */
  754. function onlineEditOfficialDocument() {
  755. if (checkOSisLinux()) {
  756. var filePath = prompt(
  757. "请输入打开文件路径(本地或是url):",
  758. GetDemoPath("公文样章.wps")
  759. );
  760. var uploadPath = prompt("请输入文档上传接口:", GetUploadPath());
  761. var uploadFieldName = prompt(
  762. "请输入文档上传到业务系统时自定义字段:",
  763. "自定义字段"
  764. );
  765. _WpsInvoke([
  766. {
  767. OnlineEditDoc: {
  768. uploadPath: uploadPath, // 保存文档上传接口
  769. fileName: filePath,
  770. uploadFieldName: uploadFieldName,
  771. buttonGroups:
  772. "btnSaveAsFile,btnImportDoc,btnPageSetup,btnInsertDate,btnSelectBookmark", //屏蔽功能按钮
  773. userName: "东方不败",
  774. },
  775. },
  776. ]); // onlineEditDoc方法对应于OA助手dispatcher支持的方法名
  777. }
  778. }
  779. _wps["onlineEditOfficialDocument"] = {
  780. action: onlineEditOfficialDocument,
  781. code: _WpsInvoke.toString() + "\n\n" + onlineEditOfficialDocument.toString(),
  782. detail:
  783. "\n\
  784. 说明:\n\
  785. 点击按钮,输入要打开的文档路径,输入文档上传接口,如果传的不是有效的服务端地址,将无法使用保存上传功能。\n\
  786. 打开WPS文字后,将根据文档路径在线打开对应的文档,保存将自动上传指定服务器地址\n\
  787. \n\
  788. 方法使用:\n\
  789. 页面点击按钮,通过wps客户端协议来启动WPS,调用oaassist插件,执行传输数据中的指令\n\
  790. funcs参数信息说明:\n\
  791. OnlineEditDoc方法对应于OA助手dispatcher支持的方法名\n\
  792. uploadPath 保存文档上传接口\n\
  793. fileName 打开的文档路径\n\
  794. uploadFieldName 文档上传到业务系统时自定义字段\n\
  795. buttonGroups 屏蔽的OA助手功能按钮\n\
  796. userName 传给wps要显示的OA用户名\n\
  797. ",
  798. };
  799. /**
  800. * 这是HTML页面上的按钮赋予事件的实现,开发者无需关心,使用自己习惯的方式做开发即可
  801. */
  802. window.onload = function () {
  803. var btns = document.getElementsByClassName("btn");
  804. for (var i = 0; i < btns.length; i++) {
  805. btns[i].onclick = function (event) {
  806. document.getElementById("blockFunc").style.visibility = "visible";
  807. var btn2 = document.getElementById("demoBtn");
  808. btn2.innerText = this.innerText;
  809. document.getElementById("codeDes").innerText =
  810. _wps[this.id].detail.toString();
  811. document.getElementById("code").innerText = _wps[this.id].code.toString();
  812. var onBtnAction = _wps[this.id].action;
  813. // document.getElementById("demoBtn").onclick = onBtnAction //IE不支持箭头函数,改为通用写法
  814. document.getElementById("demoBtn").onclick = function () {
  815. //IE不支持箭头函数,改为通用写法
  816. //之下动作是做了对Node服务的判断和oem.ini的设置
  817. var xhr = new WpsInvoke.CreateXHR();
  818. xhr.onload = function () {
  819. onBtnAction();
  820. };
  821. xhr.onerror = function () {
  822. alert("请确认本地服务端(StartupServer.js)是启动状态");
  823. return;
  824. };
  825. xhr.open("get", "http://127.0.0.1:3888/FileList", true);
  826. xhr.send();
  827. };
  828. hljs.highlightBlock(document.getElementById("code"));
  829. };
  830. }
  831. };
  832. /**
  833. * 检查操作系统
  834. *
  835. * @returns Win10 | Win7 | WinVista | Win2003 | WinXP | Win2000 | Linux | Unix | Mac
  836. */
  837. function detectOS() {
  838. var sUserAgent = navigator.userAgent;
  839. var isWin = navigator.platform == "Win32" || navigator.platform == "Windows";
  840. var isMac =
  841. navigator.platform == "Mac68K" ||
  842. navigator.platform == "MacPPC" ||
  843. navigator.platform == "Macintosh" ||
  844. navigator.platform == "MacIntel";
  845. if (isMac) return "Mac";
  846. var isUnix = navigator.platform == "X11" && !isWin && !isMac;
  847. if (isUnix) return "Unix";
  848. var isLinux = String(navigator.platform).indexOf("Linux") > -1;
  849. if (isLinux) return "Linux";
  850. if (isWin) {
  851. var isWin2K =
  852. sUserAgent.indexOf("Windows NT 5.0") > -1 ||
  853. sUserAgent.indexOf("Windows 2000") > -1;
  854. if (isWin2K) return "Win2000";
  855. var isWinXP =
  856. sUserAgent.indexOf("Windows NT 5.1") > -1 ||
  857. sUserAgent.indexOf("Windows XP") > -1;
  858. if (isWinXP) return "WinXP";
  859. var isWin2003 =
  860. sUserAgent.indexOf("Windows NT 5.2") > -1 ||
  861. sUserAgent.indexOf("Windows 2003") > -1;
  862. if (isWin2003) return "Win2003";
  863. var isWinVista =
  864. sUserAgent.indexOf("Windows NT 6.0") > -1 ||
  865. sUserAgent.indexOf("Windows Vista") > -1;
  866. if (isWinVista) return "WinVista";
  867. var isWin7 =
  868. sUserAgent.indexOf("Windows NT 6.1") > -1 ||
  869. sUserAgent.indexOf("Windows 7") > -1;
  870. if (isWin7) return "Win7";
  871. var isWin10 =
  872. sUserAgent.indexOf("Windows NT 6.1") > -1 ||
  873. sUserAgent.indexOf("Windows 10") > -1;
  874. if (isWin10) return "Win10";
  875. }
  876. return "other";
  877. }