CPDFViewCtrlPlugin.swift 9.4 KB

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