FileConverter.swift 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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. accessSemaphore?.wait()
  38. if FileManager.default.fileExists(atPath: self.desPath) {
  39. try! FileManager.default.removeItem(atPath: self.desPath)
  40. }
  41. self.pathExtension = NSString(string: self.desPath).pathExtension
  42. // let outputPath = NSString(string: self.desPath).deletingPathExtension
  43. // let output = self.desPath
  44. self.convertQueue.async {
  45. let url = URL.init(fileURLWithPath: self.srcPath, isDirectory: false)
  46. let document = PDFDocument(url: url)
  47. if document == nil {
  48. self.accessSemaphore?.signal()
  49. return
  50. }
  51. let pageCount = document!.pageCount
  52. self.pages = []
  53. for i in 1...pageCount {
  54. self.pages.append(i)
  55. }
  56. // if NSArray(array: ["ppt", "PPT", "PPTX", "pptx"]).contains(pathExtension) {
  57. // self.pdfConverter = CPDFConverterPPT.init(url: url, password: kDefaultPassword)
  58. // self.pdfConverter?.delegate = self
  59. // self.options = CPDFConvertPPTOptions()
  60. // self.pdfConverter?.convert(toFilePath: outputPath,
  61. // pageIndexs: [], options: nil)
  62. // }else
  63. // if NSArray(array: ["doc", "DOC", "docx", "DOCX"]).contains(pathExtension) {
  64. // self.pdfConverter = CPDFConverterWord.init(url: url, password: nil)
  65. // self.pdfConverter?.delegate = self
  66. // self.options = CPDFConvertWordOptions()
  67. // self.pdfConverter?.convert(toFilePath: self.self.desPath,
  68. // pageIndexs: pagesArray, options: nil)
  69. // }else
  70. // if NSArray(array: ["xls", "XLS", "xlsx", "XLSX"]).contains(pathExtension) {
  71. // self.pdfConverter = CPDFConverterTable.init(url: url, password: nil)
  72. // self.pdfConverter?.delegate = self
  73. // self.options = CPDFConvertTableOptions()
  74. // self.pdfConverter?.convert(toFilePath: self.self.desPath,
  75. // pageIndexs: pagesArray, options: nil)
  76. // }else if NSArray(array: ["csv", "CSV"]).contains(pathExtension) {
  77. // self.pdfConverter = CPDFConverterCsv.init(url: url, password: nil)
  78. // self.pdfConverter?.delegate = self
  79. // self.options = CPDFConvertCsvOptions()
  80. // self.pdfConverter?.convert(toFilePath: self.self.desPath,
  81. // pageIndexs: pagesArray, options: nil)
  82. // }else {
  83. if self.fpConverter == nil {
  84. self.fpConverter = CPDFConverterFP.init()
  85. self.fpConverter?.setDelegate(self)
  86. }else {
  87. self.fpConverter?.stopConvertsionIfNeed()
  88. }
  89. let needMerge = NSArray(array: ["csv", "CSV"]).contains(self.pathExtension)
  90. // let allInOneSheetKey = String(CPDFConvertOptionsKey.allInOneSheet)
  91. // Task.init {
  92. self.fpConverter?.convertPDF(atPath: self.srcPath,
  93. pdfPassword: nil,
  94. pdfPageIndexs: self.pages,
  95. destDocType: self.pathExtension,
  96. destDocPath: self.desPath,
  97. moreOptions: [
  98. "KMPDFConvertOptionsKeyImageDPI" : "72",
  99. "CPDFConvertOptionsKeyAllInOneSheet":NSNumber(booleanLiteral: needMerge)
  100. ])
  101. // }
  102. // }
  103. }
  104. semaphore?.wait()
  105. accessSemaphore?.signal()
  106. return didSuccess
  107. }
  108. /// CPDFConverterDelegate
  109. func converter(_ converter: CPDFConverter!, didStartConvert error: Error!) {
  110. }
  111. func converter(_ converter: CPDFConverter!, didEndConvert error: Error!) {
  112. didSuccess = nil == error
  113. sleep(2)
  114. if self.pdfConverter?.isConverting == true {
  115. self.pdfConverter?.cancel()
  116. }
  117. self.pdfConverter?.delegate = nil
  118. self.pdfConverter = nil
  119. semaphore?.signal()
  120. }
  121. func converter(_ converter: CPDFConverter!, pageIndex index: UInt, pageCount count: UInt) {
  122. }
  123. /// CPDFConverterFPDelegate
  124. func fppdfConverter(_ converter: Any!, didEndConversion error: Error!) {
  125. didSuccess = nil == error
  126. self.fpConverter?.stopConvertsionIfNeed()
  127. sleep(2)
  128. // self.fpConverter?.stopConvertsionIfNeed()
  129. // self.fpConverter?.setDelegate(nil)
  130. // self.fpConverter = nil
  131. //
  132. semaphore?.signal()
  133. }
  134. }