KMBatchAddWatermarkOperation.swift 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. //
  2. // KMBatchAddWatermarkOperation.swift
  3. // PDF Master
  4. //
  5. // Created by liujiajie on 2023/12/11.
  6. //
  7. import Foundation
  8. class KMBatchAddWatermarkOperation: KMBatchOperation{
  9. var waterMark: KMWatermarkModel?
  10. // var waterObject: KMPDFWatermarkObject?
  11. var pdfDocument: CPDFDocument!
  12. init(file: KMBatchOperateFile, waterMarkM: KMWatermarkModel) {
  13. super.init(file: file)
  14. self.waterMark = waterMarkM
  15. self.pdfDocument = CPDFDocument(url: URL(fileURLWithPath: file.filePath))
  16. if ((self.pdfDocument?.isLocked) != nil) {
  17. self.pdfDocument?.unlock(withPassword: file.password)
  18. }
  19. // let docum = CPDFDocument(url: self.pdfDocument.documentURL)
  20. if file.password.count > 0 {
  21. self.pdfDocument?.unlock(withPassword: file.password)
  22. }
  23. }
  24. override func start() {
  25. if !self.isCancelled {
  26. self.delegate?.fileBeginOperate?(self.operateFile!, info: self.operateFile!.addWatermarkInfo)
  27. willChangeValue(forKey: "isExecuting")
  28. self.hasExcuting = true
  29. didChangeValue(forKey: "isExecuting")
  30. var newArr = NSMutableArray()
  31. for i in 0..<(self.operateFile?.addWatermarkInfo.pagesArray?.count ?? 0) {
  32. let number = self.operateFile?.addWatermarkInfo.pagesArray![i]
  33. newArr.add(number!.intValue - 1)
  34. }
  35. if !FileManager.default.fileExists(atPath: self.operateFile!.filePath) {
  36. self.delegate?.fileOperateFailed?(self.operateFile!, error: self.errorWithMsg(KMLocalizedString("File Not Exist", nil)), info: self.operateFile!.addWatermarkInfo)
  37. self.willChangeValue(forKey: "isFinished")
  38. self.hasFinished = true
  39. self.didChangeValue(forKey: "isFinished")
  40. return
  41. }
  42. if self.pdfDocument == nil {
  43. self.delegate?.fileOperateFailed?(self.operateFile!, error: self.errorWithMsg(KMLocalizedString("An error occurred while opening this document. The file is damaged and could not be repaired.", nil)), info: self.operateFile!.addWatermarkInfo)
  44. self.willChangeValue(forKey: "isFinished")
  45. self.hasFinished = true
  46. self.didChangeValue(forKey: "isFinished")
  47. return
  48. }
  49. if !self.pdfDocument!.allowsPrinting || !self.pdfDocument!.allowsCopying {
  50. self.delegate?.fileOperateFailed?(self.operateFile!, error: self.errorWithMsg(KMLocalizedString("This is a secured document. Editing is not permitted.", nil)), info: self.operateFile!.addWatermarkInfo)
  51. self.willChangeValue(forKey: "isFinished")
  52. self.hasFinished = true
  53. self.didChangeValue(forKey: "isFinished")
  54. return
  55. }
  56. if newArr.count < 1 {
  57. let err = NSError(domain: "LocalError", code: 0, userInfo: [NSLocalizedDescriptionKey: KMLocalizedString("Invalid page range or the page number is out of range. Please try again.", nil)])
  58. self.delegate?.fileOperateFailed?(self.operateFile!, error: err, info: self.operateFile!.addWatermarkInfo)
  59. self.willChangeValue(forKey: "isFinished")
  60. self.hasFinished = true
  61. self.didChangeValue(forKey: "isFinished")
  62. }
  63. self.waterMark?.pagesString = newArr.componentsJoined(by: ",")
  64. // let wmV = KMWatermarkView()
  65. // wmV.addWatermark(model: self.waterMark, toPath: self.operateFile?.addWatermarkInfo.fetchDestinationFilepath()) { result in
  66. //
  67. // }
  68. KMWatermarkView.addWatermarkForOutSide(document: self.pdfDocument, model: self.waterMark!, toPath: (self.operateFile?.addWatermarkInfo.fetchDestinationFilepath())!) { success in
  69. if success {
  70. self.delegate?.fileOperateSuccessed?(self.operateFile!, info: self.operateFile!.addWatermarkInfo)
  71. }else {
  72. self.delegate?.fileOperateFailed?(self.operateFile!, error: self.errorWithMsg(KMLocalizedString("Failed", nil)), info: self.operateFile!.addWatermarkInfo)
  73. }
  74. self.willChangeValue(forKey: "isFinished")
  75. self.hasFinished = true
  76. self.didChangeValue(forKey: "isFinished")
  77. }
  78. }else {
  79. willChangeValue(forKey: "isFinished")
  80. willChangeValue(forKey: "isExecuting")
  81. hasExcuting = false
  82. hasFinished = true
  83. didChangeValue(forKey: "isExecuting")
  84. didChangeValue(forKey: "isFinished")
  85. }
  86. }
  87. override func cancel() {
  88. // super.cancel()
  89. if isExecuting {
  90. operateFile!.removeWatermarkInfo.status = .Waiting
  91. if FileManager.default.fileExists(atPath: (self.operateFile?.addWatermarkInfo.outPutPath)!) { try? FileManager.default.removeItem(atPath: (self.operateFile?.addWatermarkInfo.outPutPath)!)
  92. }
  93. self.delegate?.fileOperateCanceled?(self.operateFile!, info: self.operateFile!.addWatermarkInfo)
  94. willChangeValue(forKey: "isFinished")
  95. hasFinished = true
  96. didChangeValue(forKey: "isFinished")
  97. } else {
  98. willChangeValue(forKey: "isCancelled")
  99. hasCanceled = true
  100. didChangeValue(forKey: "isCancelled")
  101. }
  102. }
  103. }