Browse Source

【页面编辑】提取新增水印限制

tangchao 1 year ago
parent
commit
2150f5412a

+ 3 - 1
PDF Office/PDF Master/AppDelegate.swift

@@ -119,7 +119,9 @@ class AppDelegate: NSObject, NSApplicationDelegate {
                     if !KMLightMemberManager.manager.isLogin() && NSApp.mainWindow != nil {
                         KMLoginWindowController.show(window: NSApp.mainWindow!)
                     } else {
-                        KMPurchaseManager.manager.restorePurchases()
+                        KMPurchaseManager.manager.restorePurchases { isSuccess in
+                            
+                        }
                     }
                     
                     if url.path == "/open" {

+ 137 - 14
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/Base/KMPDFThumbViewBaseController.swift

@@ -320,19 +320,46 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
                 let _ = KMComparativeTableViewController.show(window: self.view.window!)
                 return
             }
-//            if await (KMLightMemberManager.manager.canPayFunction() == false) {
-//                let _ = KMSubscribeWaterMarkWindowController.show(window: self.view.window!) { isSubscribeSuccess, isWaterMarkExport, isClose in
-//                    if (isClose) {
-//                        return
-//                    }
-//                    self._extractPages(indexpaths: indexpaths)
-//                }
-//                return
-//            }
-//            self._extractPages(indexpaths: indexpaths)
+            if await (KMLightMemberManager.manager.canPayFunction() == false) {
+                let _ = KMSubscribeWaterMarkWindowController.show(window: self.view.window!) { isSubscribeSuccess, isWaterMarkExport, isClose in
+                    if (isClose) {
+                        return
+                    }
+                    if (isSubscribeSuccess) {
+                        self.showExtractWindow_success(indexpaths: indexpaths) { [unowned self] oneDocumentPerPage, extractAfterDelete in
+                            self._extractPages(indexpaths: indexpaths, oneDocumentPerPage: oneDocumentPerPage) { [unowned self] result, params in
+                                if (result == .failure || result == .cancel) {
+                                    return
+                                }
+                                
+                                if (extractAfterDelete) {
+                                    self.deleteIndexPaths(indexpaths: indexpaths)
+                                }
+                            }
+                        }
+                        return
+                    }
+                    if (isWaterMarkExport) {
+                        self.showExtractWindow_success(indexpaths: indexpaths) { [unowned self] oneDocumentPerPage, extractAfterDelete in
+                            self._extractPages(indexpaths: indexpaths, oneDocumentPerPage: oneDocumentPerPage, limit: true) { [unowned self] result, params in
+                                if (result == .failure || result == .cancel) {
+                                    return
+                                }
+                                
+                                if (extractAfterDelete) {
+                                    self.deleteIndexPaths(indexpaths: indexpaths)
+                                }
+                            }
+                        }
+                        return
+                    }
+
+                }
+                return
+            }
             self.showExtractWindow_success(indexpaths: indexpaths) { [unowned self] oneDocumentPerPage, extractAfterDelete in
                 self._extractPages(indexpaths: indexpaths, oneDocumentPerPage: oneDocumentPerPage) { [unowned self] result, params in
-                    if (result == .failure) {
+                    if (result == .failure || result == .cancel) {
                         return
                     }
                     
@@ -554,9 +581,105 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
         }
     }
     
-    private func _extractPages(indexpaths: Set<IndexPath>, oneDocumentPerPage: Bool, callback: @escaping KMResultBlock) {
-        KMPageEditTools.extract((self.thumbnailView.document)!, self.indexpathsToIndexs(indexpaths: indexpaths), !oneDocumentPerPage, self.view.window!) { result, urls, error in
-            callback(result ? .success : .failure, urls as Any, error)
+    private func _extractPages(indexpaths: Set<IndexPath>, oneDocumentPerPage: Bool, limit: Bool = false, callback: @escaping KMResultBlock) {
+        let pageIndexs = self.indexpathsToIndexs(indexpaths: indexpaths)
+        let oneDocument = oneDocumentPerPage
+        let document = self.thumbnailView.document!
+        
+        /// 提取的页面
+        var extractPages: Array<CPDFPage> = []
+        for i in pageIndexs {
+            extractPages.append(document.page(at: UInt(i)))
+        }
+        
+        if (oneDocument) { /// 提取为一个文档
+            var fileName = document.documentURL.deletingPathExtension().lastPathComponent
+            fileName.append(" pages ")
+            fileName.append(KMPageRangeTools.newParseSelectedIndexs(selectedIndex: pageIndexs.sorted()))
+            fileName.append(".pdf")
+            NSPanel.savePanel(self.view.window!, true) { panel in
+                panel.nameFieldStringValue = fileName
+            } completion: { response, url, isOpen in
+                if (response != .OK) {
+                    callback(.cancel)
+                    return
+                }
+                
+                DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
+                    DispatchQueue.global().async {
+                        var success = false
+                        if (limit) {
+                            var pdf = CPDFDocument.init()
+                            for i in 0..<extractPages.count {
+                                let page = extractPages[i]
+
+                                pdf?.insertPageObject(page, at: pdf!.pageCount)
+                            }
+                            let fileUrl = KMTools.saveWatermarkDocument(document: pdf!, to: url!)
+                            success = fileUrl != nil
+                        } else {
+                            var pdf = CPDFDocument.init()
+                            success = pdf!.extractAsOneDocument(withPages: extractPages, savePath: url!.path)
+                        }
+                        DispatchQueue.main.async {
+                            if (success == false) {
+                                callback(.failure)
+                                return
+                            }
+                                 
+                            if (isOpen == false) {
+                                NSWorkspace.shared.activateFileViewerSelecting([url!])
+                            } else {
+                                NSDocumentController.shared.km_safe_openDocument(withContentsOf: url!, display: true) { _, _, _ in
+                                    
+                                }
+                            }
+                            callback(.success, [url!])
+                        }
+                    }
+                }
+            }
+
+            return
+        }
+        
+        let panel = NSOpenPanel()
+        panel.canChooseFiles = false
+        panel.canChooseDirectories = true
+        panel.canCreateDirectories = true
+        panel.allowsMultipleSelection = false
+        panel.beginSheetModal(for: self.view.window!) {  response in
+            if response != .OK {
+                callback(.cancel)
+                return
+            }
+            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
+                let outputURL = panel.url
+                DispatchQueue.global().async {
+                    let folderName = String((document.documentURL!.lastPathComponent.split(separator: ".")[0])) + "_extract"
+                    
+                    var filePath = URL(fileURLWithPath: outputURL!.path).appendingPathComponent(folderName).path
+                    var i = 1
+                    let testFilePath = filePath
+                    while FileManager.default.fileExists(atPath: filePath) {
+                        filePath = testFilePath + "\(i)"
+                        i += 1
+                    }
+                    
+                    try? FileManager.default.createDirectory(atPath: filePath, withIntermediateDirectories: false, attributes: nil)
+                    
+                    let successArray = document.extractPerPageDocument(withPages: extractPages, folerPath: filePath)
+                    DispatchQueue.main.async {
+                        if successArray!.count == 0 {
+                            callback(.failure)
+                            return
+                        }
+                        NSWorkspace.shared.activateFileViewerSelecting(successArray!)
+                            
+                        callback(.success, successArray)
+                    }
+                }
+            }
         }
     }