CPDFViewCtrlFactory.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // CPDFViewCtrlFactory.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 CPDFViewCtrlFactory: NSObject, FlutterPlatformViewFactory {
  15. private let messenger: FlutterBinaryMessenger
  16. init(messenger: FlutterBinaryMessenger) {
  17. self.messenger = messenger
  18. super.init()
  19. }
  20. func create(
  21. withFrame frame: CGRect,
  22. viewIdentifier viewId: Int64,
  23. arguments args: Any?
  24. ) -> FlutterPlatformView {
  25. return CPDFViewCtrlFlutter(
  26. frame: frame,
  27. viewIdentifier: viewId,
  28. arguments: args,
  29. binaryMessenger: messenger)
  30. }
  31. func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
  32. return FlutterStandardMessageCodec.sharedInstance()
  33. }
  34. }
  35. class CPDFViewCtrlFlutter: NSObject, FlutterPlatformView, CPDFViewBaseControllerDelete {
  36. private var _pdfViewController : CPDFViewController
  37. private var _navigationController : CNavigationController
  38. private var _methodChannel : FlutterMethodChannel
  39. init(
  40. frame: CGRect,
  41. viewIdentifier viewId: Int64,
  42. arguments args: Any?,
  43. binaryMessenger messenger: FlutterBinaryMessenger?
  44. ) {
  45. // 解析 文档路径、密码、配置信息
  46. let initInfo = args as? [String: Any]
  47. let jsonString = initInfo?["configuration"] ?? ""
  48. let password = initInfo?["password"] ?? ""
  49. let path = initInfo?["document"] as? String ?? ""
  50. let jsonDataParse = CPDFJSONDataParse(String: jsonString as! String)
  51. let configuration = jsonDataParse.configuration
  52. // 创建pdfview controller视图
  53. _pdfViewController = CPDFViewController(filePath: path, password: password as! String, configuration: configuration!)
  54. _navigationController = CNavigationController(rootViewController: _pdfViewController)
  55. _navigationController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
  56. _navigationController.view.frame = frame
  57. _methodChannel = FlutterMethodChannel.init(name: "com.compdfkit.flutter.ui.pdfviewer.\(viewId)", binaryMessenger: messenger!)
  58. super.init()
  59. // 设置代理,但是未生效
  60. _pdfViewController.delegate = self
  61. _navigationController.setViewControllers([_pdfViewController], animated: false)
  62. registeryMethodChannel(viewId: viewId, binaryMessenger: messenger!)
  63. }
  64. func view() -> UIView {
  65. return _navigationController.view
  66. }
  67. public func PDFViewBaseControllerDissmiss(_ baseControllerDelete: CPDFViewBaseController) {
  68. baseControllerDelete.dismiss(animated: true)
  69. }
  70. private func registeryMethodChannel(viewId: Int64, binaryMessenger messenger: FlutterBinaryMessenger){
  71. _methodChannel.setMethodCallHandler({
  72. (call: FlutterMethodCall, result: FlutterResult) -> Void in
  73. print("ComPDFKit-Flutter: iOS-MethodChannel: [method:\(call.method)]")
  74. // Handle battery messages.
  75. switch call.method {
  76. case "save":
  77. // save pdf
  78. print("ComPDFKit-Flutter: save PDF")
  79. result(true) // or return false
  80. default:
  81. result(FlutterMethodNotImplemented)
  82. }
  83. });
  84. }
  85. }