KMPDFViewController.swift 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  1. //
  2. // KMPDFViewController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/10/18.
  6. //
  7. import Cocoa
  8. class KMPDFViewController: NSViewController {
  9. @IBOutlet var contendBox: NSBox!
  10. @IBOutlet var toolbarBox: NSBox! //工具栏Box
  11. @IBOutlet var bottomContendBox: NSBox! //
  12. @IBOutlet var sidebarBox: NSBox! //左侧边栏Box
  13. @IBOutlet var infoContendSplitView: KMPDFSplitView!
  14. @IBOutlet var infoSplitLeftView: NSView!
  15. @IBOutlet var infoSplitRightView: NSView!
  16. @IBOutlet var infoSplitCenterView: NSView!
  17. @IBOutlet var pdfSplitView: NSSplitView!
  18. @IBOutlet var pdfSplitTopView: NSView!
  19. @IBOutlet var pdfSplitBottomView: NSView!
  20. @IBOutlet var toolbarBoxHeightConst: NSLayoutConstraint!
  21. @IBOutlet var infoSplitViewLeftConst: NSLayoutConstraint!
  22. var viewManager: KMPDFViewManager = KMPDFViewManager.init()
  23. var toolbarManager: KMPDFToolbarManager = KMPDFToolbarManager.init()
  24. var pdfView: CPDFListView!
  25. var document: CPDFDocument?
  26. var myDocument: NSDocument?
  27. var insertDocuments: Set<CPDFDocument> = [] //插入新文档时,SDK会出现崩溃,临时记录
  28. //工具栏
  29. private var pdfToolbarController: KMPDFToolbarController?
  30. //BOTA SideBar
  31. private var sideBarController: KMPDFSideBarController?
  32. //页面编辑
  33. private var pageEditViewController: KMNPageEditViewController?
  34. //DisplaySetting
  35. private var displaySettingController: KMNDisplayViewController?
  36. //SPlitPDF 第二个PDF
  37. private var splitPDFController: KMSplitPDFViewController?
  38. private var pdfBottomToolbar: KMSplitToolbar?
  39. override func viewDidLoad() {
  40. super.viewDidLoad()
  41. // Do view setup here.
  42. toolbarManager.pdfViewManager = viewManager
  43. }
  44. override func viewDidAppear() {
  45. super.viewDidAppear()
  46. setupUI()
  47. }
  48. func setupUI() {
  49. initPDFView()
  50. initToolbar()
  51. initSideBar()
  52. setUpSplitView()
  53. }
  54. //MARK: - PDFView
  55. func initPDFView() {
  56. if pdfView == nil {
  57. pdfView = CPDFListView.init(frame: CGRectMake(0, 0, 100, 100))
  58. pdfView?.autoresizingMask = [.width, .height]
  59. }
  60. pdfView.document = self.document
  61. pdfView.delegate = self
  62. pdfView.pdfListViewDelegate = self
  63. reloadPDFSplitInfo()
  64. }
  65. //MARK: - SplitView
  66. func setUpSplitView() {
  67. infoContendSplitView.wantsLayer = true
  68. infoContendSplitView.layer?.backgroundColor = NSColor.clear.cgColor
  69. infoContendSplitView.delegate = self
  70. infoContendSplitView.layer?.masksToBounds = true
  71. infoContendSplitView.setPosition(-10, ofDividerAt: 0)
  72. infoContendSplitView.setPosition(CGRectGetWidth(infoContendSplitView.frame), ofDividerAt: 1)
  73. }
  74. func setupSplitPDFController() {
  75. if splitPDFController == nil {
  76. splitPDFController = KMSplitPDFViewController.init()
  77. }
  78. splitPDFController?.view.frame = pdfSplitBottomView.bounds
  79. splitPDFController?.view.autoresizingMask = [.height, .width]
  80. splitPDFController?.viewManager = self.viewManager
  81. splitPDFController?.delegate = self
  82. splitPDFController?.reloadData()
  83. pdfSplitBottomView.addSubview(splitPDFController!.view)
  84. }
  85. //MARK: - 工具栏
  86. func initToolbar() {
  87. toolbarBox.borderWidth = 0
  88. if pdfToolbarController == nil {
  89. pdfToolbarController = KMPDFToolbarController.init()
  90. }
  91. pdfToolbarController?.view.frame = toolbarBox.bounds
  92. pdfToolbarController?.view.autoresizingMask = [.width, .height]
  93. pdfToolbarController?.delegate = self
  94. toolbarBox.contentView = pdfToolbarController?.view
  95. pdfToolbarController?.viewManager = viewManager
  96. pdfToolbarController?.toolbarManager = toolbarManager
  97. pdfToolbarController?.pdfView = pdfView
  98. pdfToolbarController?.setUpData()
  99. refreshToolbarView()
  100. }
  101. func refreshToolbarView() {
  102. let _manager = viewManager
  103. if _manager.toolMode == .Markup ||
  104. _manager.toolMode == .Edit ||
  105. _manager.toolMode == .Form ||
  106. _manager.toolMode == .Fill ||
  107. _manager.toolMode == .Convert ||
  108. _manager.toolMode == .Protect ||
  109. _manager.toolMode == .Tools {
  110. toolbarBoxHeightConst.constant = 80
  111. } else {
  112. if _manager.isPageEditMode {
  113. toolbarBoxHeightConst.constant = 80
  114. } else {
  115. toolbarBoxHeightConst.constant = 40
  116. }
  117. }
  118. }
  119. //MARK: - 侧边栏
  120. func initSideBar() {
  121. sidebarBox.borderWidth = 0
  122. if sideBarController == nil {
  123. sideBarController = KMPDFSideBarController.init()
  124. }
  125. sideBarController?.view.frame = sidebarBox.bounds
  126. sideBarController?.view.autoresizingMask = [.width, .height]
  127. sidebarBox.contentView = sideBarController?.view
  128. sideBarController?.pdfView = pdfView
  129. sideBarController?.delegate = self
  130. sideBarController?.pdfViewManager = viewManager
  131. sideBarController?.reloadData()
  132. }
  133. //MARK: - PDFDisplayView
  134. func updatePDFDisplaySettingView() {
  135. if viewManager.showDisplayView {
  136. infoSplitViewLeftConst.constant = 264
  137. } else {
  138. infoSplitViewLeftConst.constant = 44
  139. }
  140. if viewManager.showDisplayView {
  141. if displaySettingController == nil {
  142. displaySettingController = KMNDisplayViewController.init()
  143. }
  144. displaySettingController?.view.frame = CGRectMake(0, 0, 264, CGRectGetHeight(bottomContendBox.frame))
  145. displaySettingController?.view.autoresizingMask = [.height, .maxXMargin]
  146. bottomContendBox.addSubview(displaySettingController!.view)
  147. displaySettingController?.pdfView = self.pdfView
  148. displaySettingController?.viewManager = self.viewManager
  149. displaySettingController?.delegate = self
  150. displaySettingController?.reloadData()
  151. } else {
  152. displaySettingController?.view.removeFromSuperview()
  153. displaySettingController = nil
  154. }
  155. }
  156. //MARK: - 页面编辑
  157. func enterPageEditMode() {
  158. pageEditViewController = KMNPageEditViewController(self.document)
  159. if(pageEditViewController != nil) {
  160. bottomContendBox.addSubview(pageEditViewController!.view)
  161. pageEditViewController?.view.frame = bottomContendBox.bounds
  162. pageEditViewController?.thumbnailBaseViewDelegate = self
  163. pageEditViewController?.view.autoresizingMask = [.width,.height]
  164. }
  165. }
  166. func exitPageEditMode() {
  167. if pageEditViewController != nil {
  168. pageEditViewController?.view.removeFromSuperview()
  169. pageEditViewController = nil
  170. }
  171. }
  172. //MARK: - 阅读模式
  173. func openPDFReadMode() {
  174. if viewManager.showDisplayView {
  175. viewManager.showDisplayView = false
  176. pdfToolbarController?.reloadLeftIconView()
  177. updatePDFDisplaySettingView()
  178. }
  179. infoSplitViewLeftConst.constant = 0
  180. toolbarBoxHeightConst.constant = 0
  181. }
  182. func exitPDFReadMode() {
  183. viewManager.isPDFReadMode = false
  184. infoSplitViewLeftConst.constant = 44
  185. refreshToolbarView()
  186. }
  187. //MARK: - PPT
  188. //MARK: - PDF分屏视图
  189. func reloadPDFSplitInfo() {
  190. if pdfView?.viewSplitMode == .disable {
  191. pdfSplitView.isHidden = true
  192. pdfView.frame = infoSplitCenterView.bounds
  193. infoSplitCenterView.addSubview(pdfView)
  194. if splitPDFController != nil {
  195. splitPDFController = nil
  196. }
  197. } else {
  198. pdfSplitView.isHidden = false
  199. pdfView.frame = pdfSplitTopView.bounds
  200. pdfSplitTopView.addSubview(pdfView)
  201. setUpPDFBottomToolbar()
  202. setupSplitPDFController()
  203. if pdfView.viewSplitMode == .horizontal {
  204. pdfSplitView.isVertical = true
  205. } else if pdfView.viewSplitMode == .vertical {
  206. pdfSplitView.isVertical = false
  207. }
  208. }
  209. }
  210. func setUpPDFBottomToolbar() {
  211. if pdfBottomToolbar != nil {
  212. pdfBottomToolbar = nil
  213. }
  214. pdfBottomToolbar = KMSplitToolbar.init()
  215. pdfBottomToolbar?.frame = CGRectMake(CGRectGetWidth(pdfSplitTopView.frame)/2-144, 20, 288, 40)
  216. pdfBottomToolbar?.pdfView = self.pdfView
  217. pdfBottomToolbar?.reloadData()
  218. pdfSplitTopView.addSubview(pdfBottomToolbar!)
  219. }
  220. func reloadPDFBottomToolbar() {
  221. if viewManager.splitShowBottomBar {
  222. pdfBottomToolbar?.isHidden = false
  223. pdfBottomToolbar?.reloadData()
  224. } else {
  225. pdfBottomToolbar?.isHidden = true
  226. }
  227. }
  228. }
  229. //MARK: - NSSplitViewDelegate
  230. extension KMPDFViewController: NSSplitViewDelegate {
  231. func splitView(_ splitView: NSSplitView, shouldHideDividerAt dividerIndex: Int) -> Bool {
  232. return true
  233. }
  234. func splitView(_ splitView: NSSplitView, canCollapseSubview subview: NSView) -> Bool {
  235. return true
  236. }
  237. func splitView(_ splitView: NSSplitView, constrainSplitPosition proposedPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
  238. if dividerIndex == 0 {
  239. if proposedPosition > CGRectGetWidth(infoContendSplitView.frame)/2 - 10 {
  240. print(CGRectGetWidth(infoContendSplitView.frame)/2 - 10, NSDate())
  241. return CGRectGetWidth(infoContendSplitView.frame)/2 - 10
  242. }
  243. } else if dividerIndex == 1 {
  244. print(CGRectGetWidth(infoContendSplitView.frame)/2 - 10, NSDate())
  245. }
  246. return proposedPosition
  247. }
  248. func splitViewDidResizeSubviews(_ notification: Notification) {
  249. NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(splitViewResizeFinish), object: nil)
  250. self.perform(#selector(splitViewResizeFinish), with: nil, afterDelay: 0.15)
  251. }
  252. @objc func splitViewResizeFinish() {
  253. if infoContendSplitView.isSubviewCollapsed(infoSplitLeftView) {
  254. if viewManager.pdfSideBarType != .none {
  255. viewManager.pdfSideBarType = .none
  256. sideBarController?.reloadBOTAData()
  257. }
  258. }
  259. }
  260. }
  261. //MARK: - KMPDFSideBarControllerDelegate 左侧Sidebar代理
  262. extension KMPDFViewController: KMPDFSideBarControllerDelegate {
  263. func kmPDFSideBarControllerDidSidebarTypeUpdated(_ view: KMPDFSideBarController) {
  264. if viewManager.pdfSideBarType == .none {
  265. infoContendSplitView.setPosition(-20, ofDividerAt: 0)
  266. } else if viewManager.pdfSideBarType == .search {
  267. infoContendSplitView.setPosition(264, ofDividerAt: 0)
  268. } else if viewManager.pdfSideBarType == .thumbnail {
  269. infoContendSplitView.setPosition(264, ofDividerAt: 0)
  270. } else if viewManager.pdfSideBarType == .outline {
  271. infoContendSplitView.setPosition(264, ofDividerAt: 0)
  272. } else if viewManager.pdfSideBarType == .bookmark {
  273. infoContendSplitView.setPosition(264, ofDividerAt: 0)
  274. } else if viewManager.pdfSideBarType == .annotation {
  275. infoContendSplitView.setPosition(264, ofDividerAt: 0)
  276. }
  277. }
  278. func kmPDFSideBarControllerDidGotoPage(_ view: KMPDFSideBarController, _ pageIndex: Int) {
  279. pdfView.go(toPageIndex: pageIndex, animated: true)
  280. }
  281. }
  282. //MARK: - KMPDFToolbarControllerDelegate 工具栏代理
  283. extension KMPDFViewController: KMPDFToolbarControllerDelegate {
  284. func kmPDFToolbarControllerDidToolbarItemClicked(_ controller: KMPDFToolbarController, _ itemIdentifier: String) {
  285. print("toolbar点击", itemIdentifier)
  286. if itemIdentifier == KMPDFToolbar_ViewDisplay_Identifier {
  287. updatePDFDisplaySettingView()
  288. } else if itemIdentifier == KMPDFToolbar_PageEdit_Identifier {
  289. if viewManager.isPageEditMode == true {
  290. enterPageEditMode()
  291. } else {
  292. exitPageEditMode()
  293. }
  294. } else if itemIdentifier == KMPDFToolbar_convert_word_Identifier {
  295. let winC = KMConvertWordWindowController()
  296. let model = KMDocumentModel(url: self.pdfView.document.documentURL)
  297. winC.documentModel = model
  298. winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
  299. } else if itemIdentifier == KMPDFToolbar_convert_ppt_Identifier {
  300. let winC = KMConvertPPTsWindowController()
  301. winC.subType = 1
  302. let model = KMDocumentModel(url: self.pdfView.document.documentURL)
  303. winC.documentModel = model
  304. winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
  305. } else if itemIdentifier == KMPDFToolbar_convert_RTF_Identifier {
  306. let winC = KMConvertPPTsWindowController()
  307. winC.subType = 2
  308. let model = KMDocumentModel(url: self.pdfView.document.documentURL)
  309. winC.documentModel = model
  310. winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
  311. } else if itemIdentifier == KMPDFToolbar_convert_Text_Identifier {
  312. let winC = KMConvertPPTsWindowController()
  313. winC.subType = 4
  314. let model = KMDocumentModel(url: self.pdfView.document.documentURL)
  315. winC.documentModel = model
  316. winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
  317. } else if itemIdentifier == KMPDFToolbar_convert_CSV_Identifier {
  318. let winC = KMConvertPPTsWindowController()
  319. winC.subType = 5
  320. let model = KMDocumentModel(url: self.pdfView.document.documentURL)
  321. winC.documentModel = model
  322. winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
  323. } else if itemIdentifier == KMPDFToolbar_convert_excel_Identifier {
  324. let winC = KMConvertExcelWindowController()
  325. let model = KMDocumentModel(url: self.pdfView.document.documentURL)
  326. winC.documentModel = model
  327. winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
  328. } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertFile_Identifier {
  329. pageEditViewController?.insertFromPDFAction()
  330. } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertBlank_Identifier {
  331. pageEditViewController?.insertFromBlankAction()
  332. } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertClip_Identifier {
  333. pageEditViewController?.insertFromClipboardAction()
  334. } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertScanner_Identifier {
  335. pageEditViewController?.insertFromScannerAction()
  336. } else if itemIdentifier == KMPDFToolbar_PageEdit_Extract_Identifier {
  337. pageEditViewController?.extractPDFAction()
  338. } else if itemIdentifier == KMPDFToolbar_PageEdit_Replace_Identifier {
  339. pageEditViewController?.replacePDFAction()
  340. } else if itemIdentifier == KMPDFToolbar_PageEdit_Split_Identifier {
  341. pageEditViewController?.splitPDFAction()
  342. } else if itemIdentifier == KMPDFToolbar_PageEdit_Reverse_Identifier {
  343. pageEditViewController?.reversePDFAction()
  344. } else if itemIdentifier == KMPDFToolbar_PageEdit_LeftRotate_Identifier {
  345. pageEditViewController?.rotatePageLeftAction()
  346. } else if itemIdentifier == KMPDFToolbar_PageEdit_RightRotate_Identifier{
  347. pageEditViewController?.rotatePageRightAction()
  348. } else if itemIdentifier == KMPDFToolbar_PageEdit_Delete_Identifier {
  349. pageEditViewController?.deletePageAction()
  350. } else if itemIdentifier == KMPDFToolbar_PageEdit_Reduce_Identifier {
  351. pageEditViewController?.zoomOutPageAction()
  352. if(pageEditViewController?.canZoomOutPageSize() == false) {
  353. toolbarManager.page_Reduce_Property.isDisabled = true
  354. } else {
  355. toolbarManager.page_Reduce_Property.isDisabled = false
  356. }
  357. controller.refreshSecondToolbarItemsState()
  358. } else if itemIdentifier == KMPDFToolbar_PageEdit_Increase_Identifier {
  359. pageEditViewController?.zoomInPageAction()
  360. if(pageEditViewController?.canZoomInPageSize() == false) {
  361. toolbarManager.page_Increase_Property.isDisabled = true
  362. } else {
  363. toolbarManager.page_Increase_Property.isDisabled = false
  364. }
  365. controller.refreshSecondToolbarItemsState()
  366. }
  367. refreshToolbarView()
  368. }
  369. }
  370. //MARK: - KMNDisplayViewControllerDelegate代理
  371. extension KMPDFViewController: KMNDisplayViewControllerDelegate {
  372. //Display Mode
  373. func displayViewControllerDidDisplayModeChanged(_ controller: KMNDisplayViewController) {
  374. pdfView.layoutDocumentView()
  375. }
  376. //阅读模式
  377. func displayViewControllerDidReadModeUpdated(_ controller: KMNDisplayViewController) {
  378. if viewManager.isPDFReadMode {
  379. openPDFReadMode()
  380. } else {
  381. exitPDFReadMode()
  382. }
  383. }
  384. //PPT
  385. func displayViewControllerDidGotoSlideShow(_ controller: KMNDisplayViewController) {
  386. }
  387. //SplitView
  388. func displayViewControllerDidSplitModeChanged(_ controller: KMNDisplayViewController) {
  389. reloadPDFSplitInfo()
  390. }
  391. func displayViewControllerDidSplitFileChanged(_ controller: KMNDisplayViewController) {
  392. splitPDFController?.reloadData()
  393. }
  394. func displayViewControllerDidToolbarStateChanged(_ controller: KMNDisplayViewController) {
  395. splitPDFController?.refreshToolbarState()
  396. reloadPDFBottomToolbar()
  397. }
  398. }
  399. //MARK: - KMSplitPDFViewControllerDelegate SplitPDFView分屏视图
  400. extension KMPDFViewController: KMSplitPDFViewControllerDelegate {
  401. func splitPDFViewControllerDidUpdateFilePath(_ controller: KMSplitPDFViewController) {
  402. displaySettingController?.reloadData()
  403. }
  404. func splitPDFViewControllerDidUpdatePDFScale(_ controller: KMSplitPDFViewController) {
  405. }
  406. func splitPDFViewControllerDidUpdatePDFPageIndex(_ controller: KMSplitPDFViewController) {
  407. // if viewManager.splitSyncScroll {
  408. // if let splitPDFView = splitPDFController?.pdfView, let document = splitPDFView.document {
  409. // var pageIndex = Int(pdfView.currentPageIndex)
  410. // if pageIndex > document.pageCount {
  411. // pageIndex = Int(document.pageCount) - 1
  412. // }
  413. // splitPDFView.go(toPageIndex: pageIndex, animated: true)
  414. // }
  415. // }
  416. }
  417. }
  418. //MARK: - CPDFViewDelegate PDFView代理
  419. extension KMPDFViewController: CPDFViewDelegate {
  420. func pdfViewDocumentDidLoaded(_ pdfView: CPDFView!) {
  421. sideBarController?.reloadPageTurnerData()
  422. }
  423. func pdfViewCurrentPageDidChanged(_ pdfView: CPDFView!) {
  424. sideBarController?.reloadPageTurnerData()
  425. //分屏视图
  426. // reloadPDFBottomToolbar()
  427. // if viewManager.splitSyncScroll {
  428. // if let splitPDFView = splitPDFController?.pdfView, let document = splitPDFView.document {
  429. // var pageIndex = Int(pdfView.currentPageIndex)
  430. // if pageIndex > document.pageCount {
  431. // pageIndex = Int(document.pageCount) - 1
  432. // }
  433. // splitPDFView.go(toPageIndex: pageIndex, animated: true)
  434. // }
  435. // }
  436. }
  437. func pdfViewScaleDidChanged(_ pdfView: CPDFView!) {
  438. pdfToolbarController?.reloadSelectZoomView()
  439. //分屏视图
  440. // reloadPDFBottomToolbar()
  441. // if viewManager.splitSyncScroll {
  442. // if let splitPDFView = splitPDFController?.pdfView {
  443. // splitPDFView.scaleFactor = pdfView.scaleFactor
  444. // }
  445. // }
  446. }
  447. }
  448. extension KMPDFViewController: CPDFListViewDelegate {
  449. func pdfListViewKeyDownIsContinue(_ pdfListView: CPDFListView!, theEvent: NSEvent!) -> Bool {
  450. let command = theEvent.modifierFlags.contains(.command)
  451. let control = theEvent.modifierFlags.contains(.control)
  452. KMPrint(theEvent.keyCode)
  453. if pdfView.isEditing() {
  454. if control && theEvent.keyCode == 11 { // ctr + b
  455. return false
  456. } else if control && theEvent.keyCode == 34 { // ctr +i
  457. return false
  458. } else if theEvent.keyCode == 36 { // enter
  459. if pdfView.isCropMode {
  460. return false
  461. }
  462. }
  463. }
  464. if (theEvent.keyCode == 11 && command) { // command + B [添加书签]
  465. return false
  466. } else if (command && control && theEvent.keyCode == 14) { // command + control + E [注释 橡皮擦]
  467. return false
  468. } else if (theEvent.keyCode == 123) { // 向左
  469. if(self.pdfView.isEditing() && !self.pdfView.isSelecteditAreaNotEdit()) {
  470. return false
  471. } else {
  472. }
  473. } else if (theEvent.keyCode == 126) { // 向上
  474. if(self.pdfView.isEditing() && !self.pdfView.isSelecteditAreaNotEdit()) {
  475. return false
  476. } else {
  477. if (self.pdfView.isContinousScroll()) {
  478. return true
  479. }
  480. }
  481. } else if (theEvent.keyCode == 124) { // 向右
  482. if(self.pdfView.isEditing() && !self.pdfView.isSelecteditAreaNotEdit()) {
  483. return false
  484. } else {
  485. }
  486. } else if (theEvent.keyCode == 125) { // 向下
  487. if(self.pdfView.isEditing() && !self.pdfView.isSelecteditAreaNotEdit()) {
  488. return false
  489. } else {
  490. if (self.pdfView.isContinousScroll()) {
  491. return true
  492. }
  493. }
  494. } else if (theEvent.keyCode == 36) {
  495. if pdfView.annotationType == .addImage || pdfView.annotationType == .addText {
  496. if self.pdfView.isEditImage {
  497. }
  498. }
  499. }
  500. if theEvent.keyCode == 53 {
  501. //ESC
  502. if view.window?.styleMask.contains(.fullScreen) == true {
  503. view.window?.toggleFullScreen(nil)
  504. }
  505. //阅读模式
  506. if viewManager.isPDFReadMode {
  507. exitPDFReadMode()
  508. viewManager.isPDFReadMode = false
  509. return true
  510. }
  511. }
  512. return true
  513. }
  514. }
  515. //MARK: - KMNThumbnailBaseViewDelegate
  516. extension KMPDFViewController: KMNThumbnailBaseViewDelegate {
  517. func clickThumbnailViewControlle(pageEditVC:KMNThumbnailBaseViewController?,currentIndex:Int) {
  518. exitPageEditMode()
  519. viewManager.isPageEditMode = false
  520. pdfToolbarController?.reloadPageEditView()
  521. }
  522. func insertPDFThumbnailViewControlle(pageEditVC: KMNThumbnailBaseViewController?, pdfDocment: CPDFDocument?) {
  523. if(pdfDocment != nil) {
  524. insertDocuments.insert(pdfDocment!)
  525. }
  526. }
  527. }