CPDFViewCtrlPlugin.swift 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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 "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. pdfListView.displayModeCustomColor = color
  71. pdfListView.layoutDocumentView()
  72. case "get_read_background_color":
  73. guard let pdfListView = self.pdfViewController.pdfListView else {
  74. result("#FFFFFF")
  75. return
  76. }
  77. // TODO: 返回当前阅读的背景颜色
  78. // 需要返回Hex 颜色给Flutter, 例如:'#FFFFFF'
  79. result(pdfListView.displayModeCustomColor.toHexString())
  80. case "set_form_field_highlight":
  81. guard let pdfListView = self.pdfViewController.pdfListView else {
  82. return
  83. }
  84. let highlightForm = call.arguments as! Bool
  85. CPDFKitConfig.sharedInstance().setEnableFormFieldHighlight(highlightForm)
  86. pdfListView.layoutDocumentView()
  87. case "is_form_field_highlight":
  88. result(CPDFKitConfig.sharedInstance().enableFormFieldHighlight())
  89. case "set_link_highlight":
  90. guard let pdfListView = self.pdfViewController.pdfListView else {
  91. return
  92. }
  93. let linkHighlight = call.arguments as! Bool
  94. CPDFKitConfig.sharedInstance().setEnableLinkFieldHighlight(linkHighlight)
  95. pdfListView.layoutDocumentView()
  96. case "is_link_highlight":
  97. result(CPDFKitConfig.sharedInstance().enableLinkFieldHighlight())
  98. case "set_vertical_mode":
  99. guard let pdfListView = self.pdfViewController.pdfListView else {
  100. return
  101. }
  102. let verticalMode = call.arguments as! Bool
  103. pdfListView.displayDirection = verticalMode ? .vertical : .horizontal
  104. pdfListView.layoutDocumentView()
  105. case "is_vertical_mode":
  106. guard let pdfListView = self.pdfViewController.pdfListView else {
  107. result(true)
  108. return
  109. }
  110. result(pdfListView.displayDirection == .vertical)
  111. case "set_margin":
  112. guard let pdfListView = self.pdfViewController.pdfListView else {
  113. return
  114. }
  115. let spacingInfo = call.arguments as! [String: NSNumber]
  116. pdfListView.pageBreakMargins = .init(
  117. top: CGFloat(truncating: (spacingInfo["top"] ?? 10)),
  118. left: CGFloat(truncating: (spacingInfo["left"] ?? 10)),
  119. bottom: CGFloat(truncating: (spacingInfo["bottom"] ?? 10)),
  120. right: CGFloat(truncating: (spacingInfo["right"] ?? 10))
  121. )
  122. pdfListView.layoutDocumentView()
  123. case "set_continue_mode":
  124. guard let pdfListView = self.pdfViewController.pdfListView else {
  125. return
  126. }
  127. let continueMode = call.arguments as! Bool
  128. pdfListView.displaysPageBreaks = continueMode
  129. pdfListView.layoutDocumentView()
  130. case "is_continue_mode":
  131. guard let pdfListView = self.pdfViewController.pdfListView else {
  132. result(true)
  133. return
  134. }
  135. result(pdfListView.displaysPageBreaks)
  136. case "set_double_page_mode":
  137. guard let pdfListView = self.pdfViewController.pdfListView else {
  138. return
  139. }
  140. let twoUp = call.arguments as! Bool
  141. pdfListView.displayTwoUp = twoUp
  142. pdfListView.displaysAsBook = false
  143. pdfListView.layoutDocumentView()
  144. case "is_double_page_mode":
  145. guard let pdfListView = self.pdfViewController.pdfListView else {
  146. result(false)
  147. return
  148. }
  149. result(pdfListView.displayTwoUp)
  150. case "set_cover_page_mode":
  151. guard let pdfListView = self.pdfViewController.pdfListView else {
  152. return
  153. }
  154. let coverPageMode = call.arguments as! Bool
  155. pdfListView.displaysAsBook = coverPageMode
  156. pdfListView.displayTwoUp = coverPageMode
  157. pdfListView.layoutDocumentView()
  158. case "is_cover_page_mode":
  159. guard let pdfListView = self.pdfViewController.pdfListView else {
  160. result(false)
  161. return
  162. }
  163. result(pdfListView.displaysAsBook)
  164. case "set_crop_mode":
  165. guard let pdfListView = self.pdfViewController.pdfListView else {
  166. return
  167. }
  168. let cropMode = call.arguments as! Bool
  169. pdfListView.displayCrop = cropMode
  170. pdfListView.layoutDocumentView()
  171. case "is_crop_mode":
  172. guard let pdfListView = self.pdfViewController.pdfListView else {
  173. result(false)
  174. return
  175. }
  176. result(pdfListView.displayCrop)
  177. case "set_display_page_index":
  178. guard let pdfListView = self.pdfViewController.pdfListView else {
  179. return
  180. }
  181. let info = call.arguments as! [String: Any]
  182. let pageIndex = info["pageIndex"] as! NSNumber
  183. let animated = info["animated"] as! Bool
  184. pdfListView.go(toPageIndex: Int(truncating: pageIndex), animated: animated)
  185. case "get_current_page_index":
  186. guard let pdfListView = self.pdfViewController.pdfListView else {
  187. result(0)
  188. return
  189. }
  190. result(pdfListView.currentPageIndex)
  191. default:
  192. result(FlutterMethodNotImplemented)
  193. }
  194. });
  195. }
  196. }