Ver Fonte

【打印】系统打印机调用优化

lizhe há 9 meses atrás
pai
commit
caf10f9965

+ 23 - 18
PDF Office/PDF Master/Class/PDFTools/Print/KMPrintWindowController.swift

@@ -365,25 +365,27 @@ extension KMPrintWindowController {
         guard let document = document else { return }
         if (document.allowsPrinting == true) {
             let printInfo = NSPrintInfo.shared
-            var printOperation: NSPrintOperation = NSPrintOperation()
             let scalingMode: PDFPrintScalingMode = .pageScaleToFit
             if document.responds(to: NSSelectorFromString("printOperationForPrintInfo:scalingMode:autoRotate:")) {
-                printOperation = document.printOperation(for: printInfo, scalingMode: scalingMode, autoRotate: false) ?? NSPrintOperation()
+                if let printOperation = document.printOperation(for: printInfo, scalingMode: scalingMode, autoRotate: false) {
+                    printOperation.printPanel.options = [.showsPreview, .showsCopies, .showsOrientation, .showsPageRange, .showsPaperSize, .showsCopies, .showsPrintSelection, .showsScaling]
+                    let controller = KMPrintAccessoryController_OC(nibName: "KMPrintAccessoryController_OC", bundle: nil)
+                    printOperation.printPanel.addAccessoryController(controller)
+                    
+                    printOperation.runModal(for: NSWindow.currentWindow(), delegate: self, didRun: nil, contextInfo: nil)
+                }
+            } else {
+                self.openPrinter(document: document)
             }
-            
-            printOperation.printPanel.options = [.showsPreview, .showsCopies, .showsOrientation, .showsPageRange, .showsPaperSize, .showsCopies, .showsPrintSelection, .showsScaling]
-            let controller = KMPrintAccessoryController_OC(nibName: "KMPrintAccessoryController_OC", bundle: nil)
-            printOperation.printPanel.addAccessoryController(controller)
-            
-            printOperation.runModal(for: NSWindow.currentWindow(), delegate: self, didRun: nil, contextInfo: nil)
         }
     }
     
     static func openPrinter(document: PDFDocument) {
         let printInfo = NSPrintInfo.shared
-        let printOperation: NSPrintOperation = document.printOperation(for: printInfo, scalingMode: .pageScaleNone, autoRotate: true)!
-        printOperation.showsPrintPanel = true //是否弹出打印机设置界面
-        printOperation.run()
+        if let printOperation: NSPrintOperation = document.printOperation(for: printInfo, scalingMode: .pageScaleNone, autoRotate: true) {
+            printOperation.showsPrintPanel = true //是否弹出打印机设置界面
+            printOperation.run()
+        }
     }
 }
 
@@ -445,11 +447,13 @@ extension KMPrintWindowController: KMPrintBottomViewDelegate {
         
         guard let url = self.presenter.printData.url else { return }
         let document = PDFDocument.init(url: url)
+        guard let document = document else { return }
         let printInfo = NSPrintInfo.shared
-        let printOperation: NSPrintOperation = document!.printOperation(for: printInfo, scalingMode: .pageScaleNone, autoRotate: true)!
-        let printPanel = printOperation.printPanel
-        printPanel.options = [.showsOrientation, .showsPageRange, .showsPaperSize, .showsScaling, .showsPreview]
-        printOperation.runModal(for: self.window!, delegate: self, didRun: nil, contextInfo: nil)
+        if let printOperation: NSPrintOperation = document.printOperation(for: printInfo, scalingMode: .pageScaleNone, autoRotate: true) {
+            let printPanel = printOperation.printPanel
+            printPanel.options = [.showsOrientation, .showsPageRange, .showsPaperSize, .showsScaling, .showsPreview]
+            printOperation.runModal(for: self.window!, delegate: self, didRun: nil, contextInfo: nil)
+        }
     }
     
     func cancelAction() {
@@ -465,9 +469,10 @@ extension KMPrintWindowController: KMPrintBottomViewDelegate {
 //        let document = PDFDocument.init(url: url)
         guard let document = self.tempPDFDocument else { return }
         let printInfo = NSPrintInfo.shared
-        let printOperation: NSPrintOperation = document.printOperation(for: printInfo, scalingMode: .pageScaleNone, autoRotate: true)!
-        printOperation.showsPrintPanel = true //是否弹出打印机设置界面
-        printOperation.run()
+        if let printOperation: NSPrintOperation = document.printOperation(for: printInfo, scalingMode: .pageScaleNone, autoRotate: true) {
+            printOperation.showsPrintPanel = true //是否弹出打印机设置界面
+            printOperation.run()
+        }
     }
     
     func posterAction() {