瀏覽代碼

【页面编辑】代码检查

tangchao 11 月之前
父節點
當前提交
3dba1a2afc

+ 86 - 84
PDF Office/PDF Master/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.swift

@@ -98,9 +98,12 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
     override func viewDidAppear() {
         super.viewDidAppear()
         
-        if (self.pdfDocument?.isLocked == false && self.viewFirstAppear) {
+        let isLocked = self.pdfDocument?.isLocked ?? false
+        if (isLocked == false && self.viewFirstAppear) {
             self.viewFirstAppear = false
-            self.thumbnailView.document = self.pdfDocument!
+            if let doc = self.pdfDocument {
+                self.thumbnailView.document = doc
+            }
             self.thumbnailView.reloadData()
         }
         
@@ -118,7 +121,8 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
         } else {
             var indexs: IndexSet = []
             for pageIndex in self.selectedPages {
-                if (pageIndex < 0 || pageIndex >= (self.listView?.document.pageCount)!) {
+                let pageCnt = self.listView?.document?.pageCount ?? 0
+                if (pageIndex < 0 || pageIndex >= pageCnt) {
                     continue
                 }
                 
@@ -194,7 +198,6 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             } else if (type == .delete) {
                 self.deleteAction()
             } else if (type == .pageRange) {
-//                self.km_comboBoxSelectionDidChange((item?.pageRangeView)!)
             } else if (type == .insert) {
                 self.trackEvent(type: .insert)
             } else if (type == .copy) {
@@ -207,12 +210,14 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             self.km_comboBoxSelectionDidChange(type)
         }
         toolBar.pageRangeValueDidChange = { [unowned self] value, _ in
-            self.km_controlTextDidEndEditing(self.toolBar.pageRangeView!)
+            if let data = self.toolBar.pageRangeView {
+                self.km_controlTextDidEndEditing(data)
+            }
         }
         
         let view = self.thumbnailView
         self.contentBox.contentView?.addSubview(view)
-        view.frame = self.contentBox.contentView!.bounds
+        view.frame = self.contentBox.contentView?.bounds ?? .zero
         view.autoresizingMask = [.width, .height]
         self.pageEditThumbnailView.delegate = self
         self.pageEditThumbnailView.selectionDidChange = { [weak self] selectedIndexs in
@@ -225,19 +230,10 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             let enabled = (selectedIndexs.count > 0)
             for i in 0 ..< self.toolBar.toolBar.items.count {
                 let item = self.toolBar.toolBar.items[i]
-//                if item.itemIdentifier == KMToolbarPageEditExtractItemIdentifier
                 if item.itemIdentifier == KMToolbarPageEditLeftRotateItemIdentifier
-                    || item.itemIdentifier == KMToolbarPageEditRightRotateItemIdentifier
-//                    || item.itemIdentifier == KMToolbarPageEditReplaceItemIdentifier
-                {
+                    || item.itemIdentifier == KMToolbarPageEditRightRotateItemIdentifier {
                     item.unEnabled = !enabled
                 }
-//                else if (item.itemIdentifier == KMToolbarPageEditReverseItemIdentifier) {
-//                    item.unEnabled = !(selectedIndexs.count > 1)
-//                }
-//                else if (item.itemIdentifier == KMToolbarPageEditDeleteItemIdentifier) {
-//                    item.unEnabled = !self.canDelete()
-//                }
             }
             
             if (self.pageIsUpdate == false) {
@@ -270,8 +266,8 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
         return 0
     }
     
-    private func getSelectedPage() -> CPDFPage {
-        return (self.pdfDocument!.page(at: UInt(getSelecteIndex())))!
+    private func getSelectedPage() -> CPDFPage? {
+        return self.pdfDocument?.page(at: UInt(getSelecteIndex()))
     }
     
     private func selectPages(indexs: IndexSet) {
@@ -319,7 +315,8 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
-        if (self.thumbnailView.selectionIndexPaths.count == (self.listView?.document.pageCount)!) {
+        let pageCnt = self.listView?.document?.pageCount ?? 0
+        if (self.thumbnailView.selectionIndexPaths.count == pageCnt) {
             self._progressHUD(message: NSLocalizedString("Unable to delete all pages", comment: ""))
             return
         }
@@ -505,7 +502,7 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
         if ips.isEmpty {
             return self.listView?.currentPageIndex ?? 0
         }
-        return ips.last!.item
+        return ips.last?.item ?? 0
     }
     
     override func splitAction() {
@@ -518,8 +515,12 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             self._progressHUD(message: KMLocalizedString(Self.kNoPagesSelectedTipMessage))
             return
         }
+        guard let doc = self.pdfDocument else {
+            NSSound.beep()
+            return
+        }
         
-        let windowC = SplitWindowController(document: self.pdfDocument!)
+        let windowC = SplitWindowController(document: doc)
         windowC.fileAttribute?.pagesType = .custom
         let ips = self.indexpathsToIndexs(indexpaths: self.thumbnailView.selectionIndexPaths).sorted()
         let string = KMPageRangeTools.newParseSelectedIndexs(selectedIndex: ips)
@@ -571,7 +572,8 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             fileAttribute?.pagesString = KMPageRangeTools.newParseSelectedIndexs(selectedIndex: self.indexpathsToIndexs(indexpaths: pages).sorted())
             fileAttribute?.pageCnt = Int(self.thumbnailView.document?.pageCount ?? 0)
 
-            if let data = fileAttribute?.fetchSelectPages(), data.isEmpty {
+            let pages = fileAttribute?.fetchSelectPages() ?? []
+            if pages.isEmpty {
                 KMAlertTool.runModelForMainThread(message: KMLocalizedString("Invalid page range or the page number is out of range. Please try again.", nil))
             } else {
                 let panel = NSOpenPanel()
@@ -588,11 +590,11 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
                         if folderName == nil {
                             folderName = KMLocalizedString("Untitled", nil)
                         }
-                        var folderPath = "\(tFolderPath)/\(folderName!)"
+                        var folderPath = "\(tFolderPath)/\(folderName ?? "")"
                         //创建目录
                         while (FileManager.default.fileExists(atPath: folderPath)) {
                             index += 1
-                            folderPath = "\(tFolderPath)/\(folderName!)_\(index)"
+                            folderPath = "\(tFolderPath)/\(folderName ?? "")_\(index)"
 //                            folderPath = [tFolderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%ld",folderName,index]];
                         }
                         tFolderPath = folderPath
@@ -600,16 +602,16 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
                         if (result == nil) {
 //                        if (![[NSFileManager defaultManager] createDirectoryAtPath:tFolderPath withIntermediateDirectories:YES attributes:nil error:nil]) {
                             KMAlertTool.runModelForMainThread(message: KMLocalizedString("Failed to split!", nil))
-                            return;
+                            return
                         }
                         let vc = KMProgressWindowController()
                         NSApp.beginSheet(vc.window!, modalFor: self.view.window!, modalDelegate: nil, didEnd: nil, contextInfo: nil)
                         DispatchQueue.global().async {
 //                            NSArray * successArray = [self.pdfDocument splitByFileWithPages:fileAttribute folerPath:tFolderPath fileName:folderName];
-                            let successArray = self.pdfDocument?.splitByFileWithPages(fileAttribute!, folerPath: tFolderPath, fileName: folderName ?? "")
+                            let successArray = self.pdfDocument?.splitByFileWithPages(fileAttribute!, folerPath: tFolderPath, fileName: folderName ?? "") ?? []
                             DispatchQueue.main.async {
-                                if let cnt = successArray?.count, cnt > 0 {
-                                    let filePath = successArray!.first!
+                                if successArray.count > 0 {
+                                    let filePath = successArray.first ?? ""
                                     
                                     let workSpace = NSWorkspace.shared
                                     workSpace.activateFileViewerSelecting([URL(fileURLWithPath: filePath)])
@@ -685,7 +687,7 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
     }
     
     private func _splitMethod(windowC: KMPageEditSplitWindowController, model: KMPageEditSplitSettingModel, limit: Bool = false) {
-        let outputModel = windowC.model! as! KMPageEditSplitSettingModel
+        let outputModel = windowC.model as! KMPageEditSplitSettingModel
         
         DispatchQueue.main.async {
             let panel = NSOpenPanel()
@@ -697,17 +699,17 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
                     return
                 }
                 
-                let file_indexs = outputModel.getSplitIndexSets
-                if (file_indexs == nil || file_indexs!.count <= 0) {
+                let file_indexs = outputModel.getSplitIndexSets ?? []
+                if (file_indexs.count <= 0) {
                     return
                 }
                 
                 DispatchQueue.main.async {
                     self.showProgressWindow(message: NSLocalizedString("Spliting...", comment: ""))
-                    self.progressC?.maxValue = Double(file_indexs!.count)
-                    let _document: CPDFDocument = (self.listView?.document)!
+                    self.progressC?.maxValue = Double(file_indexs.count)
+                    let _document = self.listView?.document
                     
-                    let filePath = "\(panel.url!.path)/\(_document.documentURL.deletingPathExtension().lastPathComponent)"
+                    let filePath = "\(panel.url!.path)/\(_document?.documentURL.deletingPathExtension().lastPathComponent ?? "")"
                     let uniqueFilePath = KMTools.getUniqueFilePath(filePath: filePath)
                     //                    Swift.debugPrint(uniqueFilePath)
                     if (!FileManager.default.fileExists(atPath: uniqueFilePath)) {
@@ -715,8 +717,8 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
                     }
                     
                     var filepaths: [String] = []
-                    for i in 0 ..< file_indexs!.count {
-                        let indexs = file_indexs![i]
+                    for i in 0 ..< file_indexs.count {
+                        let indexs = file_indexs[i]
                         if (indexs.isEmpty) {
                             continue
                         }
@@ -726,11 +728,7 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
                         let newDocument = CPDFDocument()
                         newDocument?.importPages(indexs, from: _document, at: 0)
                         self.progressC?.increment(by: 1.0)
-                        if (limit) {
-                            let _ = KMTools.saveWatermarkDocument(document: newDocument!, to: URL(fileURLWithPath: filepath))
-                        } else {
-                            newDocument?.write(to: URL(fileURLWithPath: filepath))
-                        }
+                        newDocument?.write(to: URL(fileURLWithPath: filepath))
                     }
                     self.hiddenProgressWindow()
                     self.km_endSheet()
@@ -745,12 +743,14 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
     // MARK: Undo / Redo
     
     @objc private func reversePages(indexs: IndexSet) {
-        KMPageEditTools.reverse((self.thumbnailView.document)!, indexs
-        ) { result, error in
-            if (result) {
-                self.refreshUI(indexpaths: self.indexsToIndexpaths(indexs: indexs), keepSelected: true)
-                
-                self.kmUndoManager?.registerUndo(withTarget: self, selector: #selector(self.reversePages), object: indexs)
+        if let doc = self.thumbnailView.document {
+            KMPageEditTools.reverse(doc, indexs
+            ) { result, error in
+                if (result) {
+                    self.refreshUI(indexpaths: self.indexsToIndexpaths(indexs: indexs), keepSelected: true)
+                    
+                    self.kmUndoManager?.registerUndo(withTarget: self, selector: #selector(self.reversePages), object: indexs)
+                }
             }
         }
     }
@@ -937,7 +937,12 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             return
         }
         
-        let windowC = KMPDFEditInsertBlankPageWindow(document: self.pdfDocument!)
+        guard let doc = self.pdfDocument else {
+            NSSound.beep()
+            return
+        }
+        
+        let windowC = KMPDFEditInsertBlankPageWindow(document: doc)
         windowC.currentPage = self.getSelecteIndex() + 1
         windowC.insertLocation = 3
         windowC.callback = { [weak self] pdfDoc, _, pages, insertI in
@@ -1136,27 +1141,29 @@ extension KMPDFEditViewController {
     }
     
     @objc func sharePageItemAction(menu:NSMenuItem) {
-        let item = menu.parent!
-        let index = (item.representedObject as! IndexSet).first ?? -1
+        guard let item = menu.parent else {
+            NSSound.beep()
+            return
+        }
+        let index = (item.representedObject as? IndexSet)?.first ?? -1
         if Int(index) >= 0 {
-            let doucument = self.pdfDocument!
-            let page = doucument.page(at: UInt(index))
-            let filename : String = doucument.documentURL.lastPathComponent
-            let folderPath = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(filename))!
+            let doucument = self.pdfDocument
+//            let page = doucument.page(at: UInt(index))
+            let filename : String = doucument?.documentURL.lastPathComponent ?? ""
+            let folderPath = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(filename)) ?? ""
             try? FileManager.default.removeItem(atPath: folderPath)
             let pdfdocument = CPDFDocument()
-            let ret = pdfdocument!.importPages((item.representedObject as! IndexSet), from: self.thumbnailView.document, at: 0)
+            let ret = pdfdocument?.importPages((item.representedObject as? IndexSet) ?? [], from: self.thumbnailView.document, at: 0) ?? false
             let url = URL(fileURLWithPath: folderPath)
             if ret {
-                let success = pdfdocument!.write(to:url)
+                let success = pdfdocument?.write(to:url) ?? false
                 if success {
                     let workspace = NSWorkspace.shared
                     workspace.activateFileViewerSelecting([url])
                 }
             }
-            let represent : NSSharingService = menu.representedObject as! NSSharingService
-            represent.perform(withItems: [url])
-            
+            let represent = menu.representedObject as? NSSharingService
+            represent?.perform(withItems: [url])
         }
     }
     
@@ -1182,13 +1189,19 @@ extension KMPDFEditViewController {
 
 extension KMPDFEditViewController {
     override func menuItemAction_print(_ sender: Any?) {
-        self.printItemAction(menu: sender as! NSMenuItem)
+        if let item = sender as? NSMenuItem {
+            self.printItemAction(menu: item)
+        }
     }
     override func menuItemAction_showPageSize(_ sender: Any?) {
-        self.showPageSizeItemAction(menu: sender as! NSMenuItem)
+        if let item = sender as? NSMenuItem {
+            self.showPageSizeItemAction(menu: item)
+        }
     }
     override func menuItemAction_share(_ sender: Any?) {
-        self.sharePageItemAction(menu: sender as! NSMenuItem)
+        if let item = sender as? NSMenuItem {
+            self.sharePageItemAction(menu: item)
+        }
     }
 }
 
@@ -1198,25 +1211,11 @@ extension KMPDFEditViewController {
     func km_comboBoxSelectionDidChange(_ obj: KMPageRange) {
         self.pageIsUpdate = false
         
-//        let index: Int = obj.indexOfSelectedItem
         let index = obj.rawValue
         var indexpaths: Set<IndexPath> = []
         var type: KMPageRange? = obj
-//        if (index <= 0) { /// 全部页面
-//            type = .all
-//        } else if (index == 1) { /// 奇数页
-//            type = .odd
-//        } else if (index == 2) { /// 偶数页
-//            type = .even
-//        } else if (index == 3) { /// 横向页
-//            type = .horizontal
-//        } else if (index == 4) { /// 纵向页
-//            type = .vertical
-//        } else { /// 自定义
-//            type = .custom
-//        }
-        
-        for i in 0 ..< (self.pdfDocument?.pageCount)! {
+        let pageCnt = self.pdfDocument?.pageCount ?? 0
+        for i in 0 ..< pageCnt {
             if (type == .all) {
                 indexpaths.insert(IndexPath(item: Int(i), section: 0))
             } else if (type == .odd) {
@@ -1273,7 +1272,7 @@ extension KMPDFEditViewController {
             }
         }
         
-        let pages = KMPageRangeTools.findSelectPage(pageRangeString: self.toolBar.pageRangeView!.stringValue, pageCount: Int((self.listView?.document.pageCount)!))
+        let pages = KMPageRangeTools.findSelectPage(pageRangeString: self.toolBar.pageRangeView?.stringValue ?? "", pageCount: Int((self.listView?.document.pageCount) ?? 0))
         if (pages.isEmpty) {
             let alert = NSAlert()
             alert.messageText = NSLocalizedString("Invalid page range or the page number is out of range. Please try again.", comment: "")
@@ -1328,10 +1327,11 @@ extension KMPDFEditViewController: KMThumbnailViewDelegate {
             var indexs = IndexSet()
             for document in documents {
                 for i in 0 ..< document.pageCount {
-                    let page = document.page(at: i)
-                    pages.append(page!)
-                    indexs.insert(insertIndex)
-                    insertIndex += 1
+                    if let page = document.page(at: i) {
+                        pages.append(page)
+                        indexs.insert(insertIndex)
+                        insertIndex += 1
+                    }
                 }
             }
             self.insertPages(pages: pages, at: indexs)
@@ -1387,7 +1387,9 @@ extension KMPDFEditViewController: KMThumbnailViewDelegate {
     func thumbnailView(thumbanView: KMThumbnailView, itemForRepresentedObjectAt indexpath: IndexPath) -> NSCollectionViewItem {
         let cellView: KMPageEditThumbnailItem = thumbanView.collectionView.km.dequeueReusableCell(for: indexpath)
         cellView.isShowPageSize = self.thumbnailView.isShowPageSize
-        cellView.setPage(page: (self.pdfDocument?.page(at: UInt(indexpath.item)))!)
+        if let data = self.pdfDocument?.page(at: UInt(indexpath.item)) {
+            cellView.setPage(page: data)
+        }
         
         cellView.doubleClickAction = { [unowned self] _ in
             guard let callback = self.itemClick else {

+ 10 - 10
PDF Office/PDF Master/Class/PDFTools/PageEdit/Tools/KMPageEditTools.swift

@@ -50,7 +50,7 @@ class KMPageEditTools: NSObject {
                     let saveFilePath = url!.path
                     DispatchQueue.global().async {
                         var pdf = CPDFDocument.init()
-                        let success = (pdf!.extractAsOneDocument(withPages: extractPages, savePath: saveFilePath)) as Bool
+                        let success = pdf?.extractAsOneDocument(withPages: extractPages, savePath: saveFilePath) ?? false
                         DispatchQueue.main.async {
                             if (success == false) {
                                 callback(false, nil, "failure")
@@ -87,9 +87,9 @@ class KMPageEditTools: NSObject {
             DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                 let outputURL = panel.url
                 DispatchQueue.global().async {
-                    let folderName = String((document.documentURL!.lastPathComponent.split(separator: ".")[0])) + "_extract"
+                    let folderName = String(((document.documentURL?.lastPathComponent.split(separator: ".").first) ?? "")) + "_extract"
                     
-                    var filePath = URL(fileURLWithPath: outputURL!.path).appendingPathComponent(folderName).path
+                    var filePath = URL(fileURLWithPath: outputURL?.path ?? "").appendingPathComponent(folderName).path
                     var i = 1
                     let testFilePath = filePath
                     while FileManager.default.fileExists(atPath: filePath) {
@@ -99,13 +99,13 @@ class KMPageEditTools: NSObject {
                     
                     try? FileManager.default.createDirectory(atPath: filePath, withIntermediateDirectories: false, attributes: nil)
                     
-                    let successArray = document.extractPerPageDocument(withPages: extractPages, folerPath: filePath)
+                    let successArray = document.extractPerPageDocument(withPages: extractPages, folerPath: filePath) ?? []
                     DispatchQueue.main.async {
-                        if successArray!.count == 0 {
+                        if successArray.count == 0 {
                             callback(false, nil, "failure")
                             return
                         }
-                        NSWorkspace.shared.activateFileViewerSelecting(successArray!)
+                        NSWorkspace.shared.activateFileViewerSelecting(successArray)
                             
                         callback(true, successArray, "")
                     }
@@ -144,8 +144,8 @@ class KMPageEditTools: NSObject {
     }
     
     class func split(_ document: CPDFDocument, _ model: KMPageEditSplitSettingModel, _ path: String, _ filename: String, callback: @escaping (_ result: Bool, _ outputFilepaths: Array<String>?, _ error: String) -> ()) {
-        let file_indexs = model.getSplitIndexSets
-        if (file_indexs == nil || file_indexs!.count <= 0) {
+        let file_indexs = model.getSplitIndexSets ?? []
+        if (file_indexs.count <= 0) {
             callback(false, nil, "")
             return
         }
@@ -156,8 +156,8 @@ class KMPageEditTools: NSObject {
         }
         
         var filepaths: [String] = []
-        for i in 0 ..< file_indexs!.count {
-            let indexs = file_indexs![i]
+        for i in 0 ..< file_indexs.count {
+            let indexs = file_indexs[i]
             let filepath = String(format: "%@/%@ %d.pdf", filePath, filename, i+1)
             filepaths.append(filepath)
             

+ 3 - 1
PDF Office/PDF Master/Class/PDFTools/PageEdit/Window/KMPDFEditExtractWindow.swift

@@ -101,7 +101,9 @@ class KMPDFEditExtractWindow: NSWindowController {
             return
         }
         
-        if (self.deleteExtractButton.state == .on && self._pdfDocument!.pageCount == (self._attribute?.fetchSelectPages().count)!) {
+        let pageCnt = self._pdfDocument?.pageCount ?? 0
+        let pages = self._attribute?.fetchSelectPages() ?? []
+        if (self.deleteExtractButton.state == .on && pageCnt == pages.count) {
             Task {
                 _ = await KMAlertTool.runModel(message: String(format: "%@ %@", self._attribute?.filePath.lastPathComponent ?? "", KMLocalizedString("Invalid page range or the page number is out of range. Please try again.", nil)))
             }

+ 3 - 3
PDF Office/PDF Master/Class/PDFTools/PageEdit/Window/KMPDFEditInsertBlankPageWindow.swift

@@ -216,7 +216,7 @@ class KMPDFEditInsertBlankPageWindow: NSWindowController {
         }
         self.pageWidthTextField.isEnabled = false
         self.pageHeightTextField.isEnabled = false
-        let size = self.standardComboBox.objectValues[self.standardComboBox.indexOfSelectedItem] as! String
+        let size = self.standardComboBox.objectValues[self.standardComboBox.indexOfSelectedItem] as? String ?? ""
         let tSize = KMPageSizeTool.getPaperSize(paperName:size)
         let width = KMPageSizeTool.conversion(withUnit: "mm", value: tSize.width)
         let height = KMPageSizeTool.conversion(withUnit: "mm", value: tSize.height)
@@ -247,8 +247,8 @@ class KMPDFEditInsertBlankPageWindow: NSWindowController {
             if (self.standardComboBox.indexOfSelectedItem > self.standardComboBox.objectValues.count) {
                 return
             }
-            let size = self.standardComboBox.objectValues[self.standardComboBox.indexOfSelectedItem]
-            let tSize = KMPageSizeTool.getPaperSize(paperName: size as! String)
+            let size = self.standardComboBox.objectValues[self.standardComboBox.indexOfSelectedItem] as? String ?? ""
+            let tSize = KMPageSizeTool.getPaperSize(paperName: size)
             width = KMPageSizeTool.conversion(withUnit: "mm", value: tSize.width).stringToCGFloat()
             height = KMPageSizeTool.conversion(withUnit: "mm", value: tSize.height).stringToCGFloat()
         } else if (self.customButton.state == .on) {

+ 5 - 5
PDF Office/PDF Master/Class/PDFTools/PageEdit/Window/KMPDFEditInsertPageWindow.swift

@@ -202,7 +202,7 @@ class KMPDFEditInsertPageWindow: NSWindowController {
         }
         
         let fromDocument = CPDFDocument(url: self.fromFilePath)
-        if (fromDocument!.isLocked) {
+        if let data = (fromDocument?.isLocked), data {
             fromDocument?.unlock(withPassword: self.insertDocument?.password ?? "")
         }
          
@@ -240,7 +240,7 @@ class KMPDFEditInsertPageWindow: NSWindowController {
             fileAttribute.pagesType = .odd
             let tDocument = CPDFDocument(url: URL(fileURLWithPath: fileAttribute.filePath))
             var tPagesString = ""
-            for i in 0 ..< tDocument!.pageCount {
+            for i in 0 ..< (tDocument?.pageCount ?? 0) {
                 if (i%2 == 0) {
                     if (tPagesString.isEmpty) {
                         tPagesString.append("\(i+1)")
@@ -255,7 +255,7 @@ class KMPDFEditInsertPageWindow: NSWindowController {
             fileAttribute.pagesType = .even
             let tDocument = CPDFDocument(url: URL(fileURLWithPath: fileAttribute.filePath))
             var tPagesString = ""
-            for i in 0 ..< tDocument!.pageCount {
+            for i in 0 ..< (tDocument?.pageCount ?? 0) {
                 if (i%2 == 1) {
                     if (tPagesString.isEmpty) {
                         tPagesString.append("\(i+1)")
@@ -323,7 +323,7 @@ class KMPDFEditInsertPageWindow: NSWindowController {
             if (result == .OK) {
                 for fileURL in openPanel.urls {
                     let pdfDoc = CPDFDocument(url: fileURL)
-                    if (pdfDoc!.isLocked) {
+                    if let data = pdfDoc?.isLocked, data {
                         DispatchQueue.main.asyncAfter(deadline: .now()+0.5) {
                             KMBaseWindowController.checkPassword(url: fileURL) { result, pwd in
                                 if (pwd.isEmpty == false) {
@@ -344,7 +344,7 @@ class KMPDFEditInsertPageWindow: NSWindowController {
                         }
                     } else {
                         self.fromFilePath = fileURL
-                        self.outputFolderText.stringValue = self.fromFilePath!.path
+                        self.outputFolderText.stringValue = self.fromFilePath?.path ?? ""
                         self.insertDocument = CPDFDocument(url: fileURL)
                         self.customTextField.stringValue = String(format: "/ %ld", self.insertDocument?.pageCount ?? 0)
                         self.window?.makeFirstResponder(self)

+ 5 - 4
PDF Office/PDF Master/Class/PDFTools/PageEdit/Window/KMPageEditExtractWindowController.swift

@@ -12,10 +12,11 @@ class KMPageEditExtractWindowController: KMPageEditSettingBaseWindowController {
     override func initSubViews() {
         super.initSubViews()
         
-        let settingView = KMPageEditExtractSettingView.createFromNib()!
-        settingView.extractAfterDeletePageVC?.enabled = self.canDeleteAll
-        self.contentBox.contentView = settingView
-        self.settingView = settingView
+        if let settingView = KMPageEditExtractSettingView.createFromNib() {
+            settingView.extractAfterDeletePageVC?.enabled = self.canDeleteAll
+            self.contentBox.contentView = settingView
+            self.settingView = settingView
+        }
     }
     
     override func initDefaultValue() {

+ 1 - 1
PDF Office/PDF Master/Class/PDFTools/PageEdit/Window/KMPageEditInsertCustomPageWindowController.swift

@@ -26,7 +26,7 @@ class KMPageEditInsertCustomPageWindowController: KMBaseWindowController {
     
     var selectedPageSize: NSSize = NSZeroSize
     
-    var itemClick: KMPageEditInsertCustomPageItemClick!
+    var itemClick: KMPageEditInsertCustomPageItemClick?
     
     convenience init() {
         self.init(windowNibName: "KMPageEditInsertCustomPageWindowController")

+ 39 - 37
PDF Office/PDF Master/Class/PDFTools/PageEdit/Window/KMPageEditSplitWindowController.swift

@@ -18,45 +18,47 @@ class KMPageEditSplitWindowController: KMPageEditSettingBaseWindowController {
             controller.view.frame = NSMakeRect(0, 40, 176+16*2, 300)
             controller.view.autoresizingMask = [.maxYMargin]
             
-            let settingView: KMPageEditSplitSettingView = KMPageEditSplitSettingView.createFromNib()!
-            self.contentBox.contentView?.addSubview(settingView)
-            let settingViewLeft: CGFloat = 176+16+8
-            settingView.frame = NSRect(x: settingViewLeft, y: 0, width: NSWidth(self.contentBox.frame)-settingViewLeft, height: NSHeight(self.contentBox.frame))
-            settingView.autoresizingMask = [.width, .height]
-            self.settingView = settingView
-            settingView.pageCount = self.model!.pageCount
-            settingView.type = (self.model as! KMPageEditSplitSettingModel).type
-            if ((self.model as! KMPageEditSplitSettingModel).type == 2) {
-                settingView.setPageRangeString((self.model as! KMPageEditSplitSettingModel).pageRangeString)
+            if let settingView: KMPageEditSplitSettingView = KMPageEditSplitSettingView.createFromNib() {
+                self.contentBox.contentView?.addSubview(settingView)
+                let settingViewLeft: CGFloat = 176+16+8
+                settingView.frame = NSRect(x: settingViewLeft, y: 0, width: NSWidth(self.contentBox.frame)-settingViewLeft, height: NSHeight(self.contentBox.frame))
+                settingView.autoresizingMask = [.width, .height]
+                self.settingView = settingView
+                settingView.pageCount = self.model?.pageCount ?? 0
+                settingView.type = (self.model as? KMPageEditSplitSettingModel)?.type ?? 0
+                if (settingView.type == 2) {
+                    settingView.setPageRangeString((self.model as? KMPageEditSplitSettingModel)?.pageRangeString ?? "")
+                }
+                settingView.updateName(self.model?.outputFileName ?? "")
             }
-            settingView.updateName(self.model!.outputFileName)
         } else {
-            let settingView: KMPageEditSplitSettingView = KMPageEditSplitSettingView.createFromNib()!
-            self.contentBox.contentView = settingView
-            self.settingView = settingView
-            settingView.pageCount = self.model!.pageCount
-            settingView.type = (self.model as! KMPageEditSplitSettingModel).type
-            if ((self.model as! KMPageEditSplitSettingModel).type == 2) {
-                settingView.setPageRangeString((self.model as! KMPageEditSplitSettingModel).pageRangeString)
+            if let settingView: KMPageEditSplitSettingView = KMPageEditSplitSettingView.createFromNib() {
+                self.contentBox.contentView = settingView
+                self.settingView = settingView
+                settingView.pageCount = self.model?.pageCount ?? 0
+                settingView.type = (self.model as? KMPageEditSplitSettingModel)?.type ?? 0
+                if ((self.model as! KMPageEditSplitSettingModel).type == 2) {
+                    settingView.setPageRangeString((self.model as? KMPageEditSplitSettingModel)?.pageRangeString ?? "")
+                }
+                settingView.updateName(self.model!.outputFileName)
             }
-            settingView.updateName(self.model!.outputFileName)
         }
         
         self.settingView?.itemClick = { [unowned self] index, value in
             if (index == 1) { /// 类型切换
-                (self.model as! KMPageEditSplitSettingModel).type = value as! Int
+                (self.model as? KMPageEditSplitSettingModel)?.type = value as? Int ?? 0
                 return
             }
             if (index == 2) { /// 平均每几页拆分
-                (self.model as! KMPageEditSplitSettingModel).avgNumberForOneFile = value as! Int
+                (self.model as? KMPageEditSplitSettingModel)?.avgNumberForOneFile = value as? Int ?? 0
                 return
             }
             if (index == 3) { /// 平均拆分几个文件
-                (self.model as! KMPageEditSplitSettingModel).avgSplitNumberFile = value as! Int
+                (self.model as? KMPageEditSplitSettingModel)?.avgSplitNumberFile = value as? Int ?? 0
                 return
             }
             if (index == 4) { /// 页面范围切换
-                (self.model as! KMPageEditSplitSettingModel).pageRangeType = value as! Int
+                (self.model as? KMPageEditSplitSettingModel)?.pageRangeType = value as? Int ?? 0
                 return
             }
             if (index == 5) { /// 页面范围输入
@@ -71,45 +73,45 @@ class KMPageEditSplitWindowController: KMPageEditSettingBaseWindowController {
                         alert.informativeText = NSLocalizedString("Out of page range", comment: "")
                         alert.runModal()
                         (self.settingView as? KMPageEditSplitSettingView)?.setPageRangeString("1")
-                        (self.model as! KMPageEditSplitSettingModel).pageRangeType = 2
-                        (self.model as! KMPageEditSplitSettingModel).pageRangeString = "1"
+                        (self.model as? KMPageEditSplitSettingModel)?.pageRangeType = 2
+                        (self.model as? KMPageEditSplitSettingModel)?.pageRangeString = "1"
                         return
                     }
                 }
-                (self.model as! KMPageEditSplitSettingModel).pageRangeType = 2
-                (self.model as! KMPageEditSplitSettingModel).pageRangeString = value as! String
+                (self.model as? KMPageEditSplitSettingModel)?.pageRangeType = 2
+                (self.model as? KMPageEditSplitSettingModel)?.pageRangeString = value as? String ?? ""
                 return
             }
             if (index == 6) { /// 将原始文档名前置
-                (self.model as! KMPageEditSplitSettingModel).origFileNameIsPrefix = value as! Bool
+                (self.model as? KMPageEditSplitSettingModel)?.origFileNameIsPrefix = value as? Bool ?? false
                 
-                (self.settingView as! KMPageEditSplitSettingView).updateName(self.model!.outputFileName)
+                (self.settingView as? KMPageEditSplitSettingView)?.updateName(self.model?.outputFileName ?? "")
                 return
             }
             if (index == 7) { /// 标签
-                (self.model as! KMPageEditSplitSettingModel).hasTag = value as! Bool
+                (self.model as? KMPageEditSplitSettingModel)?.hasTag = value as? Bool ?? false
                 
-                (self.settingView as! KMPageEditSplitSettingView).updateName(self.model!.outputFileName)
+                (self.settingView as? KMPageEditSplitSettingView)?.updateName(self.model?.outputFileName ?? "")
                 return
             }
             if (index == 8) { /// 分隔符
-                (self.model as! KMPageEditSplitSettingModel).hasSep = value as! Bool
+                (self.model as? KMPageEditSplitSettingModel)?.hasSep = value as? Bool ?? false
                 
-                (self.settingView as! KMPageEditSplitSettingView).updateName(self.model!.outputFileName)
+                (self.settingView as? KMPageEditSplitSettingView)?.updateName(self.model?.outputFileName ?? "")
                 return
             }
             
             if (index == 9) { /// 分隔符
-                (self.model as! KMPageEditSplitSettingModel).tagString = value as! String
+                (self.model as? KMPageEditSplitSettingModel)?.tagString = value as? String ?? ""
                 
-                (self.settingView as! KMPageEditSplitSettingView).updateName(self.model!.outputFileName)
+                (self.settingView as? KMPageEditSplitSettingView)?.updateName(self.model?.outputFileName ?? "")
                 return
             }
             
             if (index == 10) { /// 分隔符
-                (self.model as! KMPageEditSplitSettingModel).sepString = value as! String
+                (self.model as? KMPageEditSplitSettingModel)?.sepString = value as? String ?? ""
                 
-                (self.settingView as! KMPageEditSplitSettingView).updateName(self.model!.outputFileName)
+                (self.settingView as? KMPageEditSplitSettingView)?.updateName(self.model?.outputFileName ?? "")
                 return
             }
         }

+ 23 - 24
PDF Office/PDF Master/Class/PDFTools/PageEdit/Window/SplitWindowController.swift

@@ -188,9 +188,10 @@ class SplitWindowController: KMBaseWindowController {
             fileAttribute?.filePath = self._fileURL?.path ?? ""
             fileAttribute?.bAllPage = false
             
+            let pageCnt = self._PDFDocument?.pageCount ?? 0
             if self.pageRangeComboBox.stringValue == KMLocalizedString("Odd Pages Only", nil) {
                 var tPagesString = ""
-                for i in 0 ..< self._PDFDocument!.pageCount {
+                for i in 0 ..< pageCnt {
                     if (i%2 == 0) {
                         if (tPagesString.isEmpty) {
                             tPagesString.append("\(i+1)")
@@ -203,7 +204,7 @@ class SplitWindowController: KMBaseWindowController {
                 fileAttribute?.pagesType = .odd
             } else if self.pageRangeComboBox.stringValue == KMLocalizedString("Even Pages Only", nil) {
                 var tPagesString = ""
-                for i in 0 ..< self._PDFDocument!.pageCount {
+                for i in 0 ..< pageCnt {
                     if (i%2 == 1) {
                         if (tPagesString.isEmpty) {
                             tPagesString.append("\(i+1)")
@@ -243,13 +244,6 @@ class SplitWindowController: KMBaseWindowController {
                 }
                 tFolderPath = folderPath
                 try?FileManager.default.createDirectory(atPath: tFolderPath, withIntermediateDirectories: true)
-//                if let data =  {
-//                    let alert = NSAlert()
-//                    alert.alertStyle = .critical
-//                    alert.messageText = KMLocalizedString("Failed to split!", nil)
-//                    alert.runModal()
-//                    return
-//                }
                 
                 self.progress.isHidden = false
                 self.cancelButton.isEnabled = false
@@ -259,19 +253,19 @@ class SplitWindowController: KMBaseWindowController {
                 if (self.byPageButton.state == .on) {
                     let index = self.byPageStepper.integerValue;
                     DispatchQueue.global().async {
-                        let successArray = self._PDFDocument?.splitByPagesWith(index, folerPath: tFolderPath, fileName: folderName)
+                        let successArray = self._PDFDocument?.splitByPagesWith(index, folerPath: tFolderPath, fileName: folderName) ?? []
                         DispatchQueue.main.async {
                             self.progress.isHidden = true
                             self.cancelButton.isEnabled = true
                             self.splitButton.isEnabled = true
                             
-                            if (successArray?.isEmpty == false) {
+                            if (successArray.isEmpty == false) {
                                 let response = KMAlertTool.runModelForMainThread_r(message: KMLocalizedString("Splitting completed. Tap 'OK' to open the output folder.", nil), buttons: [KMLocalizedString("OK",nil)])
                                 if (response == .alertFirstButtonReturn ) {
                                     self.km_quick_endSheet()
                                     DispatchQueue.main.asyncAfter(deadline: .now()+0.5) {
-                                        let filePath = successArray?.first
-                                        self._viewFileAtFinder(filePath!)
+                                        let filePath = successArray.first ?? ""
+                                        self._viewFileAtFinder(filePath)
                                     }
                                 }
                             } else {
@@ -286,19 +280,19 @@ class SplitWindowController: KMBaseWindowController {
                     let dex = self.byFileStepper.integerValue
                     DispatchQueue.global().async {
 //                        let successArray = self._PDFDocument?.splitByPagesWith(dex, folerPath: tFolderPath, fileName: folderName)
-                        let successArray = self._PDFDocument?.splitByFileWith(dex, folerPath: tFolderPath, fileName: folderName)
+                        let successArray = self._PDFDocument?.splitByFileWith(dex, folerPath: tFolderPath, fileName: folderName) ?? []
                         DispatchQueue.main.async {
                             self.progress.isHidden = true
                             self.cancelButton.isEnabled = true
                             self.splitButton.isEnabled = true
                             
-                            if (successArray?.isEmpty == false) {
+                            if (successArray.isEmpty == false) {
                                 let response = KMAlertTool.runModelForMainThread_r(message: KMLocalizedString("Splitting completed. Tap 'OK' to open the output folder.", nil), buttons: [KMLocalizedString("OK",nil)])
                                 if (response == .alertFirstButtonReturn) {
                                     self.km_quick_endSheet()
                                     DispatchQueue.main.asyncAfter(deadline: .now()+0.5) {
-                                        let filePath = successArray?.first
-                                        self._viewFileAtFinder(filePath!)
+                                        let filePath = successArray.first ?? ""
+                                        self._viewFileAtFinder(filePath)
                                     }
                                 }
                             }else{
@@ -313,20 +307,24 @@ class SplitWindowController: KMBaseWindowController {
                     DispatchQueue.global().async { [self] in
                         var pdfDocument1 = CPDFDocument()
                         var pdfDocument2 = CPDFDocument()
-                        for i in 0 ..< self._PDFDocument!.pageCount {
+                        let pageCnt = self._PDFDocument?.pageCount ?? 0
+                        let pages = fileAttribute?.fetchSelectPages() ?? []
+                        for i in 0 ..< pageCnt {
                             var isSelected = false
-                            for number in fileAttribute!.fetchSelectPages() {
+                            for number in pages {
                                 if number == i+1 {
                                     isSelected = true
 //                                    let page = self._PDFDocument?.page(at: i).copy()
-                                    let page = self._PDFDocument?.page(at: i)
-                                    pdfDocument1?.insertPageObject(page as! CPDFPage, at: pdfDocument1!.pageCount)
+                                    if let page = self._PDFDocument?.page(at: i) as? CPDFPage {
+                                        pdfDocument1?.insertPageObject(page, at: pdfDocument1!.pageCount)
+                                    }
                                 }
                             }
                             if (!isSelected) {
 //                                let page = self._PDFDocument?.page(at: i).copy()
-                                let page = self._PDFDocument?.page(at: i)
-                                pdfDocument2?.insertPageObject(page as! CPDFPage, at: pdfDocument2!.pageCount)
+                                if let page = self._PDFDocument?.page(at: i) as? CPDFPage {
+                                    pdfDocument2?.insertPageObject(page, at: pdfDocument2!.pageCount)
+                                }
                             }
                         }
                         if (pdfDocument1!.pageCount > 0) {
@@ -477,7 +475,8 @@ extension SplitWindowController {
         
         if (self._splitType == 3) {
             self.pageRangeComboBox.selectItem(at: 2)
-            if (self.fileAttribute!.pagesString.isEmpty == false) {
+            let isEmpty = self.fileAttribute?.pagesString.isEmpty ?? false
+            if (isEmpty) {
                 self.pageRangeComboBox.stringValue = self.fileAttribute?.pagesString ?? ""
                 
                 self.byPageButton.state = .off