suwell_ofdReader.js 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559
  1. ;(function(w) {
  2. /*
  3. * 方法和控件方法的映射. 一般来说,名称相同.key为js的方法名称;
  4. * value中,real为控件的方法名,如果省略,则认为和js的方法相同.args为控件中该方法接受的参数名称
  5. */
  6. ;(w._METHOD = {
  7. //3.1.2退出插件及阅读器
  8. exit: {
  9. args: [],
  10. },
  11. //导入注释
  12. ImportAnnot: {
  13. args: ['importAnnotInfo'],
  14. },
  15. //导出注释
  16. ExportAnnot: {
  17. args: ['exportAnnotInfo'],
  18. },
  19. // 3.2.1 设置元素可用性
  20. setCompsiteEnable: {
  21. args: ['cmpName', 'isEnable'],
  22. },
  23. // 3.2.1-s 设置元素可用性-标准
  24. setCompositeEnable: {
  25. real: 'setCompsiteEnable',
  26. args: ['cmpName', 'isEnable'],
  27. },
  28. // 3.2.2 设置元素可见性
  29. setCompsiteVisible: {
  30. args: ['cmpName', 'isVisible'],
  31. },
  32. // 3.2.2-s 设置元素可见性-标准
  33. setCompositeVisible: {
  34. real: 'setCompsiteVisible',
  35. args: ['cmpName', 'isVisible'],
  36. },
  37. // 3.2.3 设置插件的背景==setConfigInfo(“reader.backgroundinfo”,xml)*
  38. setBackGroundInfo: {
  39. args: ['config'],
  40. },
  41. // 3.2.4 设置插件的前景==setConfigInfo(“reader.foregroundinfo”,configxml)*
  42. setForeGroundInfo: {
  43. args: ['config'],
  44. },
  45. // 3.2.5 设置视图缩放率
  46. setScale: {
  47. args: ['scale'],
  48. },
  49. // (兼容旧版本)
  50. setZoomRadio: {
  51. args: ['scale'],
  52. },
  53. // (兼容旧版本)
  54. getZoomRadio: {
  55. args: [],
  56. },
  57. // 3.2.6 设置多文档模式==setConfigInfo(“reader.singlemode”,true)*
  58. setSingleMode: {
  59. args: ['mode'],
  60. },
  61. // 获取当前是否单文档模式
  62. isSingleMode: {
  63. args: [],
  64. },
  65. // 3.2.7 设置阅读器模式==setConfigInfo(“readermode”,1)
  66. setReaderMode: {
  67. args: ['mode'],
  68. },
  69. //3.2.7 获取阅读器模式
  70. getReaderMode: {
  71. args: [],
  72. },
  73. // 3.2.8 设置视图首选项==setConfigInfo(“view.navigator”,none)*
  74. setViewPreference: {
  75. args: ['key', 'value'],
  76. },
  77. // 3.2.9 设置回调函数(已不推荐使用)
  78. setCallback: {
  79. args: ['name', 'func', 'after'],
  80. },
  81. // 3.2.9 设置回调函数
  82. registListener: {
  83. args: ['name', 'func', 'after'],
  84. },
  85. // 3.2.9 设置回调函数.移除监听
  86. unRegistListener: {
  87. args: ['listenerID'],
  88. },
  89. // 3.2.10 设置掩膜生效模式。==setConfigInfo(“annot.maskmode”,0)*--setConfigInfo(“maskmode”,0) 说明:0为不禁止;1为禁止显示掩膜(Display);2为禁止打印掩膜(Print);3为全部禁止(DisplayAndPrint);其他值按照0处理。
  90. setMaskMode: {
  91. args: ['mode'],
  92. },
  93. // 3.2.11 设置导航栏不能移动==setConfigInfo(“toolbarmovable”,false)*
  94. setToolbarMovable: {
  95. args: ['value'],
  96. },
  97. setNavigatorVisible: {
  98. args: ['obj', 'visible'],
  99. },
  100. // 3.3.1 设置用户信息
  101. setUserInfo: {
  102. args: ['userInfo'],
  103. },
  104. // 3.3.1 设置用户信息.设置当前用户名
  105. setUserName: {
  106. args: ['name'],
  107. },
  108. // 3.3.1 设置用户信息.获取当前用户名
  109. getUserName: {
  110. args: [],
  111. },
  112. // 3.3.1 设置用户信息.设置用户ID。
  113. setUserID: {
  114. args: ['id'],
  115. },
  116. setDataTag: {
  117. args: ['dataTage'],
  118. },
  119. //获取当前用户标识
  120. getUserID: {
  121. args: [],
  122. },
  123. getDataTag: {
  124. args: [],
  125. },
  126. // 设置登录身份标识
  127. setUserToken: {
  128. args: ['sessionId'],
  129. },
  130. //设置当前用户会话标识
  131. setCookie: {
  132. args: ['sessionId'],
  133. },
  134. //设置网络代理信息
  135. setUserAgent: {
  136. args: ['url'],
  137. },
  138. // 3.3.2 设置文档信息
  139. setDocInfo: {
  140. args: ['docInfo'],
  141. },
  142. // 3.3.2 设置文档信息.设置元数据.
  143. setMetaData: {
  144. args: ['id', 'val'],
  145. },
  146. // 3.3.2 设置文档信息.获取元数据。
  147. getMetaData: {
  148. args: ['id'],
  149. },
  150. // 3.3.3 设置权限信息
  151. setRightInfo: {
  152. args: ['rightInfo'],
  153. },
  154. // 3.3.4 设置追踪水印
  155. setBarcodeInfo: {
  156. args: ['param'],
  157. },
  158. // 3.3.4 添加追踪水印
  159. addTrackInfo: {
  160. args: ['param'],
  161. },
  162. // 3.3.4 清除所有水印。
  163. clearTrackInfo: {
  164. args: [],
  165. },
  166. // 3.3.5 设置文档水印
  167. addWaterMakerAnnot: {
  168. args: ['param'],
  169. },
  170. // 3.3.5 设置文档水印
  171. addWatermarkAnnot: {
  172. real: 'addWaterMakerAnnot',
  173. args: ['param'],
  174. },
  175. // 3.3.5 删除文档水印
  176. delWaterMakerAnnot: {
  177. args: ['user', 'Annotflag'],
  178. },
  179. // 3.3.5 删除文档水印
  180. delWatermarkAnnot: {
  181. real: 'delWaterMakerAnnot',
  182. args: ['user', 'Annotflag'],
  183. },
  184. // 3.3.6 高亮关键词
  185. addDynamicLink: {
  186. args: ['key', 'url', 'color'],
  187. },
  188. // 3.3.6 高亮关键词2
  189. addDynamicLink: {
  190. args: ['key', 'url', 'color', 'bLocate'],
  191. },
  192. // 3.3.5 清除所有高亮关键词
  193. clearDynamicLink: {
  194. args: [],
  195. },
  196. // 3.3.7 获取日志文件地址
  197. getLogFilePath: {
  198. args: [],
  199. },
  200. // 3.3.8 设置服务地址
  201. setServiceAddr: {
  202. args: ['key', 'url'],
  203. },
  204. // 3.3.8设置内容服务地址
  205. setContentSvrAddr: {
  206. args: ['url'],
  207. },
  208. // 3.3.8设置转换服务地址
  209. setConvertSvrAddr: {
  210. args: ['url'],
  211. },
  212. //3.3.8设置注册服务地址
  213. setRegistSvrAddr: {
  214. args: ['url'],
  215. },
  216. //3.3.8设置封装服务地址
  217. setEnvelopSvrAddr: {
  218. real: 'setEncryptSvrAddr',
  219. args: ['url'],
  220. },
  221. //3.3.8设置日志服务地址
  222. setLogSvrAddr: {
  223. args: ['url'],
  224. },
  225. //3.3.8设置日志服务地址-兼容四院标准接口
  226. setLogSvrURL: {
  227. real: 'setLogSvrAddr',
  228. args: ['url'],
  229. },
  230. //3.3.8更新阅读器下载地址
  231. setUpdateSvrAddr: {
  232. args: ['url'],
  233. },
  234. //3.3.9 设置配置信息项
  235. setConfigInfo: {
  236. args: ['configKey', 'configValue'],
  237. },
  238. //3.3.9  设置最大可打印份数
  239. setPrintCopies: {
  240. args: ['number'],
  241. },
  242. //3.3.9 设置可使用打印机名
  243. setPrinterName: {
  244. args: ['printer'],
  245. },
  246. //3.3.9 设置可使用打印分辨率
  247. setPrintResolution: {
  248. args: ['printDpi'],
  249. },
  250. //3.3.10保存配置信息项
  251. saveConfigInfoToIni: {
  252. args: ['svraddr', 'url'],
  253. },
  254. //3.3.11 获取阅读器版本信息项
  255. version: {
  256. args: [],
  257. },
  258. //3.3.11 获取阅读器版本信息项--标准接口
  259. getPluginVersion: {
  260. real: 'version',
  261. args: [],
  262. },
  263. //3.3.12 设置文本框常用意见信息项
  264. setFreqUsedComments: {
  265. args: ['comments'],
  266. },
  267. //3.3.13 自定义文本框落款
  268. setCommentsSignInfo: {
  269. args: ['signinfo'],
  270. },
  271. //3.3.14 打印时是否带章
  272. setPrintSealEnable: {
  273. args: ['isEnable'],
  274. },
  275. //3.3.15设置打印弹出对话框的复选框组件是否选中。
  276. setPrintCompsiteChecked: {
  277. args: ['cmpName', 'bChecked'],
  278. },
  279. //3.3.16设置打印弹出对话框的复选框组件是否可用。
  280. setPrintCompsiteEnable: {
  281. args: ['cmpName', 'bEnable'],
  282. },
  283. scrollScreenOneTime: {
  284. args: ['forward'],
  285. },
  286. // 3.4.1 获取语义位置
  287. getTaggedPosition: {
  288. args: ['fieldId'],
  289. },
  290. // 3.4.2 获取语义内容
  291. getTaggedText: {
  292. args: ['fieldId'],
  293. },
  294. // 3.4.3 获取全文文本内容
  295. getDocumentText: {
  296. args: [],
  297. },
  298. // 3.4.4 获取打开文档的页数
  299. getPageCount: {
  300. args: [],
  301. },
  302. //3.4.5 设置监视并清空剪切板
  303. setClipboardMonitor: {
  304. args: ['bMonitor'],
  305. },
  306. //3.4.6 关闭浏览器不弹出保存确认对话框
  307. closeBrowser: {
  308. args: [''],
  309. },
  310. //3.4.7 获取当前文档是否处于编辑状态
  311. isDocumentModified: {
  312. args: [],
  313. },
  314. //3.4.8 获取组件中当前在阅读状态的文档打开后的修改状态
  315. isDocumentModifiedAfterOpen: {
  316. args: [],
  317. },
  318. //3.4.9 获得文档中签章个数
  319. getSignaturesCount: {
  320. args: ['type'],
  321. },
  322. //3.4.10 获取当前页面索引
  323. getCurrentPageIndex: {
  324. args: [],
  325. },
  326. openFile2: {
  327. args: ['path', 'readeOnly'],
  328. },
  329. // 3.5.1 打开远程文件,并可设置是否只读状态
  330. openFile: {
  331. real: 'openFile2',
  332. //args : [ "path", "readeOnly" ]
  333. args: ['path', false],
  334. },
  335. // 3.5.1 打开远程文件,可编辑状态
  336. openFileOld: {
  337. real: 'openFile',
  338. args: ['path'],
  339. },
  340. // 3.5.2 打开文件并设置保存路径
  341. openurl: {
  342. args: ['open_url', 'save_url', 'readeOnly'],
  343. },
  344. // 3.5.3 打开内容服务文件
  345. openSvcFile: {
  346. args: ['svcAddr', 'docId'],
  347. },
  348. // 3.5.4 保存文件
  349. saveFile: {
  350. args: ['filename'],
  351. },
  352. // 3.5.5 下载安全文件
  353. downloadFile: {
  354. args: ['filename', 'param'],
  355. },
  356. // 3.5.6 打印文件
  357. printFile: {
  358. real: 'printFile3',
  359. args: ['docName', 'bGrayPrint'],
  360. },
  361. // 3.5.7 打印文件
  362. printFileCopies: {
  363. args: ['copies'],
  364. },
  365. //3.5.8 按指定的设置直接打印
  366. printFileBySetting: {
  367. args: ['printSetting'],
  368. },
  369. // 3.5.9 关闭文件
  370. closeFile: {
  371. args: [],
  372. },
  373. // 3.5.10 转换文件
  374. convertFile: {
  375. args: ['srcpath', 'destFile', 'metaContent'],
  376. },
  377. // 3.5.11 执行拷贝
  378. editCopy: {
  379. args: [],
  380. },
  381. // 3.5.12 执行粘贴
  382. editPaste: {
  383. args: [],
  384. },
  385. // 3.5.13 模拟点击
  386. performClick: {
  387. args: ['commandId'],
  388. },
  389. // 3.5.13 模拟点击-指定路径和文件名
  390. performClickConfigable: {
  391. args: ['commandId', 'paramjson'],
  392. },
  393. // 3.5.14 添加注释
  394. addPageAnnot: {
  395. args: ['type', 'index', 'xPos', 'yPos', 'width', 'height', 'parms'],
  396. },
  397. // 3.5.15 执行跳转
  398. gotoDest: {
  399. args: ['pageIndex', 'xpost', 'ypost'],
  400. },
  401. // 3.5.16 执行操作
  402. excuteOperation: {
  403. args: ['commandXML'],
  404. },
  405. // 3.5.17 导入语义模板
  406. importSinemaTemp: {
  407. args: ['param'],
  408. },
  409. //3.5.18 验证签名
  410. validSignature: {
  411. args: ['online', 'signIds'],
  412. },
  413. //3.5.18 验证签名并返回结果
  414. validSignatureWithResult: {
  415. args: ['online', 'signIds'],
  416. },
  417. //3.5.19设置远程打开文件的临时文件模式
  418. setEncryptTempFile: {
  419. args: ['bEncrypt'],
  420. },
  421. //3.5.20全屏显示功能
  422. readerFullScreen: {
  423. args: [],
  424. },
  425. //3.5.21 设置提示框为顶端显示
  426. setWindowNotOnTop: {
  427. args: [],
  428. },
  429. //3.5.22 控制插件是否退出
  430. setExit: {
  431. args: ['isExit'],
  432. },
  433. //3.5.23客户端转换接口
  434. openOfficeFile: {
  435. args: ['filename', 'suffixes'],
  436. },
  437. //3.5.24 注册高级版
  438. setRegistrationInfo: {
  439. args: ['projectInfo', 'registration'],
  440. },
  441. //3.5.25查找文本接口
  442. searchText: {
  443. args: ['keyword', 'bCaseSensitive', 'bWholeWord', 'bForward'],
  444. },
  445. //3.5.26清空注释
  446. clearHandwrittenAnnotation: {
  447. args: [],
  448. },
  449. //3.5.27 在线文件脱密并下载到本地-接口1
  450. decryptAllSeals: {
  451. args: ['bBlack', 'fileName'],
  452. },
  453. //3.5.27 在线文件脱密并下载到本地-接口2
  454. decryptAllSeals: {
  455. args: ['bWordBlack', ' bPictureBlack', 'bSealBlack', 'fileName'],
  456. },
  457. //3.5.28添加远程橡皮图章地址
  458. addStampUrl: {
  459. args: ['url'],
  460. },
  461. //3.5.29 导出图片接口
  462. exportImage: {
  463. args: ['imageInfo'],
  464. },
  465. //3.5.30 自定义盖章
  466. sealSignBySetting: {
  467. args: ['json'],
  468. },
  469. //添加橡皮图章base64文件流
  470. addStampStream: {
  471. args: ['basestream'],
  472. },
  473. //添加橡皮图章拉伸参数
  474. SetKeepStampRatioParam: {
  475. args: ['strIsKeepRatio', 'strWidth', 'strHeight'],
  476. },
  477. //3.5.29 添加文本框注释
  478. addFreeText: {
  479. args: ['textInfo'],
  480. },
  481. //3.3.14 获取所有文本框ID
  482. getAllFreeTextBy: {
  483. args: ['user', 'datatag'],
  484. },
  485. //3.3.14 根据ID获取文本框内容
  486. getFreeTextInfoById: {
  487. args: ['String '],
  488. },
  489. //3.5.29 放大矩形区域
  490. ZoominBoundary: {
  491. args: ['json'],
  492. },
  493. //3.5.30 获取文本框注释
  494. getFreeTextContentById: {
  495. args: ['id'],
  496. },
  497. //3.5.31 修改文本框注释内容
  498. modifyFreeTextById: {
  499. args: ['id', 'text'],
  500. },
  501. //3.5.32 删除指定的文本框注释
  502. deleteAllFreeTextBy: {
  503. args: ['user', 'datatag'],
  504. },
  505. //3.5.33 添加图片
  506. addWaterImageAnnot: {
  507. args: ['imagInfo'],
  508. },
  509. //3.5.34 删除图片
  510. delWaterMakerAnnotByID: {
  511. args: ['annotId'],
  512. },
  513. //3.5.35 设置印章标识
  514. setSealId: {
  515. args: ['sealId'],
  516. },
  517. //3.5.36 更新文档视图缓存
  518. updateViewCache: {
  519. args: ['bClearAll'],
  520. },
  521. //时间戳
  522. setDateFormat: {
  523. args: ['data'],
  524. },
  525. writeDateText: {
  526. args: [],
  527. },
  528. cancleWriteDateText: {
  529. args: [],
  530. },
  531. //文档脱密-全黑
  532. decryptAlltoBlack: {
  533. args: ['saveFileName'],
  534. },
  535. //插入橡皮图章
  536. addStampAnnot: {
  537. args: ['param'],
  538. },
  539. //3.6.1 异步下载接口
  540. downloadHttpFile: {
  541. args: ['url', 'localFileName', 'md5'],
  542. },
  543. //3.6.2 删除本地文件接口
  544. deleteLocalFile: {
  545. args: ['localFileName'],
  546. },
  547. //3.6.3上传本地文件接口
  548. uploadLocalFile: {
  549. args: ['url', 'localFileName'],
  550. },
  551. //3.6.4 获取计算机名
  552. getLocalHostName: {
  553. args: [],
  554. },
  555. //3.6.5 删除本地目录
  556. deleteLocalDir: {
  557. args: ['url'],
  558. },
  559. // 可拖动图片
  560. addAffixAnnot: {
  561. args: ['strAffixAnnot'],
  562. },
  563. //3.6.6 修改本地目录
  564. renameLocalDir: {
  565. args: ['url', 'localDirNamel'],
  566. },
  567. //add interface 2019.10.10
  568. // 插入页面
  569. InsertPage: {
  570. args: [],
  571. },
  572. // 插入页面(指定页面相关信息)
  573. InsertPage: {
  574. args: ['info'],
  575. },
  576. // 插入空白页(指定页面相关信息)
  577. InsertBlankPage: {
  578. args: ['info'],
  579. },
  580. // 删除页面(ID: 从0开始)
  581. DeletePage: {
  582. args: ['pageIndex'],
  583. },
  584. // 根据指定注释类型、用户ID、标识、时间范围等获取注释数量
  585. getAnnotAmountBy: {
  586. args: ['annotInfo'],
  587. },
  588. // 设置右键菜单可见
  589. SetContextMenuStripVisible: {
  590. args: ['operationName', 'visible'],
  591. },
  592. // 设置右键菜单可用
  593. SetContextMenuStripEnable: {
  594. args: ['operationName', 'enable'],
  595. },
  596. //根据签批注释用户ID、标识、页码范围获取注释图片
  597. getSignaturePenAnnotImageBy: {
  598. args: ['annotInfojson'],
  599. },
  600. //获得文档中签章个数
  601. getSignaturesCount: {
  602. args: ['type'],
  603. },
  604. //获取印章的ID
  605. getSignatureID: {
  606. args: ['index'],
  607. },
  608. //获取印章的ID
  609. getSignatrueID: {
  610. real: 'getSignatureID',
  611. args: ['index'],
  612. },
  613. //删除签名
  614. deleteSignature: {
  615. args: ['signatureID'],
  616. },
  617. //导入签名图片-人名章
  618. importSignatureImage: {
  619. args: ['signInfo'],
  620. },
  621. //清除注释功能需要清除文本框、橡皮图章、手写
  622. deleteAnnotationByParameter: {
  623. args: ['annotInfo'],
  624. },
  625. //获取文件中书签功能
  626. getBookmarkInfo: {
  627. args: [''],
  628. },
  629. //获取文档中的可移动的图片水印、橡皮图章、手写、文本框等信息以json返回信息
  630. getAnnotInfoBy: {
  631. args: ['param'],
  632. },
  633. //获取签章所在页码、中心点坐标值以及宽高信息
  634. getSignatureInfo: {
  635. args: ['signatureID'],
  636. },
  637. //导出附件
  638. ExportAttachment: {
  639. args: ['strFilePath'],
  640. },
  641. //根据源文件中签章位置批量打开文件盖章
  642. sealByBatch: {
  643. args: ['srcFileName', 'mbFileUrls', 'saveFileUrls', 'pageIndex'],
  644. },
  645. //同步阻塞打开文件
  646. openFileSyn: {
  647. args: ['filename', 'bReadOnly'],
  648. },
  649. //获取公文域ID
  650. GetCustomTagID: {
  651. args: ['strTagName'],
  652. },
  653. //删除公文域ID对应的内容
  654. DeleteCustomTagContentbyID: {
  655. args: ['strID'],
  656. },
  657. //设置橡皮图章不绘制控制点参数
  658. SetNotDrawdragControl: {
  659. args: ['strControlList'],
  660. },
  661. //获取文件指定页面宽度
  662. GetPageWidth: {
  663. args: ['pageIndex'],
  664. },
  665. //获取文件指定页面高度
  666. GetPageHeight: {
  667. args: ['pageIndex'],
  668. },
  669. //传入base64数据流信息,直接在内存中打开
  670. openBase64File: {
  671. args: ['base64Info'],
  672. },
  673. //保存并返回文件base64数据流信息
  674. saveBase64File: {
  675. args: [],
  676. },
  677. //根据info添加文号章
  678. AddChapterBy: {
  679. args: ['chapterInfo'],
  680. },
  681. //动态隐藏或者显示导航栏面板里的按钮
  682. setNavigationButtonVisible: {
  683. args: ['navType', 'buttonName', 'visible'],
  684. },
  685. //从base64pdf文件转换到指定路径ofd文件并返回文件base64数据流信息
  686. convertFileFromBase64PDF: {
  687. args: ['base64Info', 'destFile'],
  688. },
  689. //获取文件的MD5哈希值
  690. getFileMd5Value: {
  691. args: [],
  692. },
  693. //根据页面范围返回文件base64数据流信息
  694. saveBase64FilebyIndex: {
  695. args: ['strPageindex'],
  696. },
  697. //获取某个区域内的注释信息
  698. getAnnotIdsByInfo: {
  699. args: ['params'],
  700. },
  701. //粘贴注释到指定位置
  702. copyAnnotsToPos: {
  703. args: ['params'],
  704. },
  705. //通过书签名称,获取书签的boundary
  706. getBookmarkBoundaryByName: {
  707. args: ['sname'],
  708. },
  709. //拆分OFD文件
  710. DistillOFD: {
  711. args: ['distillInfo'],
  712. },
  713. //合并OFD文件
  714. MergeOFD: {
  715. args: ['distillInfo'],
  716. },
  717. //提取页面为txt文件
  718. DistillPageAsTxt: {
  719. args: ['distillInfo'],
  720. },
  721. //根据标识name获取文本批注的信息<userid,dataId,批注内容,批注框位置>
  722. getFreeTextInfoByName: {
  723. args: ['name'],
  724. },
  725. //根据指定用户和环节,获取所有文本批注标识/name列表
  726. getAllFreeTextNameBy: {
  727. args: ['user', 'datatag'],
  728. },
  729. //要修改的文本批注的标识/name
  730. modifyFreeTextByName: {
  731. args: ['name', 'freetextInfo'],
  732. },
  733. //打开接续文档
  734. openContinuousFile: {
  735. args: ['fileInfo'],
  736. },
  737. //设置隐写水印信息
  738. setSafeWatermarkInfo: {
  739. args: ['displaySafeWatermark', 'printSafeWatermark', 'userCode', 'initPassword'],
  740. },
  741. }),
  742. /*
  743. * 初始化时需要隐藏的
  744. */
  745. (w._HIDDEN = ['menu'])
  746. })(window)
  747. var OFD = (function(_w) {
  748. /*
  749. * 常量
  750. */
  751. var Constant = {
  752. // CLSID
  753. CLSID: 'C7F277DC-6C47-AB2C-FB6A-070DC8BE7533',
  754. // 控件的注册名
  755. ACTIVE_NAME_OLD: 'suwellreaderax.SuwellOfdActiveX',
  756. ACTIVE_NAME: 'suwellreaderax.OFDReaderActiveX',
  757. // 嵌入类型
  758. EMBED_TYPE: 'application/x-suwell',
  759. // 随机字符种子
  760. RANDOM_SEED: '0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM',
  761. }
  762. var Method = {
  763. // 控件组件的显示或隐藏
  764. setCompsiteVisible: {
  765. args: ['name', 'visible'],
  766. },
  767. // 兼容旧版
  768. setCompositeVisible: {
  769. real: 'setCompsiteVisible',
  770. args: ['name', 'visible'],
  771. },
  772. // 打文件(包括本地和远程)
  773. openFile: {
  774. args: ['path', 'readOnly'],
  775. },
  776. // 关闭当前文件
  777. closeFile: {
  778. args: [],
  779. },
  780. }
  781. /*
  782. * 一些简单的css
  783. */
  784. var CSS = {
  785. info:
  786. 'margin: 10px 0px; padding: 12px; border-radius:10px; color: #00529B; background-color: #BDE5F8;',
  787. success:
  788. 'margin: 10px 0px; padding: 12px; border-radius:10px; color: #4F8A10; background-color: #DFF2BF;',
  789. warn:
  790. 'margin: 10px 0px; padding: 12px; border-radius:10px; color: #9F6000; background-color: #FEEFB3;',
  791. error:
  792. 'margin: 10px 0px; padding: 12px; border-radius:10px; color: #D8000C; background-color: #FFBABA;',
  793. }
  794. /*
  795. * 工具
  796. */
  797. var Tool = {
  798. // 合并对象
  799. extend: function(defs, target) {
  800. var r = target
  801. if (this.isNull(r)) {
  802. if (this.isArray(defs)) {
  803. r = []
  804. } else {
  805. r = {}
  806. }
  807. }
  808. this.each(defs, function(n, v) {
  809. if (!(n in r)) {
  810. r[n] = v
  811. }
  812. })
  813. return r
  814. },
  815. // 判断参数是否是数组
  816. isArray: function(v) {
  817. return Object.prototype.toString.call(v) === '[object Array]'
  818. },
  819. // 判断是否为纯粹对象,like jquery.isPlainObject
  820. isPlainObject: function(v) {
  821. if (!v || v.toString() !== '[object Object]' || v.nodeType || 'setInterval' in v) {
  822. return false
  823. }
  824. try {
  825. if (
  826. v.constructor &&
  827. !v.hasOwnProperty('constructor') &&
  828. !v.constructor.prototype.hasOwnProperty('isPrototypeOf')
  829. ) {
  830. return false
  831. }
  832. } catch (e) {
  833. return false
  834. }
  835. var key
  836. for (key in v) {
  837. }
  838. return key === undefined || v.hasOwnProperty(key)
  839. },
  840. // 判断参数是否是undefined或null
  841. isNull: function(v) {
  842. return typeof v == 'undefined' || (v != 0 && !v)
  843. },
  844. // 判断参数是有有效值
  845. isValid: function(v) {
  846. return this.isNull(v) !== true
  847. },
  848. // getElementById
  849. _$: function(id) {
  850. return document.getElementById(id)
  851. },
  852. // createElement
  853. _new: function(tag) {
  854. return document.createElement(tag)
  855. },
  856. // for-each like jquery
  857. each: function(o, fn) {
  858. if (this.isNull(o)) {
  859. return o
  860. }
  861. if (this.isArray(o)) {
  862. for (
  863. var i = 0, ol = o.length, val = o[0];
  864. i < ol && fn.call(val, i, val) !== false;
  865. val = o[++i]
  866. ) {}
  867. } else {
  868. for (var i in o) {
  869. if (fn.call(o[i], i, o[i]) === false) {
  870. break
  871. }
  872. }
  873. }
  874. return o
  875. },
  876. // 对字符串进行转义
  877. escape: function(s) {
  878. return ('' + s).replace(/["'\\\n\r\u2028\u2029]/g, function(character) {
  879. // http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4
  880. switch (character) {
  881. case '"':
  882. case "'":
  883. case '\\':
  884. return '\\' + character
  885. case '\n':
  886. return '\\n'
  887. case '\r':
  888. return '\\r'
  889. case '\u2028':
  890. return '\\u2028'
  891. case '\u2029':
  892. return '\\u2029'
  893. }
  894. })
  895. },
  896. /*
  897. * 浏览器类型判断 http://
  898. * stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
  899. */
  900. Browser: {
  901. // Opera 8.0+ (UA detection to detect Blink/v8-powered Opera)
  902. isOpera: function() {
  903. return !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0
  904. },
  905. // Firefox 1.0+
  906. isFirefox: function() {
  907. return typeof InstallTrigger !== 'undefined'
  908. },
  909. // At least Safari 3+: "[object HTMLElementConstructor]"
  910. isSafari: function() {
  911. return Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0
  912. },
  913. // Chrome 1+
  914. isChrome: function() {
  915. return !!window.chrome && !this.isOpera()
  916. },
  917. // IE6-11
  918. isIE: function() {
  919. // At least IE6
  920. // 此处防止编辑器把正则误认为注释而出现问题
  921. return eval('/*@cc_on!@*/false || !!document.documentMode')
  922. },
  923. },
  924. /*
  925. * 系统和浏览器位数
  926. */
  927. Bit: {
  928. // 操作系统位数
  929. os: function() {
  930. var agent = navigator.userAgent
  931. var isX64OS = agent.indexOf('WOW64') != -1 || agent.indexOf('Win64') != -1
  932. return isX64OS ? 64 : 32
  933. },
  934. // ie的位数
  935. ie: function() {
  936. var agent = navigator.userAgent
  937. var o = OFD.Bit.os
  938. var isX64IE = o == 64 && agent.indexOf('MSIE') != -1 && agent.indexOf('x64') != -1
  939. return isX64IE ? 64 : 32
  940. },
  941. },
  942. /*
  943. * 页面方法
  944. */
  945. Page: {
  946. // 获取窗口宽度
  947. width: function() {
  948. var w = 0
  949. if (window.innerWidth) {
  950. w = window.innerWidth
  951. } else if (document.body && document.body.clientWidth) {
  952. w = document.body.clientWidth
  953. }
  954. // 通过深入Document内部对body进行检测,获取窗口大小
  955. if (
  956. document.documentElement &&
  957. document.documentElement.clientHeight &&
  958. document.documentElement.clientWidth
  959. ) {
  960. w = document.documentElement.clientWidth
  961. }
  962. return w
  963. },
  964. // 获取窗口高度
  965. height: function() {
  966. var h = 0
  967. if (window.innerHeight) {
  968. h = window.innerHeight
  969. } else if (document.body && document.body.clientHeight) {
  970. h = document.body.clientHeight
  971. }
  972. // 通过深入Document内部对body进行检测,获取窗口大小
  973. if (
  974. document.documentElement &&
  975. document.documentElement.clientHeight &&
  976. document.documentElement.clientWidth
  977. ) {
  978. h = document.documentElement.clientHeight
  979. }
  980. return h
  981. },
  982. },
  983. }
  984. var _Private = function(reader, config) {
  985. // reader对象本身
  986. this.reader = reader
  987. // object的id
  988. this.id
  989. // 控件对象
  990. this.obj
  991. // 配置
  992. this.cfg = Tool.extend(
  993. // 合并配置
  994. {
  995. // 容纳控件的div的id
  996. div: undefined,
  997. // 控件宽度
  998. width: 'auto',
  999. // 控件高度
  1000. height: 'auto',
  1001. // 组件初始化时的状态
  1002. compsite: {
  1003. // 显示的控件
  1004. show: [],
  1005. // 隐藏的控件
  1006. hide: [],
  1007. },
  1008. // 控件安装程序的下载路径
  1009. // downURL : undefined,
  1010. downURL:
  1011. 'http://localhost:8080/cpcns-content-server/installer/SuwellReader_Pro_2.0_setup_windows_i386.exe',
  1012. // 是否检查控件已经安装
  1013. checkInstalled: false,
  1014. // 是否在未给定容纳控件的div时自动新建
  1015. autoNewDiv: false,
  1016. // codebase
  1017. codebase: undefined,
  1018. },
  1019. config
  1020. )
  1021. if (_w._HIDDEN) {
  1022. // 如果没有设置,则使用默认的隐藏
  1023. var h = this.cfg.compsite.hide
  1024. if (h == undefined || h.length == 0) {
  1025. this.cfg.compsite.hide = _w._HIDDEN
  1026. }
  1027. }
  1028. // 缓存未完成的操作,key为函数名称,value为每次操作的参数的数组
  1029. this.operates = {
  1030. // openFile : [ [ "doc1" ], [ "doc2" ] ]
  1031. }
  1032. // ready后的回调函数
  1033. this.callback = []
  1034. /*
  1035. * 缓存操作
  1036. */
  1037. this.cache = function(fnName, fnArgs) {
  1038. var o = this.operates[fnName]
  1039. if (Tool.isNull(o)) {
  1040. o = new Array()
  1041. this.operates[fnName] = o
  1042. }
  1043. o.push(fnArgs)
  1044. }
  1045. /*
  1046. * 生成随机串
  1047. */
  1048. this.randomText = function(length) {
  1049. var x = Constant.RANDOM_SEED
  1050. var s = ''
  1051. for (var i = 0; i < length; i++) {
  1052. s += x.charAt(Math.ceil(Math.random() * 100000000) % x.length)
  1053. }
  1054. return s
  1055. }
  1056. /*
  1057. * 写出HTML信息
  1058. */
  1059. this.message = function(html, level) {
  1060. var div = Tool._$(this.cfg.div)
  1061. if (Tool.isValid(div)) {
  1062. if (Tool.isNull(level)) {
  1063. level = 'error'
  1064. }
  1065. if (level == 'none') {
  1066. div.innerHTML = html
  1067. } else {
  1068. div.innerHTML = "<span style='" + CSS[level] + "'>" + html + '</span>'
  1069. }
  1070. } else {
  1071. alert(html)
  1072. }
  1073. }
  1074. /*
  1075. * 判断组件是否已经安装
  1076. */
  1077. this.checkComponent = function() {
  1078. // alert("判断组件是否已经安装");
  1079. if (Tool.Browser.isIE()) {
  1080. return this.hasActiveX()
  1081. } else if (Tool.Browser.isFirefox()) {
  1082. return this.hasEmbed()
  1083. } else if (Tool.Browser.isChrome()) {
  1084. return this.hasEmbed()
  1085. }
  1086. return '不支持的浏览器类型'
  1087. }
  1088. /*
  1089. * 判断Firefox是否已经安装了OFD控件
  1090. */
  1091. this.hasEmbed = function() {
  1092. var version = navigator.plugins['Suwell Reader Plugin']
  1093. if (typeof version == 'undefined') {
  1094. var html = 'OFD阅读控件没有正确安装,请下载安装!'
  1095. if (Tool.isValid(this.cfg.downURL)) {
  1096. html +=
  1097. "<a href='" + //
  1098. this.cfg.downURL + //
  1099. "' target='_blank'>&gt;&gt;&gt;&gt;&nbsp;&nbsp;下载&nbsp;&nbsp;&lt;&lt;&lt;&lt;</a>"
  1100. }
  1101. // html +=
  1102. // "<br>由于安装程序会更改IE的安全设置并注册dll文件,安全软件可能会弹出安全警告,允许本软件继续即可。<br>建议使用管理员权限运行本软件。";
  1103. this.message(html, 'warn')
  1104. return false
  1105. } else {
  1106. return true
  1107. }
  1108. }
  1109. /*
  1110. * 判断IE是否安装了OFD控件
  1111. */
  1112. this.hasActiveX = function() {
  1113. if ('ActiveXObject' in window) {
  1114. // 判断是否IE
  1115. if (this.cfg.checkInstalled !== true) {
  1116. return true
  1117. }
  1118. try {
  1119. // 判断是否安装OFD阅读器
  1120. var axo = new ActiveXObject(Constant.ACTIVE_NAME)
  1121. return true
  1122. } catch (e) {
  1123. try {
  1124. // 判断是否安装OFD阅读器
  1125. var axo = new ActiveXObject(Constant.ACTIVE_NAME_OLD)
  1126. return true
  1127. } catch (e) {
  1128. var html = 'OFD阅读控件没有正确安装,请下载安装!'
  1129. if (Tool.isValid(this.cfg.downURL)) {
  1130. html +=
  1131. "<a href='" + //
  1132. this.cfg.downURL + //
  1133. "' target='_blank'>&gt;&gt;&gt;&gt;&nbsp;&nbsp;下载&nbsp;&nbsp;&lt;&lt;&lt;&lt;</a>"
  1134. }
  1135. // html +=
  1136. // "<br>由于安装程序会更改IE的安全设置并注册dll文件,安全软件可能会弹出安全警告,允许本软件继续即可。<br>建议使用管理员权限运行本软件。";
  1137. this.message(html, 'warn')
  1138. }
  1139. }
  1140. } else {
  1141. this.message('无法显示ActiveX控件,请使用IE访问', 'warn')
  1142. }
  1143. return false
  1144. }
  1145. /*
  1146. * 输出控件的HTML
  1147. */
  1148. this.write = function() {
  1149. var w = this.cfg.width
  1150. if (Tool.isNull(w) || w == 'auto') {
  1151. w = '100%'
  1152. }
  1153. var h = this.cfg.height
  1154. if (Tool.isNull(h) || h == 'auto') {
  1155. h = Tool.Page.height() - 10 + 'px'
  1156. }
  1157. if (Tool.Browser.isIE()) {
  1158. this.message(
  1159. "<object id='" +
  1160. this.id + // id
  1161. "' width='" +
  1162. w + // width
  1163. "' height='" +
  1164. h + // heigth
  1165. "' classid='CLSID:" +
  1166. Constant.CLSID + // clsid
  1167. // + "' codebase='" + this.cfg.codebase
  1168. // //
  1169. // codebase,不使用cab时注释掉此行
  1170. "'><param name='object_id' value = '" +
  1171. this.id +
  1172. "'><param name='inited_call' value = '__OFD_OCX_Ready'><param name='object_width' value = '" +
  1173. w +
  1174. "'><param name='object_height' value = '" +
  1175. h +
  1176. "'> " +
  1177. '</object>',
  1178. 'none'
  1179. )
  1180. } else if (Tool.Browser.isFirefox()) {
  1181. this.message(
  1182. '<embed toolbar_visible="true" id=\'' + //chenjl默认隐藏工具栏
  1183. this.id + // id
  1184. "' width='" +
  1185. w + // width
  1186. "' height='" +
  1187. h + // heigth
  1188. "' type='" +
  1189. Constant.EMBED_TYPE + // type
  1190. "' object_id='" +
  1191. this.id +
  1192. "' inited_call='__OFD_OCX_Ready" + // callback
  1193. "' >",
  1194. 'none'
  1195. )
  1196. } else if (Tool.Browser.isChrome()) {
  1197. this.message(
  1198. '<embed toolbar_visible="true" id=\'' + //chenjl默认隐藏工具栏
  1199. this.id + // id
  1200. "' width='" +
  1201. w + // width
  1202. "' height='" +
  1203. h + // heigth
  1204. "' type='" +
  1205. Constant.EMBED_TYPE + // type
  1206. "' object_id='" +
  1207. this.id +
  1208. "' inited_call='__OFD_OCX_Ready" + // callback
  1209. "' >",
  1210. 'none'
  1211. )
  1212. } else {
  1213. this.message('不支持的浏览器类型', 'error')
  1214. }
  1215. }
  1216. /*
  1217. * 加载控件
  1218. */
  1219. this.load = function() {
  1220. var rand = this.randomText(10)
  1221. if (Tool.isNull(this.cfg.div)) {
  1222. if (this.cfg.autoNewDiv === true) {
  1223. // 新建一个div放置控件,并追加到body的最后
  1224. var div = Tool._new('div')
  1225. div.id = 'ofd_div_' + rand
  1226. var body = document.body
  1227. if (Tool.isNull(body)) {
  1228. this.message('请在onload中调用本方法', 'warn')
  1229. return
  1230. } else {
  1231. body.appendChild(div)
  1232. }
  1233. this.cfg.div = div.id
  1234. } else {
  1235. this.message('请指定一个div,以便写入控件!')
  1236. return
  1237. }
  1238. }
  1239. var check = this.checkComponent()
  1240. if (check === true) {
  1241. this.message('正在加载控件,请稍候...', 'info')
  1242. this.id = 'ofd_ocx_' + rand
  1243. this.write()
  1244. } else if (check === false) {
  1245. // alert("控制加载失败");
  1246. // this.message("控件加载失败", "error");
  1247. } else {
  1248. this.message(check)
  1249. }
  1250. }
  1251. /*
  1252. * 加载配置,完成准备工作,只执行一次
  1253. */
  1254. this.ready = function() {
  1255. if (this.reader.valid()) {
  1256. // 已经初始化
  1257. return
  1258. }
  1259. var o = Tool._$(this.id)
  1260. //if (Tool.isNull(o)) {// 判断是否有对象
  1261. // this.message("控件未正确初始化!");
  1262. // return;
  1263. //}
  1264. // 赋值,很重要
  1265. this.obj = o
  1266. // private
  1267. var T = this
  1268. // 控制初始化时的组件显示
  1269. Tool.each(['show', 'hide'], function(i, n) {
  1270. var v = T.cfg.compsite[n]
  1271. if (Tool.isValid(v) && v.length > 0) {
  1272. reader.setCompsiteVisible(v, n == 'show')
  1273. }
  1274. })
  1275. // 加载完毕前的动作都执行一遍
  1276. Tool.each(this.operates, function(n, v) {
  1277. if (Tool.isArray(v) && v.length > 0) {
  1278. var fn = T.reader[n] // 得到reader对象的函数
  1279. if (fn) {
  1280. // 如果正确,执行函数
  1281. Tool.each(v, function(i, args) {
  1282. try {
  1283. fn.apply(T.reader, args)
  1284. } catch (e) {}
  1285. })
  1286. } else {
  1287. _log('Not found function ' + n + ' from Reader')
  1288. }
  1289. v.length = 0 // 清除缓存
  1290. }
  1291. })
  1292. }
  1293. }
  1294. // 缓存所有的Reader对象,id为reader的id,value为private对象实例
  1295. var _ = {}
  1296. /*
  1297. * 控件封装
  1298. */
  1299. function Reader(config) {
  1300. // 构建私有
  1301. var _p = new _Private(this, config)
  1302. // 加载
  1303. _p.load()
  1304. // 控件的id
  1305. this.id = _p.id
  1306. // 缓存
  1307. _[this.id] = _p
  1308. // 当调用控件方法时回调
  1309. this.onInvoke = function(fnName, fnRet) {}
  1310. }
  1311. /*
  1312. * 检查组件是否准备完毕
  1313. */
  1314. Reader.prototype.valid = function() {
  1315. return Tool.isValid(_[this.id].obj)
  1316. }
  1317. /*
  1318. * 控件版本号
  1319. */
  1320. Reader.prototype.version = function() {
  1321. var o = Tool._$(this.id)
  1322. try {
  1323. return o.version()
  1324. } catch (e) {}
  1325. return false
  1326. }
  1327. // 遍历注册所有的方法
  1328. Tool.each(Tool.isValid(_w._METHOD) ? _w._METHOD : Method, function(name, val) {
  1329. Reader.prototype[name] = function() {
  1330. // 方法名
  1331. var n = val.real
  1332. if (Tool.isNull(n)) {
  1333. n = name
  1334. }
  1335. // 参数
  1336. var l = val.args.length,
  1337. al = arguments.length
  1338. if (l > al) {
  1339. l = al
  1340. }
  1341. var arg = []
  1342. for (var i = 0; i < l; i++) {
  1343. arg[i] = arguments[i]
  1344. }
  1345. var _p = _[this.id]
  1346. var T = this
  1347. // 返回值
  1348. var result
  1349. if (this.valid()) {
  1350. var o = _p.obj
  1351. if (Tool.isArray(arg[0])) {
  1352. // 第一个参数是数组,拆开执行
  1353. var A = arg.slice() // clone
  1354. Tool.each(arg[0], function(i, v) {
  1355. A[0] = v
  1356. result = doEval(T, o, n, A, val.ret)
  1357. })
  1358. } else {
  1359. // 执行并返回值
  1360. result = doEval(T, o, n, arg, val.ret)
  1361. }
  1362. } else {
  1363. // 缓存操作
  1364. _p.cache(name, arg)
  1365. }
  1366. var ret = val.ret
  1367. if (Tool.isNull(ret)) {
  1368. return result
  1369. } else if (Tool.isFunction(ret)) {
  1370. return ret.call(this, result)
  1371. } else {
  1372. return ret
  1373. }
  1374. }
  1375. })
  1376. // 执行方法,并回调
  1377. var doEval = function(reader, o, n, args) {
  1378. if (false && n === 'addFreeText') {
  1379. var json = JSON.parse(args)
  1380. var page = {}
  1381. var user10 =
  1382. '{"text":"","page-index":"1","pos-x":"40.65","pos-y":"59.06","width":"130.19","height":"133.39","font-family": "simsun","font-size":"36","font-style":"italic","font-weight":"bold", "font-color":"#ff0000"}'
  1383. var user1 =
  1384. '{"page-index":"1","pos-x":"54.83","pos-y":"225.87","width":"141.83","height":"100.66","text":""}',
  1385. user2 =
  1386. '{"page-index":"1","pos-x":"55.04","pos-y":"192.21","width":"141.83","height":"33.66","text":"请在此处添加意见"}',
  1387. user3 =
  1388. '{"page-index":"1","pos-x":"55.04","pos-y":"158.13","width":"141.62","height":"33.66","text":"请在此处添加意见"}',
  1389. user4 =
  1390. '{"page-index":"1","pos-x":"55.04","pos-y":"124.47","width":"141.62","height":"33.66","text":"请在此处添加意见"}',
  1391. user5 =
  1392. '{"page-index":"1","pos-x":"55.04","pos-y":"90.60","width":"141.62","height":"34.08","text":"请在此处添加意见"}',
  1393. user6 =
  1394. '{"page-index":"1","pos-x":"54.83","pos-y":"79.17","width":"47.21","height":"11.43","text":"请在此处添加意见"}'
  1395. var jsonobjects = []
  1396. if (json.userid == '1') {
  1397. jsonobjects[0] = user10
  1398. } else if (json.userid == '2') {
  1399. jsonobjects[0] = user2
  1400. } else if (json.userid == '3') {
  1401. jsonobjects[0] = user3
  1402. } else if (json.userid == '4') {
  1403. jsonobjects[0] = user4
  1404. } else if (json.userid == '5') {
  1405. jsonobjects[0] = user5
  1406. } else if (json.userid == '6') {
  1407. jsonobjects[0] = user6
  1408. }
  1409. var nret = {}
  1410. nret.id = _eval(o, n, jsonobjects)
  1411. nret.index = '1'
  1412. nret.x = '54.83'
  1413. nret.y = '225.87'
  1414. var ret = nret
  1415. } else {
  1416. var ret = _eval(o, n, args)
  1417. }
  1418. if (reader.onInvoke) {
  1419. try {
  1420. // if (ret == undefined) {
  1421. // reader.onInvoke.call(reader, n);
  1422. // } else {
  1423. reader.onInvoke.call(reader, n, ret)
  1424. // }
  1425. } catch (e) {
  1426. _log('onInvoke ' + n + ' : ' + e)
  1427. }
  1428. }
  1429. return ret
  1430. }
  1431. // 执行控件的方法
  1432. var _eval = function(o, m, args) {
  1433. var arg = ''
  1434. Tool.each(args, function(i, v) {
  1435. if (i > 0) {
  1436. arg += ', '
  1437. }
  1438. if (typeof v === 'string') {
  1439. arg += '"' + Tool.escape(v) + '"'
  1440. } else {
  1441. arg += v
  1442. }
  1443. })
  1444. try {
  1445. return eval('o.' + m + '(' + arg + ')')
  1446. } catch (e) {
  1447. _log('Eval ' + m + ' : ' + e)
  1448. }
  1449. }
  1450. // 记录日志
  1451. var _log = function(msg) {
  1452. window.console && console.log(msg)
  1453. }
  1454. // 缓存所有的定时结果
  1455. var cache = {}
  1456. return {
  1457. // 防止外界的非法访问
  1458. OCX: {
  1459. // 初始化一个控件
  1460. init: function(a) {
  1461. var config = {}
  1462. if (Tool.isPlainObject(a)) {
  1463. config = Tool.extend(config, a)
  1464. } else {
  1465. var name = ['div', 'width', 'height', 'downURL']
  1466. for (var i = 0; i < arguments.length; i++) {
  1467. if (i > name.length - 1) {
  1468. break
  1469. }
  1470. var n = name[i],
  1471. v = arguments[i]
  1472. if (Tool.isValid(v)) {
  1473. config[n] = arguments[i]
  1474. }
  1475. }
  1476. }
  1477. // 新对象
  1478. var r = new Reader(config)
  1479. // 尝试用版本号来确定是否已经加载
  1480. var T = this
  1481. cache[r.id] = setInterval(function() {
  1482. if (r.version() !== false) {
  1483. T.ready(r.id)
  1484. }
  1485. }, 500) // 缓存起来
  1486. return r
  1487. },
  1488. // 控件已准备好
  1489. ready: function(id) {
  1490. var _p = _[id]
  1491. if (Tool.isValid(_p)) {
  1492. _p.ready()
  1493. clearInterval(cache[id])
  1494. _log('Reader is ready, version is ' + _p.reader.version())
  1495. }
  1496. return _p
  1497. },
  1498. },
  1499. }
  1500. })(window) // 立即执行函数,使其成为单例
  1501. var suwell = {}
  1502. // 加载并初始化阅读器OCX控件
  1503. var width
  1504. var height
  1505. suwell.ofdReaderInit = function(divID, width, height) {
  1506. this.width = width
  1507. this.height = height
  1508. return OFD.OCX.init(divID, width, height)
  1509. }
  1510. var ofdreader = {}
  1511. ofdreader.init = function(divID, width, height) {
  1512. this.width = width
  1513. this.height = height
  1514. return OFD.OCX.init(divID, width, height)
  1515. }
  1516. export default suwell