123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- //
- // CPDFViewCtrlPlugin.swift
- //
- // Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
- //
- // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
- // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
- // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
- // This notice may not be removed from this file.
- import Flutter
- import UIKit
- import ComPDFKit
- import ComPDFKit_Tools
- class CPDFViewCtrlPlugin {
-
- private var _methodChannel : FlutterMethodChannel
-
- private var pdfViewController : CPDFViewController
-
- init(viewId: Int64, binaryMessenger messenger: FlutterBinaryMessenger, controller : CPDFViewController) {
- self.pdfViewController = controller
- _methodChannel = FlutterMethodChannel.init(name: "com.compdfkit.flutter.ui.pdfviewer.\(viewId)", binaryMessenger: messenger)
- registeryMethodChannel()
- var documentPlugin = CPDFDocumentPlugin(pdfViewController: pdfViewController, uid: String(describing: viewId), binaryMessager: messenger)
- // TODO: 返回当前滑动到的页码
- _methodChannel.invokeMethod("onPageChanged", arguments: 1)
-
- // TODO: 监听到执行了保存的回调
- _methodChannel.invokeMethod("saveDocument", arguments: nil)
- }
-
-
- private func registeryMethodChannel(){
- _methodChannel.setMethodCallHandler({
- (call: FlutterMethodCall, result: FlutterResult) -> Void in
- print("ComPDFKit-Flutter: iOS-MethodChannel: [method:\(call.method)]")
- // Handle battery messages.
- switch call.method {
- case "save":
- // save pdf
- guard let pdfListView = self.pdfViewController.pdfListView else {
- result(true)
- return
- }
- var isSuccess = false
- if (pdfListView.isEditing() == true && pdfListView.isEdited() == true) {
- pdfListView.commitEditing()
- if pdfListView.document.isModified() == true {
- isSuccess = pdfListView.document.write(to: pdfListView.document.documentURL)
- }
-
- } else {
- if(pdfListView.document != nil) {
- if pdfListView.document.isModified() == true {
- isSuccess = pdfListView.document.write(to: pdfListView.document.documentURL)
- }
- }
- }
- result(isSuccess) // or return false
- case "set_scale":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- let scaleValue = call.arguments as! NSNumber
- pdfListView.setScaleFactor(CGFloat(truncating: scaleValue), animated: true)
- case "get_scale":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- result(1.0)
- return
- }
- result(pdfListView.scaleFactor)
- case "set_read_background_color":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- // TODO: 需要设置阅读的背景颜色
- // hex color, for example: '#FFFFFF'
- // 需要设置给PDFListView
- let bgColor = call.arguments as! String
- let color = ColorHelper.colorWithHexString(hex: bgColor)
- print("bgColor:\(bgColor), color:\(color.description)")
- // pdfListView.displayModeCustomColor = CPDFDisplayModeCustom()
- // pdfListView.layoutDocumentView()
- case "get_read_background_color":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- result("#FFFFFF")
- return
- }
- // TODO: 返回当前阅读的背景颜色
- // 需要返回Hex 颜色给Flutter, 例如:'#FFFFFF'
- // result(pdfListView.displayModeCustomColor.toHexString())
- case "set_form_field_highlight":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- let highlightForm = call.arguments as! Bool
- CPDFKitConfig.sharedInstance().setEnableFormFieldHighlight(highlightForm)
- pdfListView.layoutDocumentView()
- case "is_form_field_highlight":
- result(CPDFKitConfig.sharedInstance().enableFormFieldHighlight())
- case "set_link_highlight":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- let linkHighlight = call.arguments as! Bool
- CPDFKitConfig.sharedInstance().setEnableLinkFieldHighlight(linkHighlight)
- pdfListView.layoutDocumentView()
- case "is_link_highlight":
- result(CPDFKitConfig.sharedInstance().enableLinkFieldHighlight())
- case "set_vertical_mode":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- let verticalMode = call.arguments as! Bool
- pdfListView.displayDirection = verticalMode ? .vertical : .horizontal
- pdfListView.layoutDocumentView()
- case "is_vertical_mode":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- result(true)
- return
- }
- result(pdfListView.displayDirection == .vertical)
- case "set_margin":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- let spacingInfo = call.arguments as! [String: NSNumber]
-
- pdfListView.pageBreakMargins = .init(
- top: CGFloat(truncating: (spacingInfo["top"] ?? 10)),
- left: CGFloat(truncating: (spacingInfo["left"] ?? 10)),
- bottom: CGFloat(truncating: (spacingInfo["bottom"] ?? 10)),
- right: CGFloat(truncating: (spacingInfo["right"] ?? 10))
- )
- pdfListView.layoutDocumentView()
- case "set_continue_mode":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- let continueMode = call.arguments as! Bool
- pdfListView.displaysPageBreaks = continueMode
- pdfListView.layoutDocumentView()
- case "is_continue_mode":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- result(true)
- return
- }
- result(pdfListView.displaysPageBreaks)
- case "set_double_page_mode":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- let twoUp = call.arguments as! Bool
- pdfListView.displayTwoUp = twoUp
- pdfListView.displaysAsBook = false
- pdfListView.layoutDocumentView()
- case "is_double_page_mode":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- result(false)
- return
- }
- result(pdfListView.displayTwoUp)
- case "set_cover_page_mode":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- let coverPageMode = call.arguments as! Bool
- pdfListView.displaysAsBook = coverPageMode
- pdfListView.displayTwoUp = coverPageMode
- pdfListView.layoutDocumentView()
- case "is_cover_page_mode":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- result(false)
- return
- }
- result(pdfListView.displaysAsBook)
- case "set_crop_mode":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- let cropMode = call.arguments as! Bool
- pdfListView.displayCrop = cropMode
- pdfListView.layoutDocumentView()
- case "is_crop_mode":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- result(false)
- return
- }
- result(pdfListView.displayCrop)
- case "set_display_page_index":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- return
- }
- let info = call.arguments as! [String: Any]
- let pageIndex = info["pageIndex"] as! NSNumber
- let animated = info["animated"] as! Bool
- pdfListView.go(toPageIndex: Int(truncating: pageIndex), animated: animated)
- case "get_current_page_index":
- guard let pdfListView = self.pdfViewController.pdfListView else {
- result(0)
- return
- }
- result(pdfListView.currentPageIndex)
- default:
- result(FlutterMethodNotImplemented)
- }
- });
-
- }
-
- }
|