CPDFViewCtrlPlugin.swift 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. //
  2. // CPDFViewCtrlPlugin.swift
  3. //
  4. // Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
  5. //
  6. // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  7. // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  8. // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  9. // This notice may not be removed from this file.
  10. import Flutter
  11. import UIKit
  12. import ComPDFKit
  13. import ComPDFKit_Tools
  14. class CPDFViewCtrlPlugin {
  15. public var _methodChannel : FlutterMethodChannel
  16. private var pdfViewController : CPDFViewController
  17. init(viewId: Int64, binaryMessenger messenger: FlutterBinaryMessenger, controller : CPDFViewController) {
  18. self.pdfViewController = controller
  19. _methodChannel = FlutterMethodChannel.init(name: "com.compdfkit.flutter.ui.pdfviewer.\(viewId)", binaryMessenger: messenger)
  20. registeryMethodChannel()
  21. var documentPlugin = CPDFDocumentPlugin(pdfViewController: pdfViewController, uid: String(describing: viewId), binaryMessager: messenger)
  22. }
  23. private func registeryMethodChannel(){
  24. _methodChannel.setMethodCallHandler({
  25. (call: FlutterMethodCall, result: FlutterResult) -> Void in
  26. print("ComPDFKit-Flutter: iOS-MethodChannel: [method:\(call.method)]")
  27. // Handle battery messages.
  28. switch call.method {
  29. case CPDFConstants.setScale:
  30. guard let pdfListView = self.pdfViewController.pdfListView else {
  31. return
  32. }
  33. let scaleValue = call.arguments as! NSNumber
  34. pdfListView.setScaleFactor(CGFloat(truncating: scaleValue), animated: true)
  35. case CPDFConstants.getScale:
  36. guard let pdfListView = self.pdfViewController.pdfListView else {
  37. result(1.0)
  38. return
  39. }
  40. result(pdfListView.scaleFactor)
  41. case CPDFConstants.setReadBackgroundColor:
  42. guard let pdfListView = self.pdfViewController.pdfListView else {
  43. return
  44. }
  45. let initInfo = call.arguments as? [String: String]
  46. let displayModeName = initInfo?["displayMode"] ?? "light"
  47. // light, dark,repia, reseda
  48. switch displayModeName {
  49. case "light":
  50. pdfListView.displayMode = .normal
  51. case "dark":
  52. pdfListView.displayMode = .night
  53. case "sepia":
  54. pdfListView.displayMode = .soft
  55. case "reseda":
  56. pdfListView.displayMode = .green
  57. default:
  58. pdfListView.displayMode = .normal
  59. }
  60. pdfListView.layoutDocumentView()
  61. case CPDFConstants.getReadBackgroundColor:
  62. guard let pdfListView = self.pdfViewController.pdfListView else {
  63. result("#FFFFFF")
  64. return
  65. }
  66. let dispalyMode = pdfListView.displayMode
  67. switch dispalyMode {
  68. case .normal:
  69. result("#FFFFFF")
  70. case .night:
  71. result("#000000")
  72. case .soft:
  73. result("#FFFFFF")
  74. case .green:
  75. result("#FFEFBE")
  76. case .custom:
  77. result("#CDE6D0")
  78. @unknown default:
  79. result("#FFFFFF")
  80. }
  81. case CPDFConstants.setFromFieldHighlight:
  82. guard let pdfListView = self.pdfViewController.pdfListView else {
  83. return
  84. }
  85. let highlightForm = call.arguments as! Bool
  86. CPDFKitConfig.sharedInstance().setEnableFormFieldHighlight(highlightForm)
  87. pdfListView.layoutDocumentView()
  88. case CPDFConstants.isFromFieldHighlight:
  89. result(CPDFKitConfig.sharedInstance().enableFormFieldHighlight())
  90. case CPDFConstants.setLinkHighlight:
  91. guard let pdfListView = self.pdfViewController.pdfListView else {
  92. return
  93. }
  94. let linkHighlight = call.arguments as! Bool
  95. CPDFKitConfig.sharedInstance().setEnableLinkFieldHighlight(linkHighlight)
  96. pdfListView.layoutDocumentView()
  97. case CPDFConstants.isLinkHighlight:
  98. result(CPDFKitConfig.sharedInstance().enableLinkFieldHighlight())
  99. case CPDFConstants.setVerticalMode:
  100. guard let pdfListView = self.pdfViewController.pdfListView else {
  101. return
  102. }
  103. let verticalMode = call.arguments as! Bool
  104. pdfListView.displayDirection = verticalMode ? .vertical : .horizontal
  105. pdfListView.layoutDocumentView()
  106. case CPDFConstants.isVerticalMode:
  107. guard let pdfListView = self.pdfViewController.pdfListView else {
  108. result(true)
  109. return
  110. }
  111. result(pdfListView.displayDirection == .vertical)
  112. case CPDFConstants.setPageSpacing:
  113. result(FlutterError(code: "NOT_SUPPORT", message: "This method is not supported on iOS. Please use controller.setMargins(left,top,right,bottom)", details: ""))
  114. case CPDFConstants.setMargin:
  115. guard let pdfListView = self.pdfViewController.pdfListView else {
  116. return
  117. }
  118. let spacingInfo = call.arguments as! [String: NSNumber]
  119. pdfListView.pageBreakMargins = .init(
  120. top: CGFloat(truncating: (spacingInfo["top"] ?? 10)),
  121. left: CGFloat(truncating: (spacingInfo["left"] ?? 10)),
  122. bottom: CGFloat(truncating: (spacingInfo["bottom"] ?? 10)),
  123. right: CGFloat(truncating: (spacingInfo["right"] ?? 10))
  124. )
  125. pdfListView.layoutDocumentView()
  126. case CPDFConstants.setContinueMode:
  127. guard let pdfListView = self.pdfViewController.pdfListView else {
  128. return
  129. }
  130. let continueMode = call.arguments as! Bool
  131. pdfListView.displaysPageBreaks = continueMode
  132. pdfListView.layoutDocumentView()
  133. case CPDFConstants.isContinueMode:
  134. guard let pdfListView = self.pdfViewController.pdfListView else {
  135. result(true)
  136. return
  137. }
  138. result(pdfListView.displaysPageBreaks)
  139. case CPDFConstants.setDoublePageMode:
  140. guard let pdfListView = self.pdfViewController.pdfListView else {
  141. return
  142. }
  143. let twoUp = call.arguments as! Bool
  144. pdfListView.displayTwoUp = twoUp
  145. pdfListView.displaysAsBook = false
  146. pdfListView.layoutDocumentView()
  147. case CPDFConstants.isDoublePageMode:
  148. guard let pdfListView = self.pdfViewController.pdfListView else {
  149. result(false)
  150. return
  151. }
  152. result(pdfListView.displayTwoUp)
  153. case CPDFConstants.setCoverPageMode:
  154. guard let pdfListView = self.pdfViewController.pdfListView else {
  155. return
  156. }
  157. let coverPageMode = call.arguments as! Bool
  158. pdfListView.displaysAsBook = coverPageMode
  159. pdfListView.displayTwoUp = coverPageMode
  160. pdfListView.layoutDocumentView()
  161. case CPDFConstants.isCoverPageMode:
  162. guard let pdfListView = self.pdfViewController.pdfListView else {
  163. result(false)
  164. return
  165. }
  166. result(pdfListView.displaysAsBook)
  167. case CPDFConstants.setCropMode:
  168. guard let pdfListView = self.pdfViewController.pdfListView else {
  169. return
  170. }
  171. let cropMode = call.arguments as! Bool
  172. pdfListView.displayCrop = cropMode
  173. pdfListView.layoutDocumentView()
  174. case CPDFConstants.isCropMode:
  175. guard let pdfListView = self.pdfViewController.pdfListView else {
  176. result(false)
  177. return
  178. }
  179. result(pdfListView.displayCrop)
  180. case CPDFConstants.setDisplayPageIndex:
  181. guard let pdfListView = self.pdfViewController.pdfListView else {
  182. return
  183. }
  184. let info = call.arguments as! [String: Any]
  185. let pageIndex = info["pageIndex"] as! NSNumber
  186. let animated = info["animated"] as! Bool
  187. pdfListView.go(toPageIndex: Int(truncating: pageIndex), animated: animated)
  188. case CPDFConstants.getCurrentPageIndex:
  189. guard let pdfListView = self.pdfViewController.pdfListView else {
  190. result(0)
  191. return
  192. }
  193. result(pdfListView.currentPageIndex)
  194. case CPDFConstants.set_preview_mode:
  195. // TODO: 设置预览模式
  196. let mode = call.arguments as! String
  197. switch mode {
  198. case "viewer":
  199. self.pdfViewController.enterViewerMode()
  200. case "annotations":
  201. self.pdfViewController.enterAnnotationMode()
  202. case "contentEditor":
  203. self.pdfViewController.enterEditMode()
  204. case "forms":
  205. self.pdfViewController.enterFormMode()
  206. case "signatures":
  207. self.pdfViewController.enterSignatureMode()
  208. default:
  209. self.pdfViewController.enterViewerMode()
  210. }
  211. case CPDFConstants.get_preview_mode:
  212. let state = self.pdfViewController.functionTypeState
  213. switch state {
  214. case .viewer:
  215. result("viewer")
  216. case .edit:
  217. result("contentEditor")
  218. case .annotation:
  219. result("annotations")
  220. case .form:
  221. result("forms")
  222. case .signature:
  223. result("signatures")
  224. default:
  225. result("viewer")
  226. }
  227. case CPDFConstants.showThumbnailView:
  228. let editMode = call.arguments as! Bool
  229. if editMode {
  230. self.pdfViewController.enterPDFPageEdit()
  231. } else {
  232. self.pdfViewController.enterThumbnail()
  233. }
  234. case CPDFConstants.showBotaView:
  235. self.pdfViewController.buttonItemClicked_Bota(UIButton(frame: .zero))
  236. case CPDFConstants.showAddWatermarkView:
  237. self.pdfViewController.enterPDFWatermark()
  238. case CPDFConstants.showSecurityView:
  239. self.pdfViewController.enterPDFSecurity()
  240. case CPDFConstants.showDisplaySettingsView:
  241. self.pdfViewController.enterPDFSetting()
  242. case CPDFConstants.enterSnipMode:
  243. self.pdfViewController.enterPDFSnipImageMode()
  244. case CPDFConstants.exitSnipMode:
  245. self.pdfViewController.exitPDFSnipImageMode()
  246. default:
  247. result(FlutterMethodNotImplemented)
  248. }
  249. });
  250. }
  251. }