CPDFViewCtrlPlugin.swift 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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(viewId: viewId, binaryMessenger: messenger)
  21. }
  22. private func registeryMethodChannel(viewId: Int64, binaryMessenger messenger: FlutterBinaryMessenger){
  23. _methodChannel.setMethodCallHandler({
  24. (call: FlutterMethodCall, result: FlutterResult) -> Void in
  25. print("ComPDFKit-Flutter: iOS-MethodChannel: [method:\(call.method)]")
  26. // Handle battery messages.
  27. switch call.method {
  28. case "save":
  29. // save pdf
  30. guard let pdfListView = self.pdfViewController.pdfListView else {
  31. result(true)
  32. return
  33. }
  34. var isSuccess = false
  35. if (pdfListView.isEditing() == true && pdfListView.isEdited() == true) {
  36. pdfListView.commitEditing()
  37. if pdfListView.document.isModified() == true {
  38. isSuccess = pdfListView.document.write(to: pdfListView.document.documentURL)
  39. }
  40. } else {
  41. if(pdfListView.document != nil) {
  42. if pdfListView.document.isModified() == true {
  43. isSuccess = pdfListView.document.write(to: pdfListView.document.documentURL)
  44. }
  45. }
  46. }
  47. result(isSuccess) // or return false
  48. case "set_scale":
  49. guard let pdfListView = self.pdfViewController.pdfListView else {
  50. return
  51. }
  52. let scaleValue = call.arguments as! NSNumber
  53. pdfListView.setScaleFactor(CGFloat(truncating: scaleValue), animated: true)
  54. case "get_scale":
  55. guard let pdfListView = self.pdfViewController.pdfListView else {
  56. result(1.0)
  57. return
  58. }
  59. result(pdfListView.scaleFactor)
  60. case "set_form_field_highlight":
  61. guard let pdfListView = self.pdfViewController.pdfListView else {
  62. return
  63. }
  64. let highlightForm = call.arguments as! Bool
  65. CPDFKitConfig.sharedInstance().setEnableFormFieldHighlight(highlightForm)
  66. pdfListView.layoutDocumentView()
  67. case "is_form_field_highlight":
  68. result(CPDFKitConfig.sharedInstance().enableFormFieldHighlight())
  69. case "set_link_highlight":
  70. guard let pdfListView = self.pdfViewController.pdfListView else {
  71. return
  72. }
  73. let linkHighlight = call.arguments as! Bool
  74. CPDFKitConfig.sharedInstance().setEnableLinkFieldHighlight(linkHighlight)
  75. pdfListView.layoutDocumentView()
  76. case "is_link_highlight":
  77. result(CPDFKitConfig.sharedInstance().enableLinkFieldHighlight())
  78. case "set_vertical_mode":
  79. guard let pdfListView = self.pdfViewController.pdfListView else {
  80. return
  81. }
  82. let verticalMode = call.arguments as! Bool
  83. pdfListView.displayDirection = verticalMode ? .vertical : .horizontal
  84. pdfListView.layoutDocumentView()
  85. case "is_vertical_mode":
  86. guard let pdfListView = self.pdfViewController.pdfListView else {
  87. result(true)
  88. return
  89. }
  90. result(pdfListView.displayDirection == .vertical)
  91. case "set_margin":
  92. guard let pdfListView = self.pdfViewController.pdfListView else {
  93. return
  94. }
  95. let spacingInfo = call.arguments as! [String: NSNumber]
  96. pdfListView.pageBreakMargins = .init(
  97. top: CGFloat(truncating: (spacingInfo["top"] ?? 10)),
  98. left: CGFloat(truncating: (spacingInfo["left"] ?? 10)),
  99. bottom: CGFloat(truncating: (spacingInfo["bottom"] ?? 10)),
  100. right: CGFloat(truncating: (spacingInfo["right"] ?? 10))
  101. )
  102. pdfListView.layoutDocumentView()
  103. case "set_continue_mode":
  104. guard let pdfListView = self.pdfViewController.pdfListView else {
  105. return
  106. }
  107. let continueMode = call.arguments as! Bool
  108. pdfListView.displaysPageBreaks = continueMode
  109. pdfListView.layoutDocumentView()
  110. case "is_continue_mode":
  111. guard let pdfListView = self.pdfViewController.pdfListView else {
  112. result(true)
  113. return
  114. }
  115. result(pdfListView.displaysPageBreaks)
  116. case "set_double_page_mode":
  117. guard let pdfListView = self.pdfViewController.pdfListView else {
  118. return
  119. }
  120. let twoUp = call.arguments as! Bool
  121. pdfListView.displayTwoUp = twoUp
  122. pdfListView.displaysAsBook = false
  123. pdfListView.layoutDocumentView()
  124. case "is_double_page_mode":
  125. guard let pdfListView = self.pdfViewController.pdfListView else {
  126. result(false)
  127. return
  128. }
  129. result(pdfListView.displayTwoUp)
  130. case "set_cover_page_mode":
  131. guard let pdfListView = self.pdfViewController.pdfListView else {
  132. return
  133. }
  134. let coverPageMode = call.arguments as! Bool
  135. pdfListView.displaysAsBook = coverPageMode
  136. pdfListView.displayTwoUp = coverPageMode
  137. pdfListView.layoutDocumentView()
  138. case "is_cover_page_mode":
  139. guard let pdfListView = self.pdfViewController.pdfListView else {
  140. result(false)
  141. return
  142. }
  143. result(pdfListView.displaysAsBook)
  144. case "set_crop_mode":
  145. guard let pdfListView = self.pdfViewController.pdfListView else {
  146. return
  147. }
  148. let cropMode = call.arguments as! Bool
  149. pdfListView.displayCrop = cropMode
  150. pdfListView.layoutDocumentView()
  151. case "is_crop_mode":
  152. guard let pdfListView = self.pdfViewController.pdfListView else {
  153. result(false)
  154. return
  155. }
  156. result(pdfListView.displayCrop)
  157. case "set_display_page_index":
  158. guard let pdfListView = self.pdfViewController.pdfListView else {
  159. return
  160. }
  161. let info = call.arguments as! [String: Any]
  162. let pageIndex = info["pageIndex"] as! NSNumber
  163. let animated = info["animated"] as! Bool
  164. pdfListView.go(toPageIndex: Int(truncating: pageIndex), animated: animated)
  165. case "get_current_page_index":
  166. guard let pdfListView = self.pdfViewController.pdfListView else {
  167. result(0)
  168. return
  169. }
  170. result(pdfListView.currentPageIndex)
  171. case "has_change":
  172. guard let pdfListView = self.pdfViewController.pdfListView else {
  173. result(false)
  174. return
  175. }
  176. result(pdfListView.document.isModified())
  177. default:
  178. result(FlutterMethodNotImplemented)
  179. }
  180. });
  181. }
  182. }