ConvertUtil.swift 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. //
  2. // ConvertUtil.swift
  3. // Runner
  4. //
  5. // Created by Xiaolong Liu on 2023/2/27.
  6. //
  7. import Foundation
  8. import ComPDFKit_Conversion
  9. class ConvertUtil : NSObject, CPDFConverterDelegate{
  10. let params_convert_type = "convertType";
  11. let params_file_path = "filePath";
  12. let params_file_name = "file_name";
  13. let params_data_tag = "dataTag";
  14. let params_contain_images = "containImages";
  15. let params_contain_annotations = "containAnnotations";
  16. let params_worksheet_options = "workSheetOptions";
  17. let params_content_options = "contentOptions";
  18. let params_image_dpi = "imageDpi";
  19. let params_image_page_options = "imagePageOptions";
  20. let params_merge_csv = "mergeCSV";
  21. let params_html_page_options = "htmlPageOptions";
  22. var result: ((Int, Int, String?) -> Void)?
  23. func getConvertOptions(withArguments arguments: Any?) -> CPDFConvertOptions {
  24. let convertData = arguments as! [String: String];
  25. let isContainImages = Bool(convertData[params_contain_images] ?? "true") ?? true
  26. let isContainAnnotation = Bool(convertData[params_contain_annotations] ?? "true") ?? true;
  27. let filePath = convertData[params_file_path];
  28. let fileName = convertData[params_file_name];
  29. let convertType = convertData[params_convert_type];
  30. let workSheetOptions = convertData[params_worksheet_options];
  31. let contentOptions = convertData[params_content_options];
  32. let imageDpi = convertData[params_image_dpi] ?? "300";
  33. let imagePageOptions = convertData[params_image_page_options];
  34. let mergeCSV = Bool(convertData[params_merge_csv] ?? "false") ?? false;
  35. let htmlPageOptions = convertData[params_html_page_options];
  36. print("convertType:\(convertType)")
  37. print("isContainImages:\(isContainImages)")
  38. print("isContainAnnotations:\(isContainAnnotation)")
  39. switch convertType!.uppercased() {
  40. case ConvertType.PPT.rawValue:
  41. let pptOptions = CPDFConvertPPTOptions()
  42. pptOptions.isContainImages = isContainImages
  43. pptOptions.isContainAnnotations = isContainAnnotation
  44. return pptOptions
  45. case ConvertType.WORD.rawValue:
  46. let wordOptions = CPDFConvertWordOptions()
  47. wordOptions.isContainImages = isContainImages
  48. wordOptions.isContainAnnotations = isContainAnnotation
  49. return wordOptions
  50. case ConvertType.EXCEL.rawValue:
  51. let excelOptions = CPDFConvertExcelOptions()
  52. excelOptions.isContainImages = isContainImages
  53. excelOptions.isContainAnnotations = isContainAnnotation
  54. switch workSheetOptions {
  55. case "ForEachTable":
  56. excelOptions.worksheetOptions = CPDFConvertExcelWorksheetOptions.forEachTable
  57. case "ForEachPage":
  58. excelOptions.worksheetOptions = CPDFConvertExcelWorksheetOptions.forEachPage
  59. default :
  60. excelOptions.worksheetOptions = CPDFConvertExcelWorksheetOptions.forTheDocument
  61. }
  62. switch contentOptions {
  63. case "OnlyText":
  64. excelOptions.contentOptions = CPDFConvertExcelContentOptions.onlyText
  65. case "OnlyTable":
  66. excelOptions.contentOptions = CPDFConvertExcelContentOptions.onlyTable
  67. default :
  68. excelOptions.contentOptions = CPDFConvertExcelContentOptions.allContent
  69. }
  70. return excelOptions
  71. case ConvertType.TXT.rawValue:
  72. return CPDFConvertTxtOptions()
  73. case ConvertType.IMAGE.rawValue:
  74. let imageOptions = CPDFConvertImgOptions()
  75. imageOptions.imageDpi = Int32(imageDpi) ?? 300
  76. imageOptions.isContainAnnotations = isContainAnnotation
  77. switch imagePageOptions {
  78. case "JPEG":
  79. imageOptions.type = CPDFConvertImgType.JPEG
  80. case "PNG":
  81. imageOptions.type = CPDFConvertImgType.PNG
  82. default:
  83. imageOptions.type = CPDFConvertImgType.PNG
  84. }
  85. return imageOptions
  86. case ConvertType.CSV.rawValue:
  87. let csvOptions = CPDFConvertCsvOptions()
  88. csvOptions.isMergeCSV = mergeCSV
  89. return csvOptions
  90. case ConvertType.RTF.rawValue:
  91. let rtfOptions = CPDFConvertRtfOptions()
  92. rtfOptions.isContainImages = isContainImages
  93. rtfOptions.isContainAnnotations = isContainAnnotation
  94. return rtfOptions
  95. case ConvertType.HTML.rawValue:
  96. let htmlOptions = CPDFConvertHtmlOptions()
  97. htmlOptions.isContainImages = isContainImages
  98. htmlOptions.isContainAnnotations = isContainAnnotation
  99. return htmlOptions
  100. default:
  101. return CPDFConvertOptions()
  102. }
  103. }
  104. func convert(options :CPDFConvertOptions, filePath:String, convertType : String, onProgress : @escaping (_ progress : Int, _ status : Int, _ outputPath : String?) -> Void) {
  105. result = onProgress
  106. let outPutPath = NSHomeDirectory() + "/Documents/ConversionDemo"
  107. let fileURL = URL(string: filePath)
  108. print(convertType)
  109. let pdfConvert : CPDFConverter?
  110. switch convertType.uppercased() {
  111. case ConvertType.PPT.rawValue:
  112. pdfConvert = CPDFConverterPPT(url: fileURL, password: "")
  113. print("to ppt")
  114. //
  115. case ConvertType.WORD.rawValue:
  116. pdfConvert = CPDFConverterWord(url: fileURL, password: "")
  117. print("to word")
  118. case ConvertType.EXCEL.rawValue:
  119. pdfConvert = CPDFConverterExcel(url: fileURL, password: "")
  120. case ConvertType.TXT.rawValue:
  121. pdfConvert = CPDFConverterTxt(url: fileURL, password: "")
  122. case ConvertType.IMAGE.rawValue:
  123. pdfConvert = CPDFConverterImg(url: fileURL, password: "")
  124. case ConvertType.CSV.rawValue:
  125. pdfConvert = CPDFConverterCsv(url: fileURL, password: "")
  126. case ConvertType.RTF.rawValue:
  127. pdfConvert = CPDFConverterRtf(url: fileURL, password: "")
  128. case ConvertType.HTML.rawValue:
  129. pdfConvert = CPDFConverterHtml(url: fileURL, password: "")
  130. default:
  131. pdfConvert = CPDFConverter()
  132. }
  133. // print(pdfConvert)
  134. pdfConvert?.convert(toFilePath: outPutPath, pageIndexs: [Int](), options: options)
  135. pdfConvert?.delegate = self
  136. }
  137. func converter(_ converter: CPDFConverter!, didStartConvert error: Error!) {
  138. }
  139. func converter(_ converter: CPDFConverter!, pageIndex index: UInt, pageCount count: UInt) {
  140. let progress = Double(index) / Double(count)
  141. result?(Int(progress*100), 1, nil)
  142. }
  143. func converter(_ converter: CPDFConverter!, didEndConvert error: Error!) {
  144. }
  145. }