Ver código fonte

【2025】【转档】图片转PDF逻辑优化(递归)

lizhe 1 mês atrás
pai
commit
bf6127bad8

+ 3 - 4
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/OCR/Tool/Manager/KMOCRManager.swift

@@ -216,6 +216,9 @@ extension KMOCRManager: KMGOCRManagerDelegate {
                     let images: [NSImage] = manager.images as? [NSImage] ?? []
                     KMGOCRManager.default().createPDFFile(manager.saveFilePath, images: images, results: resultArrays, scale: maxImageScale)
                     if self.OCRComplete != nil {
+                        if model.needTxT {
+                            self.saveTXT(needCallBack: false)
+                        }
                         let tempDocument = CPDFDocument(url: NSURL(fileURLWithPath: manager.saveFilePath) as URL)
                         self.OCRComplete?(tempDocument, nil, nil)
                         NSWorkspace.shared.activateFileViewerSelecting([URL(fileURLWithPath: manager.saveFilePath ?? "")])
@@ -242,10 +245,6 @@ extension KMOCRManager: KMGOCRManagerDelegate {
             let string = self.fetchTXT(ocrDictionary: ocrDictionary)
             self.OCRComplete?(nil, string, nil)
         }
-        
-        if model.needTxT {
-            self.saveTXT(needCallBack: false)
-        }
     }
     
     func viewFileAtFinder(_ fileName: String) {

+ 52 - 51
PDF Office/PDF Master/KMClass/NewBatch/Manager/KMBatchManager.swift

@@ -753,57 +753,7 @@ extension KMBatchManager {
                         }
                     }
                 } else {
-                    for i in 0..<filesData.count {
-                        let item = filesData[i]
-                        if data.isOCR {
-                            var fileName = item.filePath.deletingPathExtension.lastPathComponent
-                            let path = outputFolderPath + "/" + fileName + ".pdf"
-                            
-                            
-                            var pdfDocument = CPDFDocument()
-                            pdfDocument?.km_insert(image: item.image, at: pdfDocument?.pageCount ?? 0)
-
-                            let model = KMOCRModel()
-                            model.showType = .page
-                            model.saveAsPDF = true
-                            model.ocrType = data.ocrType
-                            model.languageType = data.languageType
-                            model.needTxT = data.isExtractText
-                            model.pageRangeType = .all
-                            
-                            //计算需要处理的页面
-                            let pages:[Int] = KMOCRManager.fetchPageIndex(document: pdfDocument!, model: model)
-                            model.pageRange = pages
-                            
-                            self.itemProgress(item: item, processValue: 0)
-                            self.convertOCR(outputFolderPath: outputFolderPath, document: pdfDocument!, fileName: fileName, data: model) { [unowned self] progress in
-                                self.itemProgress(item: item, processValue: progress)
-                            } complete: { [unowned self] document, text, error in
-                                self.itemSuccess(item: item)
-                                
-                                if i == filesData.count - 1 {
-                                    for item in filesData {
-                                        self.itemSuccess(item: item)
-                                    }
-                                    self.batchSuccess()
-                                }
-                            }
-                        } else {
-                            var fileName = item.filePath.deletingPathExtension.lastPathComponent
-                            let path = outputFolderPath + "/" + fileName + ".pdf"
-                            var pdfDocument = CPDFDocument()
-                            pdfDocument?.km_insert(image: item.image, at: pdfDocument?.pageCount ?? 0)
-                            let success = pdfDocument?.write(toFile: path)
-                            if success != nil {
-                                for item in filesData {
-                                    self.itemSuccess(item: item)
-                                }
-                                self.batchSuccess()
-                            } else {
-                                self.batchFailure()
-                            }
-                        }
-                    }
+                    processFile(at: 0, outputFolderPath: outputFolderPath, data: data)
                 }
             } else {
                 var fileName = data.selectFilePath.deletingPathExtension.lastPathComponent
@@ -853,6 +803,57 @@ extension KMBatchManager {
             }
         }
     }
+    
+    func processFile(at index: Int, outputFolderPath: String, data: KMBatchImageToPDFModel) {
+        guard index < filesData.count else {
+            self.batchSuccess()
+            return
+        }
+
+        let item = filesData[index]
+
+        if data.isOCR {
+            let fileName = item.filePath.deletingPathExtension.lastPathComponent
+            let path = outputFolderPath + "/" + fileName + ".pdf"
+
+            let pdfDocument = CPDFDocument()
+            pdfDocument?.km_insert(image: item.image, at: pdfDocument?.pageCount ?? 0)
+
+            let model = KMOCRModel()
+            model.showType = .page
+            model.saveAsPDF = true
+            model.ocrType = data.ocrType
+            model.languageType = data.languageType
+            model.needTxT = data.isExtractText
+            model.pageRangeType = .all
+
+            let pages: [Int] = KMOCRManager.fetchPageIndex(document: pdfDocument!, model: model)
+            model.pageRange = pages
+
+            self.itemProgress(item: item, processValue: 0)
+            self.convertOCR(outputFolderPath: outputFolderPath, document: pdfDocument!, fileName: fileName, data: model) { [unowned self] progress in
+                self.itemProgress(item: item, processValue: progress)
+            } complete: { [unowned self] document, text, error in
+                self.itemSuccess(item: filesData[index])
+                processFile(at: index + 1, outputFolderPath: outputFolderPath, data: data)
+            }
+        } else {
+            let fileName = item.filePath.deletingPathExtension.lastPathComponent
+            let path = outputFolderPath + "/" + fileName + ".pdf"
+
+            let pdfDocument = CPDFDocument()
+            pdfDocument?.km_insert(image: item.image, at: pdfDocument?.pageCount ?? 0)
+
+            let success = pdfDocument?.write(toFile: path)
+            if success != nil {
+                self.itemSuccess(item: item)
+                processFile(at: index + 1, outputFolderPath: outputFolderPath, data: data)
+            } else {
+                self.itemFailure(item: item, error: nil)
+            }
+        }
+    }
+
 }
 
 //MARK: private

+ 35 - 0
PDF Office/PDF Master/KMClass/NewBatch/View/Setting/ImageToPDF/KMBatchImageToPDFView.swift

@@ -216,6 +216,41 @@ class KMBatchImageToPDFView: KMBatchSettingItemView {
         let position = languages.firstIndex(of: model.language) ?? 0
         self.selectIndex = position
     }
+    
+    override func bacthProcessingNotification() {
+        self.newPDFDocumentButton.properties.isDisabled = self.isDisable
+        self.newPDFDocumentButton.reloadData()
+        
+        self.mergeAllButton.properties.isDisabled = self.isDisable
+        self.mergeAllButton.reloadData()
+        
+        self.appendToFileButton.properties.isDisabled = self.isDisable
+        self.appendToFileButton.reloadData()
+        
+        self.selectFileInputButton.properties.isDisabled = self.isDisable
+        self.selectFileInputButton.reloadData()
+        
+        self.selectFileInputAddonButton.properties.isDisabled = self.isDisable
+        self.selectFileInputAddonButton.reloadData()
+        
+        self.recognizeTextButton.properties.isDisabled = self.isDisable
+        self.recognizeTextButton.reloadData()
+        
+        self.languageSelectButton.properties.isDisabled = self.isDisable
+        self.languageSelectButton.reloadData()
+        
+        self.OCRPlan1Button.properties.isDisabled = self.isDisable
+        self.OCRPlan1Button.reloadData()
+        
+        self.OCRPlan2Button.properties.isDisabled = self.isDisable
+        self.OCRPlan2Button.reloadData()
+        
+        self.applyButton.properties.isDisabled = self.isDisable
+        self.applyButton.reloadData()
+        
+        self.extractTextButton.properties.isDisabled = self.isDisable
+        self.extractTextButton.reloadData()
+    }
 
 }