Browse Source

Conversion(flutter) ios端原生代码

liuxiaolong 1 year ago
parent
commit
e7b6be6279

+ 56 - 0
ios/Classes/ConverFilePlugin.swift

@@ -0,0 +1,56 @@
+//
+//  ConverFilePlugin.swift
+//  Runner
+//
+//  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
+//
+//  THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
+//  AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
+//  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
+//  This notice may not be removed from this file.
+//
+
+import Foundation
+import ComPDFKit_Conversion
+import Flutter
+
+
+class ConverFilePlugin{
+    
+        init(messenger : FlutterBinaryMessenger){
+            let channel = FlutterEventChannel(name: "com.compdfkit.conversion.flutter.convert", binaryMessenger: messenger)
+            channel.setStreamHandler(SwiftStreamHandler())
+        }
+        
+}
+
+class SwiftStreamHandler: NSObject,FlutterStreamHandler {
+    
+    var util:ConvertUtil?
+    
+    public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
+        
+        let convertData = arguments as! [String : Any];
+        let filePath = (convertData[params_file_path] as? String) ?? "";
+        let convertType = convertData[params_convert_type] as! String;
+        let taskId = (convertData[params_task_id] as? String) ?? "";
+        let fileName = (convertData[params_file_name] as? String ) ?? "";
+        let queue = DispatchQueue(label: "com.compdfkit.conversion.flutter")
+        queue.async {
+
+         self.util = ConvertUtil()
+         let options = self.util?.getConvertOptions(withArguments: arguments)
+         self.util?.convert(options: options!, filePath: filePath,fileName: fileName, convertType: convertType) { progress, status, outputPath in
+             events(["progress": progress, params_task_id: taskId, "status" : status, "outputPath" : outputPath ?? ""] as [String : Any])
+         }
+            
+        }
+            return nil
+        }
+
+        public func onCancel(withArguments arguments: Any?) -> FlutterError? {
+            return nil
+        }
+    
+}
+

+ 33 - 0
ios/Classes/ConvertDefine.swift

@@ -0,0 +1,33 @@
+//
+//  ConvertDefine.swift
+//  Runner
+//
+//  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
+//
+//  THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
+//  AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
+//  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
+//  This notice may not be removed from this file.
+//
+
+import Foundation
+
+let params_convert_type:String = "convertType";
+let params_file_path:String = "filePath";
+let params_file_name:String = "fileName";
+let params_task_id:String = "taskId";
+let params_contain_images:String = "containImages";
+let params_contain_annotations:String = "containAnnotations";
+let params_worksheet_options:String = "workSheetOptions";
+let params_content_options:String = "contentOptions";
+let params_image_dpi:String = "imageDpi";
+let params_image_page_options:String = "imagePageOptions";
+let params_merge_csv:String = "mergeCSV";
+let params_html_page_options:String = "htmlPageOptions";
+
+let task_wait = 0;
+let task_start = 1;
+let task_converting = 2;
+let task_success = 3;
+let task_fail = 4;
+let task_cancel = 5;

+ 25 - 0
ios/Classes/ConvertType.swift

@@ -0,0 +1,25 @@
+//
+//  ConvertType.swift
+//  Runner
+//
+//
+//  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
+//
+//  THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
+//  AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
+//  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
+//  This notice may not be removed from this file.
+//
+
+import Foundation
+
+enum ConvertType: String {
+    case PPT = "PPT"
+    case EXCEL = "EXCEL"
+    case WORD = "WORD"
+    case TXT = "TXT"
+    case IMAGE = "IMAGE"
+    case CSV = "CSV"
+    case RTF = "RTF"
+    case HTML = "HTML"
+}

+ 198 - 0
ios/Classes/ConvertUtil.swift

@@ -0,0 +1,198 @@
+//
+//  ConvertUtil.swift
+//  Runner
+//
+//
+//  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
+//
+//  THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
+//  AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
+//  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
+//  This notice may not be removed from this file.
+//
+
+import Foundation
+import ComPDFKit_Conversion
+
+class ConvertUtil : NSObject,CPDFConverterDelegate{
+     
+    
+    var pdfConvert : CPDFConverter?
+    var mPath:String?
+    var result: ((Int, Int, String?) -> Void)?
+    
+    func getConvertOptions(withArguments arguments: Any?) -> CPDFConvertOptions {
+        
+        let convertData = arguments as! [String: Any];
+        let isContainImages = Bool((convertData[params_contain_images] as? String) ?? "true") ?? true
+        let isContainAnnotation = Bool((convertData[params_contain_annotations] as? String) ?? "true") ?? true;
+        let filePath = convertData[params_file_path] as! String;
+        let fileName = (convertData[params_file_name] as? String) ?? "";
+        let convertType = convertData[params_convert_type] as! String;
+        let workSheetOptions = (convertData[params_worksheet_options] as? String) ?? "";
+        let contentOptions = (convertData[params_content_options] as? String) ?? "";
+        let imageDpi = (convertData[params_image_dpi] as? String) ?? "300";
+        let imagePageOptions = (convertData[params_image_page_options] as? String) ?? "";
+        let mergeCSV = Bool((convertData[params_merge_csv] as? String) ?? "false") ?? false;
+        let htmlPageOptions = convertData[params_html_page_options];
+        print("convertType:\(convertType)")
+        print("isContainImages:\(isContainImages)")
+        print("isContainAnnotations:\(isContainAnnotation)")
+        
+        switch convertType.uppercased() {
+            case ConvertType.PPT.rawValue:
+                let pptOptions = CPDFConvertPPTOptions()
+                pptOptions.isContainImages = isContainImages
+                pptOptions.isContainAnnotations = isContainAnnotation
+                return pptOptions
+            case ConvertType.WORD.rawValue:
+            let wordOptions = CPDFConvertWordOptions()
+            wordOptions.isContainImages = isContainImages
+            wordOptions.isContainAnnotations = isContainAnnotation
+            return wordOptions
+            case ConvertType.EXCEL.rawValue:
+            let excelOptions = CPDFConvertExcelOptions()
+            excelOptions.isContainImages = isContainImages
+            excelOptions.isContainAnnotations = isContainAnnotation
+            
+            switch workSheetOptions {
+            case "ForEachTable":
+                excelOptions.worksheetOptions = CPDFConvertExcelWorksheetOptions.forEachTable
+            case "ForEachPage":
+                excelOptions.worksheetOptions = CPDFConvertExcelWorksheetOptions.forEachPage
+            default :
+                excelOptions.worksheetOptions = CPDFConvertExcelWorksheetOptions.forTheDocument
+            }
+            
+            switch contentOptions {
+            case "OnlyText":
+                excelOptions.contentOptions = CPDFConvertExcelContentOptions.onlyText
+            case "OnlyTable":
+                excelOptions.contentOptions = CPDFConvertExcelContentOptions.onlyTable
+            default :
+                excelOptions.contentOptions = CPDFConvertExcelContentOptions.allContent
+            }
+            return excelOptions
+            
+            case ConvertType.TXT.rawValue:
+                return CPDFConvertTxtOptions()
+            
+            case ConvertType.IMAGE.rawValue:
+                let imageOptions = CPDFConvertImgOptions()
+        
+            imageOptions.imageDpi = Int32(imageDpi) ?? 300
+            imageOptions.isContainAnnotations = isContainAnnotation
+            switch imagePageOptions {
+            case "JPEG":
+                imageOptions.type = CPDFConvertImgType.JPEG
+            case "PNG":
+                imageOptions.type = CPDFConvertImgType.PNG
+            default:
+                imageOptions.type = CPDFConvertImgType.PNG
+            }
+            return imageOptions
+            
+            case ConvertType.CSV.rawValue:
+                let csvOptions = CPDFConvertCsvOptions()
+            csvOptions.isMergeCSV = mergeCSV
+            return csvOptions
+            
+            case ConvertType.RTF.rawValue:
+               let rtfOptions = CPDFConvertRtfOptions()
+            rtfOptions.isContainImages = isContainImages
+            rtfOptions.isContainAnnotations = isContainAnnotation
+            return rtfOptions
+            
+            case ConvertType.HTML.rawValue:
+                let htmlOptions = CPDFConvertHtmlOptions()
+            htmlOptions.isContainImages = isContainImages
+            htmlOptions.isContainAnnotations = isContainAnnotation
+            return htmlOptions
+            default:
+                return CPDFConvertOptions()
+    
+        }
+    
+    }
+    
+
+    
+    func convert(options :CPDFConvertOptions, filePath:String,fileName : String, convertType : String, onProgress : @escaping (_ progress : Int, _ status : Int, _ outputPath : String?) -> Void) {
+        
+         result = onProgress
+        
+        var outPutPath = NSHomeDirectory() + "/Documents/ConversionDemo"
+         if !FileManager.default.fileExists(atPath: outPutPath) {
+             try! FileManager.default.createDirectory(atPath: outPutPath, withIntermediateDirectories: true)
+         }
+         let encodeString = filePath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
+         let fileURL = URL(string:encodeString ?? "")
+    
+         switch convertType.uppercased() {
+            case ConvertType.PPT.rawValue:
+            
+             pdfConvert = CPDFConverterPPT(url: fileURL, password: "")
+             outPutPath = outPutPath.appending("/converted_\(fileName)_\(self.timeIntervalChangetoTimeStr(timeInterval: NSDate().timeIntervalSince1970, dateFormat:nil)).pptx")
+            
+            case ConvertType.WORD.rawValue:
+             
+             pdfConvert = CPDFConverterWord(url: fileURL, password: "")
+             outPutPath = outPutPath.appending("/converted_\(fileName)_\(self.timeIntervalChangetoTimeStr(timeInterval: NSDate().timeIntervalSinceNow, dateFormat:nil)).docx")
+            
+            case ConvertType.EXCEL.rawValue:
+            pdfConvert = CPDFConverterExcel(url: fileURL, password: "")
+            outPutPath = outPutPath.appending("/converted_\(fileName)_\(self.timeIntervalChangetoTimeStr(timeInterval: NSDate().timeIntervalSinceNow, dateFormat:nil)).xlsx")
+            case ConvertType.TXT.rawValue:
+              pdfConvert = CPDFConverterTxt(url: fileURL, password: "")
+              outPutPath = outPutPath.appending("/converted_\(fileName)_\(self.timeIntervalChangetoTimeStr(timeInterval: NSDate().timeIntervalSinceNow, dateFormat:nil)).txt")
+            
+            case ConvertType.IMAGE.rawValue:
+              pdfConvert = CPDFConverterImg(url: fileURL, password: "")
+             outPutPath = outPutPath.appending("/converted_\(fileName)_\(self.timeIntervalChangetoTimeStr(timeInterval: NSDate().timeIntervalSinceNow, dateFormat:nil)).zip")
+            
+            case ConvertType.CSV.rawValue:
+              pdfConvert = CPDFConverterCsv(url: fileURL, password: "")
+              outPutPath = outPutPath.appending("/converted_\(fileName)_\(self.timeIntervalChangetoTimeStr(timeInterval: NSDate().timeIntervalSinceNow, dateFormat:nil)).zip")
+            
+            case ConvertType.RTF.rawValue:
+            pdfConvert = CPDFConverterRtf(url: fileURL, password: "")
+               outPutPath = outPutPath.appending("/converted_\(fileName)_\(self.timeIntervalChangetoTimeStr(timeInterval: NSDate().timeIntervalSinceNow, dateFormat:nil)).rtf")
+            
+            case ConvertType.HTML.rawValue:
+            pdfConvert = CPDFConverterHtml(url: fileURL, password: "")
+            outPutPath = outPutPath.appending("/converted_\(fileName)_\(self.timeIntervalChangetoTimeStr(timeInterval: NSDate().timeIntervalSinceNow, dateFormat:nil)).zip")
+               
+            default:
+            pdfConvert = CPDFConverter()
+
+        }
+        pdfConvert?.delegate = self
+        mPath = outPutPath;
+        pdfConvert?.convert(toFilePath: outPutPath, pageIndexs: nil, options: nil)
+    }
+    
+    func timeIntervalChangetoTimeStr(timeInterval:TimeInterval, dateFormat:String?) -> String {
+        let date:NSDate = NSDate.init(timeIntervalSince1970: timeInterval/1000)
+        let formatter = DateFormatter.init()
+        if dateFormat == nil {
+            formatter.dateFormat = "yyyy-MM-dd_HH:mm:ss"
+        }else{
+            formatter.dateFormat = dateFormat
+        }
+        return formatter.string(from: date as Date)
+    }
+     
+     @objc func converter(_ converter: CPDFConverter!, didStartConvert error: Error!) {
+         result?(0, task_start, mPath)
+     }
+     
+     @objc func converter(_ converter: CPDFConverter!, pageIndex index: UInt, pageCount count: UInt) {
+         let progress = Double(index) / Double(count)
+         result?(Int(progress*100), task_converting, mPath)
+     }
+     
+     @objc func converter(_ converter: CPDFConverter!, didEndConvert error: Error!) {
+         result?(100, task_success, mPath)
+     }
+}
+