KMPDFViewController.swift 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  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 sidebarBox: NSBox! //左侧边栏Box
  12. @IBOutlet var infoContendBox: NSBox! //
  13. @IBOutlet var bottomContendBox: NSBox! //
  14. @IBOutlet var toolbarBoxHeightConst: NSLayoutConstraint!
  15. var viewManager: KMPDFViewManager = KMPDFViewManager.init()
  16. var toolbarManager: KMPDFToolbarManager = KMPDFToolbarManager.init()
  17. var pdfView: CPDFListView!
  18. var document: CPDFDocument?
  19. var myDocument: NSDocument?
  20. var insertDocuments: Set<CPDFDocument> = [] //插入新文档时,SDK会出现崩溃,临时记录
  21. //工具栏
  22. private var pdfToolbarController: KMPDFToolbarController?
  23. //BOTA SideBar
  24. private var sideBarController: KMPDFSideBarController?
  25. //页面编辑
  26. private var pageEditViewController: KMNPageEditViewController?
  27. //DisplaySetting
  28. private var displaySettingController: KMNDisplayViewController?
  29. override func viewDidLoad() {
  30. super.viewDidLoad()
  31. // Do view setup here.
  32. toolbarManager.pdfViewManager = viewManager
  33. }
  34. override func viewDidAppear() {
  35. super.viewDidAppear()
  36. setupUI()
  37. }
  38. func setupUI() {
  39. initPDFView()
  40. initToolbar()
  41. initSideBar()
  42. infoContendBox.borderWidth = 0
  43. }
  44. //MARK: - PDFView
  45. func initPDFView() {
  46. if pdfView == nil {
  47. pdfView = CPDFListView.init(frame: infoContendBox.bounds)
  48. pdfView?.autoresizingMask = [.width, .height]
  49. }
  50. infoContendBox.addSubview(pdfView)
  51. pdfView.document = self.document
  52. pdfView.delegate = self
  53. pdfView.pdfListViewDelegate = self
  54. }
  55. //MARK: - 工具栏
  56. func initToolbar() {
  57. toolbarBox.borderWidth = 0
  58. if pdfToolbarController == nil {
  59. pdfToolbarController = KMPDFToolbarController.init()
  60. }
  61. pdfToolbarController?.view.frame = toolbarBox.bounds
  62. pdfToolbarController?.view.autoresizingMask = [.width, .height]
  63. pdfToolbarController?.delegate = self
  64. toolbarBox.contentView = pdfToolbarController?.view
  65. pdfToolbarController?.viewManager = viewManager
  66. pdfToolbarController?.toolbarManager = toolbarManager
  67. pdfToolbarController?.pdfView = pdfView
  68. pdfToolbarController?.setUpData()
  69. refreshToolbarView()
  70. }
  71. func refreshToolbarView() {
  72. let _manager = viewManager
  73. if _manager.toolMode == .Markup ||
  74. _manager.toolMode == .Edit ||
  75. _manager.toolMode == .Form ||
  76. _manager.toolMode == .Fill ||
  77. _manager.toolMode == .Convert ||
  78. _manager.toolMode == .Protect ||
  79. _manager.toolMode == .Tools {
  80. toolbarBoxHeightConst.constant = 80
  81. } else {
  82. if _manager.isPageEditMode {
  83. toolbarBoxHeightConst.constant = 80
  84. } else {
  85. toolbarBoxHeightConst.constant = 40
  86. }
  87. }
  88. }
  89. //MARK: - 侧边栏
  90. func initSideBar() {
  91. sidebarBox.borderWidth = 0
  92. if sideBarController == nil {
  93. sideBarController = KMPDFSideBarController.init()
  94. }
  95. sideBarController?.view.frame = sidebarBox.bounds
  96. sideBarController?.view.autoresizingMask = [.width, .height]
  97. sidebarBox.contentView = sideBarController?.view
  98. sideBarController?.pdfView = pdfView
  99. sideBarController?.delegate = self
  100. sideBarController?.pdfViewManager = viewManager
  101. sideBarController?.reloadData()
  102. }
  103. //MARK: - PDFDisplayView
  104. func updatePDFDisplaySettingView() {
  105. if viewManager.showDisplayView {
  106. if displaySettingController == nil {
  107. displaySettingController = KMNDisplayViewController.init()
  108. }
  109. displaySettingController?.view.frame = CGRectMake(0, 0, 264, CGRectGetHeight(bottomContendBox.frame))
  110. displaySettingController?.view.autoresizingMask = [.height, .maxXMargin]
  111. bottomContendBox.addSubview(displaySettingController!.view, positioned: .above, relativeTo: infoContendBox)
  112. displaySettingController?.pdfView = self.pdfView
  113. displaySettingController?.viewManager = self.viewManager
  114. displaySettingController?.delegate = self
  115. displaySettingController?.reloadData()
  116. } else {
  117. displaySettingController?.view.removeFromSuperview()
  118. }
  119. }
  120. //MARK: - 页面编辑
  121. func enterPageEditMode() {
  122. pageEditViewController = KMNPageEditViewController(self.document)
  123. if(pageEditViewController != nil) {
  124. bottomContendBox.addSubview(pageEditViewController!.view)
  125. pageEditViewController?.view.frame = bottomContendBox.bounds
  126. pageEditViewController?.thumbnailBaseViewDelegate = self
  127. pageEditViewController?.view.autoresizingMask = [.width,.height]
  128. }
  129. }
  130. func exitPageEditMode() {
  131. if pageEditViewController != nil {
  132. pageEditViewController?.view.removeFromSuperview()
  133. pageEditViewController = nil
  134. }
  135. }
  136. }
  137. //MARK: - KMPDFSideBarControllerDelegate 左侧Sidebar代理
  138. extension KMPDFViewController: KMPDFSideBarControllerDelegate {
  139. func kmPDFSideBarControllerDidSidebarTypeUpdated(_ view: KMPDFSideBarController) {
  140. }
  141. func kmPDFSideBarControllerDidGotoPage(_ view: KMPDFSideBarController, _ pageIndex: Int) {
  142. pdfView.go(toPageIndex: pageIndex, animated: true)
  143. }
  144. }
  145. //MARK: - KMPDFToolbarControllerDelegate 工具栏代理
  146. extension KMPDFViewController: KMPDFToolbarControllerDelegate {
  147. func kmPDFToolbarControllerDidToolbarItemClicked(_ controller: KMPDFToolbarController, _ itemIdentifier: String) {
  148. print("toolbar点击", itemIdentifier)
  149. if itemIdentifier == KMPDFToolbar_ViewDisplay_Identifier {
  150. updatePDFDisplaySettingView()
  151. } else if itemIdentifier == KMPDFToolbar_PageEdit_Identifier {
  152. if viewManager.isPageEditMode == true {
  153. enterPageEditMode()
  154. } else {
  155. exitPageEditMode()
  156. }
  157. } else if itemIdentifier == KMPDFToolbar_convert_word_Identifier {
  158. let winC = KMConvertWordWindowController()
  159. let model = KMDocumentModel(url: self.pdfView.document.documentURL)
  160. winC.documentModel = model
  161. self.km_safe_beginSheet(windowC: winC)
  162. } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertFile_Identifier {
  163. pageEditViewController?.insertFromPDFAction()
  164. } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertBlank_Identifier {
  165. pageEditViewController?.insertFromBlankAction()
  166. } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertClip_Identifier {
  167. pageEditViewController?.insertFromClipboardAction()
  168. } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertScanner_Identifier {
  169. pageEditViewController?.insertFromScannerAction()
  170. } else if itemIdentifier == KMPDFToolbar_PageEdit_Extract_Identifier {
  171. pageEditViewController?.extractPDFAction()
  172. } else if itemIdentifier == KMPDFToolbar_PageEdit_Replace_Identifier {
  173. pageEditViewController?.replacePDFAction()
  174. } else if itemIdentifier == KMPDFToolbar_PageEdit_Split_Identifier {
  175. pageEditViewController?.splitPDFAction()
  176. } else if itemIdentifier == KMPDFToolbar_PageEdit_Reverse_Identifier {
  177. pageEditViewController?.reversePDFAction()
  178. } else if itemIdentifier == KMPDFToolbar_PageEdit_LeftRotate_Identifier {
  179. pageEditViewController?.rotatePageLeftAction()
  180. } else if itemIdentifier == KMPDFToolbar_PageEdit_RightRotate_Identifier{
  181. pageEditViewController?.rotatePageRightAction()
  182. } else if itemIdentifier == KMPDFToolbar_PageEdit_Delete_Identifier {
  183. pageEditViewController?.deletePageAction()
  184. } else if itemIdentifier == KMPDFToolbar_PageEdit_Reduce_Identifier {
  185. pageEditViewController?.zoomOutPageAction()
  186. } else if itemIdentifier == KMPDFToolbar_PageEdit_Increase_Identifier {
  187. pageEditViewController?.zoomInPageAction()
  188. }
  189. refreshToolbarView()
  190. }
  191. }
  192. //MARK: - KMNDisplayViewControllerDelegate代理
  193. extension KMPDFViewController: KMNDisplayViewControllerDelegate {
  194. func displayViewControllerDidDisplayModeChanged(_ controller: KMNDisplayViewController) {
  195. pdfView.layoutDocumentView()
  196. }
  197. func displayViewControllerDidReadModeUpdated(_ controller: KMNDisplayViewController) {
  198. }
  199. }
  200. //MARK: - CPDFViewDelegate PDFView代理
  201. extension KMPDFViewController: CPDFViewDelegate {
  202. func pdfViewDocumentDidLoaded(_ pdfView: CPDFView!) {
  203. sideBarController?.reloadPageTurnerData()
  204. }
  205. func pdfViewCurrentPageDidChanged(_ pdfView: CPDFView!) {
  206. sideBarController?.reloadPageTurnerData()
  207. }
  208. func pdfViewScaleDidChanged(_ pdfView: CPDFView!) {
  209. pdfToolbarController?.reloadSelectZoomView()
  210. }
  211. }
  212. extension KMPDFViewController: CPDFListViewDelegate {
  213. }
  214. extension KMPDFViewController: KMNThumbnailBaseViewDelegate {
  215. func clickThumbnailViewControlle(pageEditVC:KMNThumbnailBaseViewController?,currentIndex:Int) {
  216. exitPageEditMode()
  217. viewManager.isPageEditMode = false
  218. pdfToolbarController?.reloadPageEditView()
  219. }
  220. func insertPDFThumbnailViewControlle(pageEditVC: KMNThumbnailBaseViewController?, pdfDocment: CPDFDocument?) {
  221. if(pdfDocment != nil) {
  222. insertDocuments.insert(pdfDocment!)
  223. }
  224. }
  225. }