// // KMPDFViewController.swift // PDF Reader Pro // // Created by Niehaoyu on 2024/10/18. // import Cocoa class KMPDFViewController: NSViewController { @IBOutlet var contendBox: NSBox! @IBOutlet var toolbarBox: NSBox! //工具栏Box @IBOutlet var sidebarBox: NSBox! //左侧边栏Box @IBOutlet var infoContendBox: NSBox! // @IBOutlet var bottomContendBox: NSBox! // @IBOutlet var toolbarBoxHeightConst: NSLayoutConstraint! var viewManager: KMPDFViewManager = KMPDFViewManager.init() var toolbarManager: KMPDFToolbarManager = KMPDFToolbarManager.init() var pdfView: CPDFListView! var document: CPDFDocument? var myDocument: NSDocument? var insertDocuments: Set = [] //插入新文档时,SDK会出现崩溃,临时记录 //工具栏 private var pdfToolbarController: KMPDFToolbarController? //BOTA SideBar private var sideBarController: KMPDFSideBarController? //页面编辑 private var pageEditViewController: KMNPageEditViewController? private var displaySettingController: KMNDisplayViewController? override func viewDidLoad() { super.viewDidLoad() // Do view setup here. toolbarManager.pdfViewManager = viewManager } override func viewDidAppear() { super.viewDidAppear() setupUI() } func setupUI() { initPDFView() initToolbar() initSideBar() infoContendBox.borderWidth = 0 } //MARK: - PDFView func initPDFView() { if pdfView == nil { pdfView = CPDFListView.init(frame: infoContendBox.bounds) pdfView?.autoresizingMask = [.width, .height] } infoContendBox.addSubview(pdfView) pdfView.document = self.document pdfView.delegate = self pdfView.pdfListViewDelegate = self } //MARK: - 工具栏 func initToolbar() { toolbarBox.borderWidth = 0 if pdfToolbarController == nil { pdfToolbarController = KMPDFToolbarController.init() } pdfToolbarController?.view.frame = toolbarBox.bounds pdfToolbarController?.view.autoresizingMask = [.width, .height] pdfToolbarController?.delegate = self toolbarBox.contentView = pdfToolbarController?.view pdfToolbarController?.viewManager = viewManager pdfToolbarController?.toolbarManager = toolbarManager pdfToolbarController?.pdfView = pdfView pdfToolbarController?.setUpData() refreshToolbarView() } func refreshToolbarView() { let _manager = viewManager if _manager.toolMode == .Markup || _manager.toolMode == .Edit || _manager.toolMode == .Form || _manager.toolMode == .Fill || _manager.toolMode == .Convert || _manager.toolMode == .Protect || _manager.toolMode == .Tools { toolbarBoxHeightConst.constant = 80 } else { if _manager.isPageEditMode { toolbarBoxHeightConst.constant = 80 } else { toolbarBoxHeightConst.constant = 40 } } } //MARK: - 侧边栏 func initSideBar() { sidebarBox.borderWidth = 0 if sideBarController == nil { sideBarController = KMPDFSideBarController.init() } sideBarController?.view.frame = sidebarBox.bounds sideBarController?.view.autoresizingMask = [.width, .height] sidebarBox.contentView = sideBarController?.view sideBarController?.pdfView = pdfView sideBarController?.delegate = self sideBarController?.pdfViewManager = viewManager sideBarController?.reloadData() } //MARK: - PDFDisplayView func updatePDFDisplaySettingView() { if viewManager.showDisplayView { if displaySettingController == nil { displaySettingController = KMNDisplayViewController.init() } displaySettingController?.view.frame = CGRectMake(0, 0, 264, CGRectGetHeight(bottomContendBox.frame)) displaySettingController?.view.autoresizingMask = [.height, .maxXMargin] bottomContendBox.addSubview(displaySettingController!.view, positioned: .above, relativeTo: infoContendBox) displaySettingController?.pdfView = self.pdfView displaySettingController?.reloadData() } else { displaySettingController?.view.removeFromSuperview() } } //MARK: - 页面编辑 func enterPageEditMode() { pageEditViewController = KMNPageEditViewController(self.document) if(pageEditViewController != nil) { bottomContendBox.addSubview(pageEditViewController!.view) pageEditViewController?.view.frame = bottomContendBox.bounds pageEditViewController?.thumbnailBaseViewDelegate = self pageEditViewController?.view.autoresizingMask = [.width,.height] } } func exitPageEditMode() { if pageEditViewController != nil { pageEditViewController?.view.removeFromSuperview() pageEditViewController = nil } } } //MARK: - KMPDFSideBarControllerDelegate 左侧Sidebar代理 extension KMPDFViewController: KMPDFSideBarControllerDelegate { func kmPDFSideBarControllerDidSidebarTypeUpdated(_ view: KMPDFSideBarController) { } func kmPDFSideBarControllerDidGotoPage(_ view: KMPDFSideBarController, _ pageIndex: Int) { pdfView.go(toPageIndex: pageIndex, animated: true) } } //MARK: - KMPDFToolbarControllerDelegate 工具栏代理 extension KMPDFViewController: KMPDFToolbarControllerDelegate { func kmPDFToolbarControllerDidToolbarItemClicked(_ controller: KMPDFToolbarController, _ itemIdentifier: String) { print("toolbar点击", itemIdentifier) if itemIdentifier == KMPDFToolbar_ViewDisplay_Identifier { updatePDFDisplaySettingView() } else if itemIdentifier == KMPDFToolbar_PageEdit_Identifier { if viewManager.isPageEditMode == true { enterPageEditMode() } else { exitPageEditMode() } } else if itemIdentifier == KMPDFToolbar_convert_word_Identifier { let winC = KMConvertWordWindowController() let model = KMDocumentModel(url: self.pdfView.document.documentURL) winC.documentModel = model self.km_safe_beginSheet(windowC: winC) } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertFile_Identifier { pageEditViewController?.insertFromPDFAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertBlank_Identifier { pageEditViewController?.insertFromBlankAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertClip_Identifier { pageEditViewController?.insertFromClipboardAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertScanner_Identifier { pageEditViewController?.insertFromScannerAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_Extract_Identifier { pageEditViewController?.extractPDFAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_Replace_Identifier { pageEditViewController?.replacePDFAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_Split_Identifier { pageEditViewController?.splitPDFAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_Reverse_Identifier { pageEditViewController?.reversePDFAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_LeftRotate_Identifier { pageEditViewController?.rotatePageLeftAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_RightRotate_Identifier{ pageEditViewController?.rotatePageRightAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_Delete_Identifier { pageEditViewController?.deletePageAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_Reduce_Identifier { pageEditViewController?.zoomOutPageAction() } else if itemIdentifier == KMPDFToolbar_PageEdit_Increase_Identifier { pageEditViewController?.zoomInPageAction() } refreshToolbarView() } } //MARK: - CPDFViewDelegate PDFView代理 extension KMPDFViewController: CPDFViewDelegate { func pdfViewDocumentDidLoaded(_ pdfView: CPDFView!) { sideBarController?.reloadPageTurnerData() } func pdfViewCurrentPageDidChanged(_ pdfView: CPDFView!) { sideBarController?.reloadPageTurnerData() } func pdfViewScaleDidChanged(_ pdfView: CPDFView!) { pdfToolbarController?.reloadSelectZoomView() } } extension KMPDFViewController: CPDFListViewDelegate { } extension KMPDFViewController: KMNThumbnailBaseViewDelegate { func clickThumbnailViewControlle(pageEditVC:KMNThumbnailBaseViewController?,currentIndex:Int) { exitPageEditMode() viewManager.isPageEditMode = false pdfToolbarController?.reloadPageEditView() } func insertPDFThumbnailViewControlle(pageEditVC: KMNThumbnailBaseViewController?, pdfDocment: CPDFDocument?) { if(pdfDocment != nil) { insertDocuments.insert(pdfDocment!) } } }