CPDFViewCtrlPlugin.swift 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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. private 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. // TODO: 返回当前滑动到的页码
  23. _methodChannel.invokeMethod("onPageChanged", arguments: 1)
  24. // TODO: 监听到执行了保存的回调
  25. _methodChannel.invokeMethod("saveDocument", arguments: nil)
  26. }
  27. private func registeryMethodChannel(){
  28. _methodChannel.setMethodCallHandler({
  29. (call: FlutterMethodCall, result: FlutterResult) -> Void in
  30. print("ComPDFKit-Flutter: iOS-MethodChannel: [method:\(call.method)]")
  31. // Handle battery messages.
  32. switch call.method {
  33. case "save":
  34. // save pdf
  35. guard let pdfListView = self.pdfViewController.pdfListView else {
  36. result(true)
  37. return
  38. }
  39. var isSuccess = false
  40. if (pdfListView.isEditing() == true && pdfListView.isEdited() == true) {
  41. pdfListView.commitEditing()
  42. if pdfListView.document.isModified() == true {
  43. isSuccess = pdfListView.document.write(to: pdfListView.document.documentURL)
  44. }
  45. } else {
  46. if(pdfListView.document != nil) {
  47. if pdfListView.document.isModified() == true {
  48. isSuccess = pdfListView.document.write(to: pdfListView.document.documentURL)
  49. }
  50. }
  51. }
  52. result(isSuccess) // or return false
  53. case "set_scale":
  54. guard let pdfListView = self.pdfViewController.pdfListView else {
  55. return
  56. }
  57. let scaleValue = call.arguments as! NSNumber
  58. pdfListView.setScaleFactor(CGFloat(truncating: scaleValue), animated: true)
  59. case "get_scale":
  60. guard let pdfListView = self.pdfViewController.pdfListView else {
  61. result(1.0)
  62. return
  63. }
  64. result(pdfListView.scaleFactor)
  65. case "set_read_background_color":
  66. guard let pdfListView = self.pdfViewController.pdfListView else {
  67. return
  68. }
  69. // TODO: 需要设置阅读的背景颜色
  70. // hex color, for example: '#FFFFFF'
  71. // 需要设置给PDFListView
  72. let bgColor = call.arguments as! String
  73. let color = ColorHelper.colorWithHexString(hex: bgColor)
  74. print("bgColor:\(bgColor), color:\(color.description)")
  75. // pdfListView.displayModeCustomColor = CPDFDisplayModeCustom()
  76. // pdfListView.layoutDocumentView()
  77. case "get_read_background_color":
  78. guard let pdfListView = self.pdfViewController.pdfListView else {
  79. result("#FFFFFF")
  80. return
  81. }
  82. // TODO: 返回当前阅读的背景颜色
  83. // 需要返回Hex 颜色给Flutter, 例如:'#FFFFFF'
  84. // result(pdfListView.displayModeCustomColor.toHexString())
  85. case "set_form_field_highlight":
  86. guard let pdfListView = self.pdfViewController.pdfListView else {
  87. return
  88. }
  89. let highlightForm = call.arguments as! Bool
  90. CPDFKitConfig.sharedInstance().setEnableFormFieldHighlight(highlightForm)
  91. pdfListView.layoutDocumentView()
  92. case "is_form_field_highlight":
  93. result(CPDFKitConfig.sharedInstance().enableFormFieldHighlight())
  94. case "set_link_highlight":
  95. guard let pdfListView = self.pdfViewController.pdfListView else {
  96. return
  97. }
  98. let linkHighlight = call.arguments as! Bool
  99. CPDFKitConfig.sharedInstance().setEnableLinkFieldHighlight(linkHighlight)
  100. pdfListView.layoutDocumentView()
  101. case "is_link_highlight":
  102. result(CPDFKitConfig.sharedInstance().enableLinkFieldHighlight())
  103. case "set_vertical_mode":
  104. guard let pdfListView = self.pdfViewController.pdfListView else {
  105. return
  106. }
  107. let verticalMode = call.arguments as! Bool
  108. pdfListView.displayDirection = verticalMode ? .vertical : .horizontal
  109. pdfListView.layoutDocumentView()
  110. case "is_vertical_mode":
  111. guard let pdfListView = self.pdfViewController.pdfListView else {
  112. result(true)
  113. return
  114. }
  115. result(pdfListView.displayDirection == .vertical)
  116. case "set_margin":
  117. guard let pdfListView = self.pdfViewController.pdfListView else {
  118. return
  119. }
  120. let spacingInfo = call.arguments as! [String: NSNumber]
  121. pdfListView.pageBreakMargins = .init(
  122. top: CGFloat(truncating: (spacingInfo["top"] ?? 10)),
  123. left: CGFloat(truncating: (spacingInfo["left"] ?? 10)),
  124. bottom: CGFloat(truncating: (spacingInfo["bottom"] ?? 10)),
  125. right: CGFloat(truncating: (spacingInfo["right"] ?? 10))
  126. )
  127. pdfListView.layoutDocumentView()
  128. case "set_continue_mode":
  129. guard let pdfListView = self.pdfViewController.pdfListView else {
  130. return
  131. }
  132. let continueMode = call.arguments as! Bool
  133. pdfListView.displaysPageBreaks = continueMode
  134. pdfListView.layoutDocumentView()
  135. case "is_continue_mode":
  136. guard let pdfListView = self.pdfViewController.pdfListView else {
  137. result(true)
  138. return
  139. }
  140. result(pdfListView.displaysPageBreaks)
  141. case "set_double_page_mode":
  142. guard let pdfListView = self.pdfViewController.pdfListView else {
  143. return
  144. }
  145. let twoUp = call.arguments as! Bool
  146. pdfListView.displayTwoUp = twoUp
  147. pdfListView.displaysAsBook = false
  148. pdfListView.layoutDocumentView()
  149. case "is_double_page_mode":
  150. guard let pdfListView = self.pdfViewController.pdfListView else {
  151. result(false)
  152. return
  153. }
  154. result(pdfListView.displayTwoUp)
  155. case "set_cover_page_mode":
  156. guard let pdfListView = self.pdfViewController.pdfListView else {
  157. return
  158. }
  159. let coverPageMode = call.arguments as! Bool
  160. pdfListView.displaysAsBook = coverPageMode
  161. pdfListView.displayTwoUp = coverPageMode
  162. pdfListView.layoutDocumentView()
  163. case "is_cover_page_mode":
  164. guard let pdfListView = self.pdfViewController.pdfListView else {
  165. result(false)
  166. return
  167. }
  168. result(pdfListView.displaysAsBook)
  169. case "set_crop_mode":
  170. guard let pdfListView = self.pdfViewController.pdfListView else {
  171. return
  172. }
  173. let cropMode = call.arguments as! Bool
  174. pdfListView.displayCrop = cropMode
  175. pdfListView.layoutDocumentView()
  176. case "is_crop_mode":
  177. guard let pdfListView = self.pdfViewController.pdfListView else {
  178. result(false)
  179. return
  180. }
  181. result(pdfListView.displayCrop)
  182. case "set_display_page_index":
  183. guard let pdfListView = self.pdfViewController.pdfListView else {
  184. return
  185. }
  186. let info = call.arguments as! [String: Any]
  187. let pageIndex = info["pageIndex"] as! NSNumber
  188. let animated = info["animated"] as! Bool
  189. pdfListView.go(toPageIndex: Int(truncating: pageIndex), animated: animated)
  190. case "get_current_page_index":
  191. guard let pdfListView = self.pdfViewController.pdfListView else {
  192. result(0)
  193. return
  194. }
  195. result(pdfListView.currentPageIndex)
  196. default:
  197. result(FlutterMethodNotImplemented)
  198. }
  199. });
  200. }
  201. }