FileConverter.swift 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. //
  2. // FileConverter.swift
  3. // KdanAuto
  4. //
  5. // Created by 朱东勇 on 2022/12/21.
  6. //
  7. import Foundation
  8. import ComPDFKit_Conversion
  9. import PDFKit
  10. let KMComPDFKit_Conversion_FreeKey = "0GlqazsfP4IwQoWL/6baqg+CN7l67d9FF0N3U4bBSLhmvR60yAnkkBesqA8agcAaswc5ugjeuEvGnUqi7SLvz6k8f7LqcbDiVIQLTv57527J0AoKYSECIVvbiY9V1ITRv0GI+05iQtIRD9CPDVIoSf/TPiylxglXhnl6PeFazoA=";
  11. let KMComPDFKit_Conversion_FreeSecret = "mG0c3O3Mzeu5dkZJW3gpqqFRGIktEUTr3N7MWERzNh/7rDlDXAYp6ebnHnHEdcFleiP4OkM17dhQ9pWvnVPbJOIDC/XIeZ7j/POUbhtIPbOZ3pnCWorSKPeQWqupmvSjMv7C2jvq4o0q6sQtN3jR4897KG6mIUGJSRuOsvjYroXP4neJlIQii5tjFEKC59L5S32wgJX2ceb3xBQSCnO9vtnsa41fJuMqWbPW2c3qJUemdtKP7E4eFYSl6tjgcetK";
  12. let KMPDFConvertOptionsKeyImageDPI = "KMPDFConvertOptionsKeyImageDPI"
  13. let KMPDFConvertOptionsKeyImageWithAnnotation = "KMPDFConvertOptionsKeyImageWithAnnotation"
  14. let kDefaultPassword = "666666"
  15. class FileConverter : NSObject, CPDFConverterDelegate, CPDFConverterFPDelegate {
  16. var pdfConverter:CPDFConverter?
  17. var fpConverter:CPDFConverterFP?
  18. var options:CPDFConvertOptions?
  19. var srcPath:String = ""
  20. var desPath:String = ""
  21. var pages:[Int] = []
  22. var pathExtension = ""
  23. var convertQueue = DispatchQueue.main
  24. var semaphore:DispatchSemaphore? = DispatchSemaphore.init(value: 0)
  25. var accessSemaphore:DispatchSemaphore? = DispatchSemaphore.init(value: 1)
  26. var didSuccess:Bool = false
  27. static var instance = FileConverter()
  28. class func shared() -> FileConverter {
  29. return instance
  30. }
  31. func converter(_ inSrcPath: String, inDesPath: String) -> Bool {
  32. self.srcPath = inSrcPath
  33. self.desPath = inDesPath
  34. if !FileManager.default.fileExists(atPath: srcPath) {
  35. return false
  36. }
  37. if FileManager.default.fileExists(atPath: desPath) {
  38. try! FileManager.default.removeItem(atPath: desPath)
  39. }
  40. let attributy = try! FileManager.default.attributesOfItem(atPath: srcPath)
  41. let fileType = attributy[FileAttributeKey.type] as! FileAttributeType
  42. if NSString(string: FileAttributeType.typeSymbolicLink.rawValue).isEqual(to: fileType.rawValue) {
  43. let symbolicLink = try? FileManager.default.destinationOfSymbolicLink(atPath: self.srcPath)
  44. if nil != symbolicLink {
  45. self.srcPath = symbolicLink!
  46. }
  47. }
  48. accessSemaphore?.wait()
  49. if FileManager.default.fileExists(atPath: self.desPath) {
  50. try! FileManager.default.removeItem(atPath: self.desPath)
  51. }
  52. self.pathExtension = NSString(string: self.desPath).pathExtension
  53. // let outputPath = NSString(string: self.desPath).deletingPathExtension
  54. // let output = self.desPath
  55. self.convertQueue.async {
  56. let url = URL.init(fileURLWithPath: self.srcPath, isDirectory: false)
  57. let document = PDFDocument(url: url)
  58. if document == nil {
  59. self.accessSemaphore?.signal()
  60. return
  61. }
  62. let pageCount = document!.pageCount
  63. self.pages = []
  64. for i in 1...pageCount {
  65. self.pages.append(i)
  66. }
  67. // if NSArray(array: ["ppt", "PPT", "PPTX", "pptx"]).contains(pathExtension) {
  68. // self.pdfConverter = CPDFConverterPPT.init(url: url, password: kDefaultPassword)
  69. // self.pdfConverter?.delegate = self
  70. // self.options = CPDFConvertPPTOptions()
  71. // self.pdfConverter?.convert(toFilePath: outputPath,
  72. // pageIndexs: [], options: nil)
  73. // }else
  74. // if NSArray(array: ["doc", "DOC", "docx", "DOCX"]).contains(pathExtension) {
  75. // self.pdfConverter = CPDFConverterWord.init(url: url, password: nil)
  76. // self.pdfConverter?.delegate = self
  77. // self.options = CPDFConvertWordOptions()
  78. // self.pdfConverter?.convert(toFilePath: self.self.desPath,
  79. // pageIndexs: pagesArray, options: nil)
  80. // }else
  81. // if NSArray(array: ["xls", "XLS", "xlsx", "XLSX"]).contains(pathExtension) {
  82. // self.pdfConverter = CPDFConverterTable.init(url: url, password: nil)
  83. // self.pdfConverter?.delegate = self
  84. // self.options = CPDFConvertTableOptions()
  85. // self.pdfConverter?.convert(toFilePath: self.self.desPath,
  86. // pageIndexs: pagesArray, options: nil)
  87. // }else if NSArray(array: ["csv", "CSV"]).contains(pathExtension) {
  88. // self.pdfConverter = CPDFConverterCsv.init(url: url, password: nil)
  89. // self.pdfConverter?.delegate = self
  90. // self.options = CPDFConvertCsvOptions()
  91. // self.pdfConverter?.convert(toFilePath: self.self.desPath,
  92. // pageIndexs: pagesArray, options: nil)
  93. // }else {
  94. if self.fpConverter == nil {
  95. self.fpConverter = CPDFConverterFP.init()
  96. self.fpConverter?.setDelegate(self)
  97. }else {
  98. self.fpConverter?.stopConvertsionIfNeed()
  99. }
  100. let needMerge = NSArray(array: ["csv", "CSV"]).contains(self.pathExtension)
  101. // let allInOneSheetKey = String(CPDFConvertOptionsKey.allInOneSheet)
  102. // Task.init {
  103. self.fpConverter?.convertPDF(atPath: self.srcPath,
  104. pdfPassword: nil,
  105. pdfPageIndexs: self.pages,
  106. destDocType: self.pathExtension,
  107. destDocPath: self.desPath,
  108. moreOptions: [
  109. "KMPDFConvertOptionsKeyImageDPI" : "72",
  110. "CPDFConvertOptionsKeyAllInOneSheet":NSNumber(booleanLiteral: needMerge)
  111. ])
  112. // }
  113. // }
  114. }
  115. semaphore?.wait()
  116. accessSemaphore?.signal()
  117. return didSuccess
  118. }
  119. /// CPDFConverterDelegate
  120. func converter(_ converter: CPDFConverter!, didStartConvert error: Error!) {
  121. }
  122. func converter(_ converter: CPDFConverter!, didEndConvert error: Error!) {
  123. didSuccess = nil == error
  124. sleep(2)
  125. if self.pdfConverter?.isConverting == true {
  126. self.pdfConverter?.cancel()
  127. }
  128. self.pdfConverter?.delegate = nil
  129. self.pdfConverter = nil
  130. semaphore?.signal()
  131. }
  132. func converter(_ converter: CPDFConverter!, pageIndex index: UInt, pageCount count: UInt) {
  133. }
  134. /// CPDFConverterFPDelegate
  135. func fppdfConverter(_ converter: Any!, didEndConversion error: Error!) {
  136. didSuccess = nil == error
  137. self.fpConverter?.stopConvertsionIfNeed()
  138. sleep(2)
  139. // self.fpConverter?.stopConvertsionIfNeed()
  140. // self.fpConverter?.setDelegate(nil)
  141. // self.fpConverter = nil
  142. //
  143. semaphore?.signal()
  144. }
  145. }