|
@@ -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)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|