Browse Source

Conversion(flutter) 1.优化代码

liuxiaolong 1 year ago
parent
commit
c8f171504a
40 changed files with 530 additions and 294 deletions
  1. 4 0
      README.md
  2. 1 1
      android/build.gradle
  3. 1 2
      android/src/main/AndroidManifest.xml
  4. 11 0
      android/src/main/kotlin/com/compdfkit/conversion/flutter/plugin/ConversionSDKFlutterPlugin.kt
  5. 30 15
      android/src/main/kotlin/com/compdfkit/conversion/flutter/plugin/ConvertFlutterPlugin.kt
  6. 4 2
      android/src/main/kotlin/com/compdfkit/conversion/flutter/plugin/ConvertType.kt
  7. 43 33
      android/src/main/kotlin/com/compdfkit/conversion/flutter/plugin/utils/ConvertUtils.kt
  8. 11 9
      android/src/main/kotlin/com/compdfkit/conversion/flutter/plugin/utils/FileUtils.kt
  9. 2 0
      example/android/app/build.gradle
  10. 3 0
      example/android/app/src/main/AndroidManifest.xml
  11. 1 1
      example/android/build.gradle
  12. 13 4
      example/lib/main.dart
  13. 11 4
      example/lib/models/convert_task.dart
  14. 20 10
      example/lib/states/convert_provider.dart
  15. 11 9
      example/lib/widgets/conversion_sdk_info_widget.dart
  16. 8 10
      example/lib/widgets/convert_list_widget.dart
  17. 17 12
      example/lib/widgets/convert_options_widget.dart
  18. 5 7
      example/lib/widgets/options/convert_csv_options_widget.dart
  19. 55 52
      example/lib/widgets/options/convert_excel_options_widget.dart
  20. 6 6
      example/lib/widgets/options/convert_html_options_widget.dart
  21. 9 7
      example/lib/widgets/options/convert_image_options_widget.dart
  22. 5 5
      example/lib/widgets/options/convert_ppt_options_widget.dart
  23. 5 5
      example/lib/widgets/options/convert_rtf_options_widget.dart
  24. 24 14
      example/lib/widgets/options/convert_word_options_widget.dart
  25. 130 26
      example/pubspec.lock
  26. 3 1
      example/pubspec.yaml
  27. 13 3
      lib/cpdf_converter.dart
  28. 0 3
      lib/models/convert_type.dart
  29. 5 2
      lib/models/options/convert_csv_options.dart
  30. 7 4
      lib/models/options/convert_excel_options.dart
  31. 12 9
      lib/models/options/convert_html_options.dart
  32. 6 4
      lib/models/options/convert_image_options.dart
  33. 7 8
      lib/models/options/convert_ppt_options.dart
  34. 7 7
      lib/models/options/convert_rtf_options.dart
  35. 4 7
      lib/models/options/convert_txt_options.dart
  36. 8 8
      lib/models/options/convert_word_options.dart
  37. 9 0
      lib/models/options/options.dart
  38. 10 3
      lib/models/task_result.dart
  39. 1 1
      lib/models/convert_status.dart
  40. 8 0
      lib/util/string_extensions.dart

+ 4 - 0
README.md

@@ -59,6 +59,7 @@ flutter packages get
 ## Usage
 
 1. Open `lib/main.dart`, and add the following code:
+
 ```diff
   @override
   void initState() {
@@ -68,6 +69,7 @@ flutter packages get
 ```
 
 2. To select a local PDF file, add the following dependencies to the `myapp/pubspec.yaml` file:
+
 ```diff
 dependencies:
     flutter:
@@ -78,6 +80,7 @@ dependencies:
 ```
 
 3. After obtaining the storage permission, use the `FilePicker` plugin to select the PDF file that needs to be converted:
+
 ```dart
   ///request storage permission
   Future<bool> getPermission() async {
@@ -104,6 +107,7 @@ dependencies:
 ```
 
 4. Convert file formats using the Conversion SDK:
+
 ```dart
   List<String> files = await getPDFFileList(context);
 

+ 1 - 1
android/build.gradle

@@ -55,5 +55,5 @@ rootProject.allprojects {
 
 dependencies {
     api fileTree(include: ['*.jar'], dir: 'libs')
-    api(name:"ComPDFKitConversion", ext:"aar")
+    api(name: "ComPDFKitConversion", ext: "aar")
 }

+ 1 - 2
android/src/main/AndroidManifest.xml

@@ -1,3 +1,2 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-  package="com.compdfkit.conversion.flutter.plugin">
+<manifest package="com.compdfkit.conversion.flutter.plugin">
 </manifest>

+ 11 - 0
android/src/main/kotlin/com/compdfkit/conversion/flutter/plugin/ConversionSDKFlutterPlugin.kt

@@ -1,3 +1,14 @@
+/**
+ *  ConversionSDkFlutterPlugin.kt
+ *
+ *  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.
+ **/
+
 package com.compdfkit.conversion.flutter.plugin
 
 import android.content.Context

+ 30 - 15
android/src/main/kotlin/com/compdfkit/conversion/flutter/plugin/ConvertFlutterPlugin.kt

@@ -1,24 +1,27 @@
+/**
+ *  ConvertFlutterPlugin.kt
+ *
+ *  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.
+ **/
+
 package com.compdfkit.conversion.flutter.plugin
 
 import android.content.Context
 import android.util.Log
 import com.compdfkit.conversion.ConvertError
 import com.compdfkit.conversion.flutter.plugin.utils.ConvertUtils
+import com.compdfkit.conversion.flutter.plugin.utils.FileUtils
 import io.flutter.embedding.engine.plugins.FlutterPlugin
 import io.flutter.plugin.common.EventChannel
 import io.flutter.plugin.common.MethodChannel
 import kotlinx.coroutines.*
 
-/**
- *  ConvertFlutterPlugin.kt
- *
- *  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.
- **/
+
 class ConvertFlutterPlugin : FlutterPlugin, EventChannel.StreamHandler {
 
     private val channelName = "com.compdfkit.conversion.flutter.convert"
@@ -28,7 +31,9 @@ class ConvertFlutterPlugin : FlutterPlugin, EventChannel.StreamHandler {
 
         val PARAMS_CONVERT_TYPE = "convertType"
         val PARAMS_FILE_PATH = "filePath"
+        val PARAMS_OUTPUT_DIR = "outputDir"
         val PARAMS_FILE_NAME = "fileName"
+        val PARAMS_PASSWORD = "password"
         val PARAMS_TASK_ID = "taskId"
         val PARAMS_CONTAIN_IMAGES = "containImages"
         val PARAMS_CONTAIN_ANNOTATIONS = "containAnnotations"
@@ -63,6 +68,7 @@ class ConvertFlutterPlugin : FlutterPlugin, EventChannel.StreamHandler {
                 "cancel_task" -> {
                     convertUtils.cancel()
                 }
+
                 else -> {
                     result.notImplemented()
                 }
@@ -89,16 +95,23 @@ class ConvertFlutterPlugin : FlutterPlugin, EventChannel.StreamHandler {
     private fun startTask(arguments: Any?) {
         GlobalScope.launch(Dispatchers.IO) {
             val convertInfoMap = arguments as Map<String, Any>
-            print("CPDFConversion : Android端已收到转档任务,开始进行转档")
             print(convertInfoMap)
-            val options = convertUtils.getConvertOptions(convertInfoMap[PARAMS_CONVERT_TYPE]?.toString() ?: "", convertInfoMap)
+            val options = convertUtils.getConvertOptions(
+                convertType = convertInfoMap[PARAMS_CONVERT_TYPE]?.toString() ?: "", convertInfoMap
+            )
             val taskId = convertInfoMap[PARAMS_TASK_ID] as? String ?: ""
             if (context == null) {
                 return@launch
             }
-            val err = convertUtils.onConvert(context = context!!,
+            val err = convertUtils.onConvert(
+                context = context!!,
+                password = convertInfoMap[PARAMS_PASSWORD]?.toString() ?: "",
+                fileName = convertInfoMap[PARAMS_FILE_NAME]?.toString() ?: "",
                 filePath = convertInfoMap[PARAMS_FILE_PATH]?.toString() ?: "",
-                convertType = convertInfoMap[PARAMS_CONVERT_TYPE]?.toString() ?: "", pageArrays = null, params = options,
+                outputDir = convertInfoMap[PARAMS_OUTPUT_DIR]?.toString() ?: FileUtils.getOutputFilePath(context!!),
+                convertType = convertInfoMap[PARAMS_CONVERT_TYPE]?.toString() ?: "",
+                pageArrays = null,
+                params = options,
                 onHandle = {
                     updateTask(
                         taskId = taskId,
@@ -124,13 +137,15 @@ class ConvertFlutterPlugin : FlutterPlugin, EventChannel.StreamHandler {
                                 outputPath = outFilePath
                             )
                         }
-                        ConvertError.ERR_INTERRUPT ->{
+
+                        ConvertError.ERR_INTERRUPT -> {
                             updateTask(
                                 taskId = taskId,
                                 progress = 100,
                                 taskStatus = TASK_STATUS_CANCEL
                             )
                         }
+
                         else -> {
                             updateTask(
                                 taskId = taskId,

+ 4 - 2
android/src/main/kotlin/com/compdfkit/conversion/flutter/plugin/ConvertType.kt

@@ -1,5 +1,3 @@
-package com.compdfkit.conversion.flutter.kmpdfkit_demo
-
 /**
  *  ConvertType.kt
  *
@@ -10,6 +8,10 @@ package com.compdfkit.conversion.flutter.kmpdfkit_demo
  *  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  *  This notice may not be removed from this file.
  **/
+
+package com.compdfkit.conversion.flutter.plugin
+
+
 enum class ConvertType {
     PPT, WORD, EXCEL, TXT, IMAGE,CSV,RTF,HTML, NONE
 }

+ 43 - 33
android/src/main/kotlin/com/compdfkit/conversion/flutter/plugin/utils/ConvertUtils.kt

@@ -1,3 +1,15 @@
+/**
+ *  ConvertUtils.kt
+ *
+ *  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.
+ **/
+
+
 package com.compdfkit.conversion.flutter.plugin.utils
 
 import android.content.Context
@@ -10,26 +22,19 @@ import com.compdfkit.conversion.flutter.plugin.ConvertFlutterPlugin.Companion.PA
 import com.compdfkit.conversion.flutter.plugin.ConvertFlutterPlugin.Companion.PARAMS_IMAGE_PAGE_OPTIONS
 import com.compdfkit.conversion.flutter.plugin.ConvertFlutterPlugin.Companion.PARAMS_MERGE_CSV
 import com.compdfkit.conversion.flutter.plugin.ConvertFlutterPlugin.Companion.PARAMS_WORK_SHEET_OPTIONS
-import com.compdfkit.conversion.flutter.kmpdfkit_demo.ConvertType
+import com.compdfkit.conversion.flutter.plugin.ConvertType
 
-/**
- *  ConvertUtils.kt
- *
- *  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.
- **/
-class ConvertUtils {
 
+class ConvertUtils {
 
     var cPDFConvert: CPDFConverter? = null
 
     fun onConvert(
         context: Context,
+        fileName: String,
+        password: String,
         filePath: String,
+        outputDir: String,
         convertType: String,
         pageArrays: IntArray? = null,
         params: CPDFConvertOptions,
@@ -37,54 +42,60 @@ class ConvertUtils {
         onProgress: ((current: Int, total: Int) -> Unit)? = null,
         onPost: ((code: ConvertError, outFilePath: String?) -> Unit)? = null
     ): ConvertError {
-        val outputDir = FileUtils.getOutputFilePath(context)
-
         val uri = FileUtils.onGetUriBySystem(context, filePath) ?: return ConvertError.ERR_FILE
         return when (ConvertType.valueOf(convertType.uppercase())) {
-            ConvertType.PPT -> CPDFConverterPPT(context, uri, "")
+            ConvertType.PPT -> CPDFConverterPPT(context, uri, password)
                 .run {
                     cPDFConvert = this
-                    convert(outputDir, "", params, pageArrays, onHandle, onProgress, onPost)
+                    convert(outputDir, fileName, params, pageArrays, onHandle, onProgress, onPost)
                 }
-            ConvertType.WORD -> CPDFConverterWord(context, uri, "")
+
+            ConvertType.WORD -> CPDFConverterWord(context, uri, password)
                 .run {
                     cPDFConvert = this
-                    convert(outputDir, "", params as CPDFConvertWordOptions, pageArrays, onHandle, onProgress, onPost)
+                    convert(outputDir, fileName, params as CPDFConvertWordOptions, pageArrays, onHandle, onProgress, onPost)
                 }
-            ConvertType.EXCEL -> CPDFConverterExcel(context, uri, "")
+
+            ConvertType.EXCEL -> CPDFConverterExcel(context, uri, password)
                 .run {
                     cPDFConvert = this
-                    convert(outputDir, "", params as CPDFConvertExcelOptions, pageArrays, onHandle, onProgress, onPost)
+                    convert(outputDir, fileName, params as CPDFConvertExcelOptions, pageArrays, onHandle, onProgress, onPost)
                 }
-            ConvertType.TXT -> CPDFConverterTxt(context, uri, "")
+
+            ConvertType.TXT -> CPDFConverterTxt(context, uri, password)
                 .run {
                     cPDFConvert = this
-                    convert(outputDir, "", params as CPDFConvertTxtOptions, pageArrays, onHandle, onProgress, onPost)
+                    convert(outputDir, fileName, params as CPDFConvertTxtOptions, pageArrays, onHandle, onProgress, onPost)
                 }
-            ConvertType.IMAGE -> CPDFConverterImg(context, uri, "").run {
+
+            ConvertType.IMAGE -> CPDFConverterImg(context, uri, password).run {
                 cPDFConvert = this
-                convert(outputDir, "", params, pageArrays, onHandle, onProgress, onPost)
+                convert(outputDir, fileName, params, pageArrays, onHandle, onProgress, onPost)
             }
-            ConvertType.CSV -> CPDFConverterCsv(context, uri, "").run {
+
+            ConvertType.CSV -> CPDFConverterCsv(context, uri, password).run {
                 cPDFConvert = this
-                convert(outputDir, "", params, pageArrays, onHandle, onProgress, onPost)
+                convert(outputDir, fileName, params, pageArrays, onHandle, onProgress, onPost)
             }
-            ConvertType.RTF -> CPDFConverterRtf(context, uri, "").run {
+
+            ConvertType.RTF -> CPDFConverterRtf(context, uri, password).run {
                 cPDFConvert = this
-                convert(outputDir, "", params, pageArrays, onHandle, onProgress, onPost)
+                convert(outputDir, fileName, params, pageArrays, onHandle, onProgress, onPost)
             }
-            ConvertType.HTML -> CPDFConverterHtml(context, uri, "").run {
+
+            ConvertType.HTML -> CPDFConverterHtml(context, uri, password).run {
                 cPDFConvert = this
-                convert(outputDir, "", params, pageArrays, onHandle, onProgress, onPost)
+                convert(outputDir, fileName, params, pageArrays, onHandle, onProgress, onPost)
             }
+
             else -> ConvertError.ERR_UNKNOWN
         }
     }
 
+
     fun getConvertOptions(convertType: String, optionsMap: Map<String, Any>): CPDFConvertOptions {
         val isContainImages = optionsMap[PARAMS_CONTAIN_IMAGES] as? Boolean ?: true
         val isContainAnnotation = optionsMap[PARAMS_CONTAIN_ANNOTATIONS] as? Boolean ?: true
-
         return when (ConvertType.valueOf(convertType.uppercase())) {
             ConvertType.PPT -> CPDFConvertPPTOptions().also {
                 it.isContainImages = isContainImages
@@ -102,7 +113,6 @@ class ConvertUtils {
                 it.workSheetOptions = workSheetOptions
                 it.contentOptions = contentOptions
             }
-
             ConvertType.TXT -> CPDFConvertTxtOptions()
             ConvertType.IMAGE -> CPDFConvertImgOptions().also {
                 val imageDpi = optionsMap[PARAMS_IMAGE_DPI] as? Number
@@ -129,7 +139,7 @@ class ConvertUtils {
         }
     }
 
-    fun cancel(){
+    fun cancel() {
         cPDFConvert?.cancle()
     }
 

+ 11 - 9
android/src/main/kotlin/com/compdfkit/conversion/flutter/plugin/utils/FileUtils.kt

@@ -1,12 +1,3 @@
-package com.compdfkit.conversion.flutter.plugin.utils
-
-import android.content.Context
-import android.net.Uri
-import android.os.Build
-import android.os.Environment
-import androidx.core.content.FileProvider
-import java.io.File
-
 /**
  *  FileUtils.kt
  *
@@ -17,6 +8,17 @@ import java.io.File
  *  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  *  This notice may not be removed from this file.
  **/
+
+package com.compdfkit.conversion.flutter.plugin.utils
+
+import android.content.Context
+import android.net.Uri
+import android.os.Build
+import android.os.Environment
+import androidx.core.content.FileProvider
+import java.io.File
+
+
 object FileUtils {
 
     fun onGetUriBySystem(context: Context, filePath: String?): Uri? {

+ 2 - 0
example/android/app/build.gradle

@@ -66,4 +66,6 @@ flutter {
 
 dependencies {
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+    implementation 'androidx.documentfile:documentfile:1.0.1'
+
 }

+ 3 - 0
example/android/app/src/main/AndroidManifest.xml

@@ -1,5 +1,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.compdfkit.conversion.flutter.example">
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
    <application
         android:label="kmpdfkit_conversion_flutter_example"
         android:name="${applicationName}"

+ 1 - 1
example/android/build.gradle

@@ -26,6 +26,6 @@ subprojects {
     project.evaluationDependsOn(':app')
 }
 
-task clean(type: Delete) {
+tasks.register("clean", Delete) {
     delete rootProject.buildDir
 }

+ 13 - 4
example/lib/main.dart

@@ -1,7 +1,16 @@
+///  main.dart
+///
+///  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 'package:flutter/material.dart';
 import 'package:kmpdfkit_conversion_flutter/cpdf_converter.dart';
 import 'package:kmpdfkit_conversion_flutter_example/states/convert_options_provider.dart';
-import 'package:kmpdfkit_conversion_flutter_example/states/convert_provider.dart';
+import 'package:kmpdfkit_conversion_flutter_example/states/convert_task_queue_provider.dart';
 import 'package:kmpdfkit_conversion_flutter_example/widgets/conversion_sdk_info_widget.dart';
 import 'package:kmpdfkit_conversion_flutter_example/widgets/convert_options_widget.dart';
 import 'package:kmpdfkit_conversion_flutter_example/widgets/convert_list_widget.dart';
@@ -56,11 +65,11 @@ class _MyHomePageState extends State<MyHomePage> {
         appBar: AppBar(
           title: Text(widget.title),
         ),
-        body: Padding(
-          padding: const EdgeInsets.all(8),
+        body: const Padding(
+          padding: EdgeInsets.all(8),
           child: Column(
             crossAxisAlignment: CrossAxisAlignment.start,
-            children: const <Widget>[
+            children: <Widget>[
               ConversionSdkInfoWidget(),//conversion sdk info widget
               ConvertConfigWidget(), //convert options widget,
               Expanded(child: ConvertListWidget())

+ 11 - 4
example/lib/models/convert_task.dart

@@ -1,4 +1,4 @@
-///  convert_bean.dart
+///  convert_task.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
 ///
@@ -7,9 +7,11 @@
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
-import 'package:kmpdfkit_conversion_flutter/models/convert_status.dart';
+import 'dart:collection';
+
 import 'package:kmpdfkit_conversion_flutter/models/convert_type.dart';
 import 'package:kmpdfkit_conversion_flutter/models/options/options.dart';
+import 'package:kmpdfkit_conversion_flutter/models/task_status.dart';
 
 
 /// convert task data
@@ -27,7 +29,7 @@ class ConvertTask {
 
   TaskStatus status;
 
-  String? outputPath;
+  String outputPath;
 
   Options options;
 
@@ -39,7 +41,12 @@ class ConvertTask {
     required this.status,
     required this.progress,
     required this.options,
-    this.outputPath,
+    required this.outputPath,
   });
 
+
+  Map<String, dynamic> toMap() {
+    HashMap<String, dynamic> map = HashMap();
+    return map;
+  }
 }

+ 20 - 10
example/lib/states/convert_provider.dart

@@ -1,4 +1,4 @@
-///  convert_provider.dart
+///  convert_task_queue_provider.dart
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
 ///
 ///  THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
@@ -8,13 +8,13 @@
 
 import 'package:flutter/material.dart';
 import 'package:kmpdfkit_conversion_flutter/cpdf_converter.dart';
-import 'package:kmpdfkit_conversion_flutter/models/convert_status.dart';
 import 'package:kmpdfkit_conversion_flutter/models/convert_type.dart';
-import 'package:kmpdfkit_conversion_flutter/models/options/convert_ppt_options.dart';
 import 'package:kmpdfkit_conversion_flutter/models/options/options.dart';
 import 'package:kmpdfkit_conversion_flutter/models/task_result.dart';
+import 'package:kmpdfkit_conversion_flutter/models/task_status.dart';
 import 'package:kmpdfkit_conversion_flutter/util/string_extensions.dart';
-import 'package:path/path.dart';
+import 'package:path/path.dart' as p;
+import 'package:path_provider/path_provider.dart';
 import 'package:uuid/uuid.dart';
 
 import '../models/convert_task.dart';
@@ -26,9 +26,12 @@ class ConvertTaskQueueProvider extends ChangeNotifier {
 
   bool _isExecuting = false;
 
+  //Whether to automatically start executing the conversion task after the task is added to the list
   bool autoTask = true;
 
-  void addTask(ConvertType convertType, Options options, List<String> files) {
+  /// add convert task to list
+  void addTask(ConvertType convertType, Options options, List<String> files,
+      String outputDir) {
     if (files.isEmpty) {
       conversionLog("pdf files is empty");
       return;
@@ -39,11 +42,12 @@ class ConvertTaskQueueProvider extends ChangeNotifier {
       ConvertTask task = ConvertTask(
           taskId: taskId,
           filePath: path,
-          fileName: basenameWithoutExtension(path),
+          fileName: p.basenameWithoutExtension(path),
           convertType: convertType,
           status: TaskStatus.wait,
           progress: 0,
-          options: options);
+          options: options,
+          outputPath: outputDir);
       _taskQueue.add(task);
       conversionLog("The task has been added to the queue");
     }
@@ -74,6 +78,7 @@ class ConvertTaskQueueProvider extends ChangeNotifier {
         taskId: task.taskId,
         filePath: task.filePath,
         convertType: task.convertType,
+        outputPath: task.outputPath,
         options: task.options,
         callback: (TaskResult result) {
           conversionLog(
@@ -90,10 +95,10 @@ class ConvertTaskQueueProvider extends ChangeNotifier {
             }
           }
         });
-
-    CPDFConverter.cancelTask()
   }
 
+  //Update the progress of the current conversion task
+
   void updateStatus(
       String taskId, int progress, TaskStatus status, String? outputPath) {
     ConvertTask bean =
@@ -101,7 +106,7 @@ class ConvertTaskQueueProvider extends ChangeNotifier {
     bean
       ..status = status
       ..progress = progress
-      ..outputPath = outputPath;
+      ..outputPath = outputPath ?? "";
     notifyListeners();
   }
 
@@ -117,4 +122,9 @@ class ConvertTaskQueueProvider extends ChangeNotifier {
       return null;
     }
   }
+
+  Future<String?> getOutputDir() async {
+    var directory = await getApplicationSupportDirectory();
+    return p.join(directory.path, "ConPDFKitConversion");
+  }
 }

+ 11 - 9
example/lib/widgets/conversion_sdk_info_widget.dart

@@ -1,6 +1,3 @@
-import 'package:flutter/material.dart';
-import 'package:kmpdfkit_conversion_flutter/cpdf_converter.dart';
-
 ///  conversion_sdk_info_widget.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -10,6 +7,12 @@ import 'package:kmpdfkit_conversion_flutter/cpdf_converter.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'package:flutter/material.dart';
+import 'package:kmpdfkit_conversion_flutter/cpdf_converter.dart';
+import 'package:provider/provider.dart';
+
+import '../states/convert_task_queue_provider.dart';
+
 class ConversionSdkInfoWidget extends StatefulWidget {
   const ConversionSdkInfoWidget({Key? key}) : super(key: key);
 
@@ -31,12 +34,11 @@ class _ConversionSdkInfoWidgetState extends State<ConversionSdkInfoWidget> {
         conversionSDKVersion = "Version:$value";
       });
     });
-
-    CPDFConverter.getOutputPath().then((value) => {
-          setState(() {
-            convertFileOutputPath = value;
-          })
-        });
+    context.read<ConvertTaskQueueProvider>().getOutputDir().then((value) {
+      setState(() {
+        convertFileOutputPath = value ?? "";
+      });
+    });
   }
 
   @override

+ 8 - 10
example/lib/widgets/convert_list_widget.dart

@@ -1,12 +1,3 @@
-import 'package:flutter/material.dart';
-import 'package:kmpdfkit_conversion_flutter/cpdf_converter.dart';
-import 'package:kmpdfkit_conversion_flutter/models/convert_status.dart';
-import 'package:open_file/open_file.dart';
-import 'package:provider/provider.dart';
-
-import '../models/convert_task.dart';
-import '../states/convert_provider.dart';
-
 ///  convert_list_widget.dart
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
 ///
@@ -15,6 +6,14 @@ import '../states/convert_provider.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'package:flutter/material.dart';
+import 'package:kmpdfkit_conversion_flutter/models/task_status.dart';
+import 'package:open_file/open_file.dart';
+import 'package:provider/provider.dart';
+
+import '../models/convert_task.dart';
+import '../states/convert_task_queue_provider.dart';
+
 class ConvertListWidget extends StatefulWidget {
   const ConvertListWidget({Key? key}) : super(key: key);
 
@@ -33,7 +32,6 @@ class _ConvertListWidgetState extends State<ConvertListWidget> {
       shrinkWrap: true,
       physics: const ClampingScrollPhysics(),
       itemBuilder: (BuildContext context, int index) {
-        //设置子条目
         return Builder(builder: (context) {
           ConvertTask bean =
               context.select<ConvertTaskQueueProvider, ConvertTask>(

+ 17 - 12
example/lib/widgets/convert_options_widget.dart

@@ -1,3 +1,12 @@
+///  convert_options_widget.dart
+///
+///  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 'package:file_picker/file_picker.dart';
 import 'package:flutter/material.dart';
 import 'package:kmpdfkit_conversion_flutter/models/convert_type.dart';
@@ -6,7 +15,7 @@ import 'package:permission_handler/permission_handler.dart';
 import 'package:provider/provider.dart';
 
 import '../states/convert_options_provider.dart';
-import '../states/convert_provider.dart';
+import '../states/convert_task_queue_provider.dart';
 import 'options/convert_csv_options_widget.dart';
 import 'options/convert_excel_options_widget.dart';
 import 'options/convert_html_options_widget.dart';
@@ -15,14 +24,7 @@ import 'options/convert_ppt_options_widget.dart';
 import 'options/convert_rtf_options_widget.dart';
 import 'options/convert_word_options_widget.dart';
 
-///  convert_options_widget.dart
-///
-///  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.
+
 
 class ConvertConfigWidget extends StatefulWidget {
   const ConvertConfigWidget({Key? key}) : super(key: key);
@@ -74,9 +76,11 @@ class _ConvertConfigWidgetState extends State<ConvertConfigWidget> {
                         context.read<ConvertOptionsProvider>().getOptions();
 
                     List<String> files = await getPDFFileList(context);
-                    context
+                    var outputPath = await context
                         .read<ConvertTaskQueueProvider>()
-                        .addTask(convertType, options, files);
+                        .getOutputDir();
+                    context.read<ConvertTaskQueueProvider>().addTask(
+                        convertType, options, files, outputPath ?? "");
                   }
                 },
                 child: const Text('Convert')))
@@ -87,7 +91,8 @@ class _ConvertConfigWidgetState extends State<ConvertConfigWidget> {
   ///request storage permission
   Future<bool> getPermission() async {
     var status = await Permission.storage.request();
-    return status.isGranted;
+    var manageStatus = await Permission.manageExternalStorage.request();
+    return status.isGranted && manageStatus.isGranted;
   }
 
   ///Select pdf files from android\ios using 'file_picker'

+ 5 - 7
example/lib/widgets/options/convert_csv_options_widget.dart

@@ -1,10 +1,3 @@
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-
-import '../../states/convert_options_provider.dart';
-
-
-
 ///  convert_csv_options_widget.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -14,6 +7,11 @@ import '../../states/convert_options_provider.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+
+import '../../states/convert_options_provider.dart';
+
 class ConvertCSVOptionsWidget extends StatefulWidget {
   const ConvertCSVOptionsWidget({Key? key}) : super(key: key);
 

+ 55 - 52
example/lib/widgets/options/convert_excel_options_widget.dart

@@ -1,10 +1,3 @@
-import 'package:flutter/material.dart';
-import 'package:kmpdfkit_conversion_flutter/models/options/convert_excel_options.dart';
-import 'package:provider/provider.dart';
-
-import '../../states/convert_options_provider.dart';
-
-
 ///  convert_excel_options_widget.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -14,6 +7,12 @@ import '../../states/convert_options_provider.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'package:flutter/material.dart';
+import 'package:kmpdfkit_conversion_flutter/models/options/convert_excel_options.dart';
+import 'package:provider/provider.dart';
+
+import '../../states/convert_options_provider.dart';
+
 class ConvertExcelOptionsWidget extends StatefulWidget {
   const ConvertExcelOptionsWidget({Key? key}) : super(key: key);
 
@@ -30,49 +29,51 @@ class _ConvertExcelOptionsWidgetState extends State<ConvertExcelOptionsWidget> {
     bool containAnnotations = context.select<ConvertOptionsProvider, bool>(
         (value) => value.excelOptions.containAnnotations);
 
-    return SingleChildScrollView(child: Padding(
-        padding: const EdgeInsets.all(8),
-        child: Column(
-          crossAxisAlignment: CrossAxisAlignment.start,
-          children: [
-            Row(
-              mainAxisAlignment: MainAxisAlignment.spaceBetween,
-              children: [
-                const Text('ContainImages'),
-                Switch(
-                    value: containImages,
-                    onChanged: (value) {
-                      context
-                          .read<ConvertOptionsProvider>()
-                          .changeExcelOptions(containImages: value);
-                    })
-              ],
-            ),
-            Row(
-              mainAxisAlignment: MainAxisAlignment.spaceBetween,
-              children: [
-                const Text('ContainAnnotations'),
-                Switch(
-                    value: containAnnotations,
-                    onChanged: (value) {
-                      context
-                          .read<ConvertOptionsProvider>()
-                          .changeExcelOptions(containAnnotations: value);
-                    })
-              ],
-            ),
-            excelWorkSheetOptions((value) {
-              context
-                  .read<ConvertOptionsProvider>()
-                  .changeExcelOptions(workSheetOptions: value);
-            }),
-            excelContentOptions((value) {
-              context
-                  .read<ConvertOptionsProvider>()
-                  .changeExcelOptions(contentOptions: value);
-            })
-          ],
-        )),);
+    return SingleChildScrollView(
+      child: Padding(
+          padding: const EdgeInsets.all(8),
+          child: Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: [
+                  const Text('ContainImages'),
+                  Switch(
+                      value: containImages,
+                      onChanged: (value) {
+                        context
+                            .read<ConvertOptionsProvider>()
+                            .changeExcelOptions(containImages: value);
+                      })
+                ],
+              ),
+              Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: [
+                  const Text('ContainAnnotations'),
+                  Switch(
+                      value: containAnnotations,
+                      onChanged: (value) {
+                        context
+                            .read<ConvertOptionsProvider>()
+                            .changeExcelOptions(containAnnotations: value);
+                      })
+                ],
+              ),
+              excelWorkSheetOptions((value) {
+                context
+                    .read<ConvertOptionsProvider>()
+                    .changeExcelOptions(workSheetOptions: value);
+              }),
+              excelContentOptions((value) {
+                context
+                    .read<ConvertOptionsProvider>()
+                    .changeExcelOptions(contentOptions: value);
+              })
+            ],
+          )),
+    );
   }
 
   Widget excelWorkSheetOptions(ValueChanged<ExcelWorkSheetOptions> onChanged) {
@@ -124,8 +125,10 @@ class _ConvertExcelOptionsWidgetState extends State<ConvertExcelOptionsWidget> {
     );
   }
 
-  Widget _excelContentOptionsItem(ExcelContentOptions currentOptions,
-      ExcelContentOptions options, ValueChanged<ExcelContentOptions> onChanged) {
+  Widget _excelContentOptionsItem(
+      ExcelContentOptions currentOptions,
+      ExcelContentOptions options,
+      ValueChanged<ExcelContentOptions> onChanged) {
     return CheckboxListTile(
         controlAffinity: ListTileControlAffinity.leading,
         title: Text(options.name),

+ 6 - 6
example/lib/widgets/options/convert_html_options_widget.dart

@@ -1,9 +1,3 @@
-import 'package:flutter/material.dart';
-import 'package:kmpdfkit_conversion_flutter/models/options/convert_html_options.dart';
-import 'package:provider/provider.dart';
-
-import '../../states/convert_options_provider.dart';
-
 ///  convert_html_options_widget.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -13,6 +7,12 @@ import '../../states/convert_options_provider.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'package:flutter/material.dart';
+import 'package:kmpdfkit_conversion_flutter/models/options/convert_html_options.dart';
+import 'package:provider/provider.dart';
+
+import '../../states/convert_options_provider.dart';
+
 class ConvertHtmlOptionsWidget extends StatefulWidget {
   const ConvertHtmlOptionsWidget({Key? key}) : super(key: key);
 

+ 9 - 7
example/lib/widgets/options/convert_image_options_widget.dart

@@ -1,10 +1,3 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-import 'package:kmpdfkit_conversion_flutter/models/options/convert_image_options.dart';
-import 'package:provider/provider.dart';
-
-import '../../states/convert_options_provider.dart';
-
 ///  convert_image_options_widget.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -14,6 +7,15 @@ import '../../states/convert_options_provider.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:kmpdfkit_conversion_flutter/models/options/convert_image_options.dart';
+import 'package:provider/provider.dart';
+
+import '../../states/convert_options_provider.dart';
+
+
+
 class ConvertImageOptionsWidget extends StatefulWidget {
   const ConvertImageOptionsWidget({Key? key}) : super(key: key);
 

+ 5 - 5
example/lib/widgets/options/convert_ppt_options_widget.dart

@@ -1,8 +1,3 @@
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-
-import '../../states/convert_options_provider.dart';
-
 ///  convert_ppt_options_widget.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -12,6 +7,11 @@ import '../../states/convert_options_provider.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+
+import '../../states/convert_options_provider.dart';
+
 class ConvertPPTOptionsWidget extends StatefulWidget {
   const ConvertPPTOptionsWidget({Key? key}) : super(key: key);
 

+ 5 - 5
example/lib/widgets/options/convert_rtf_options_widget.dart

@@ -1,8 +1,3 @@
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-
-import '../../states/convert_options_provider.dart';
-
 ///  convert_rtf_options_widget.dart
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
 ///
@@ -11,6 +6,11 @@ import '../../states/convert_options_provider.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+
+import '../../states/convert_options_provider.dart';
+
 class ConvertRTFOptionsWidget extends StatefulWidget {
   const ConvertRTFOptionsWidget({Key? key}) : super(key: key);
 

+ 24 - 14
example/lib/widgets/options/convert_word_options_widget.dart

@@ -1,9 +1,3 @@
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-
-import '../../states/convert_options_provider.dart';
-
-
 ///  convert_word_options_widget.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -12,6 +6,12 @@ import '../../states/convert_options_provider.dart';
 ///  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 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+
+import '../../states/convert_options_provider.dart';
+
 class ConvertWordOptionsWidget extends StatefulWidget {
   const ConvertWordOptionsWidget({Key? key}) : super(key: key);
 
@@ -23,8 +23,10 @@ class ConvertWordOptionsWidget extends StatefulWidget {
 class _ConvertWordOptionsWidgetState extends State<ConvertWordOptionsWidget> {
   @override
   Widget build(BuildContext context) {
-    bool containImages = context.select<ConvertOptionsProvider, bool>((value) => value.wordOptions.containImages);
-    bool containAnnotations = context.select<ConvertOptionsProvider, bool>((value) => value.wordOptions.containAnnotations);
+    bool containImages = context.select<ConvertOptionsProvider, bool>(
+        (value) => value.wordOptions.containImages);
+    bool containAnnotations = context.select<ConvertOptionsProvider, bool>(
+        (value) => value.wordOptions.containAnnotations);
     return Padding(
         padding: const EdgeInsets.all(8),
         child: Column(
@@ -34,18 +36,26 @@ class _ConvertWordOptionsWidgetState extends State<ConvertWordOptionsWidget> {
               mainAxisAlignment: MainAxisAlignment.spaceBetween,
               children: [
                 const Text('ContainImages'),
-                Switch(value: containImages, onChanged: (value) {
-                  context.read<ConvertOptionsProvider>().changeWordOptions(containImages: value);
-                })
+                Switch(
+                    value: containImages,
+                    onChanged: (value) {
+                      context
+                          .read<ConvertOptionsProvider>()
+                          .changeWordOptions(containImages: value);
+                    })
               ],
             ),
             Row(
               mainAxisAlignment: MainAxisAlignment.spaceBetween,
               children: [
                 const Text('ContainAnnotations'),
-                Switch(value: containAnnotations, onChanged: (value) {
-                  context.read<ConvertOptionsProvider>().changeWordOptions(containAnnotations: value);
-                })
+                Switch(
+                    value: containAnnotations,
+                    onChanged: (value) {
+                      context
+                          .read<ConvertOptionsProvider>()
+                          .changeWordOptions(containAnnotations: value);
+                    })
               ],
             )
           ],

+ 130 - 26
example/pubspec.lock

@@ -5,10 +5,10 @@ packages:
     dependency: transitive
     description:
       name: async
-      sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
+      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
       url: "https://pub.dev"
     source: hosted
-    version: "2.10.0"
+    version: "2.11.0"
   boolean_selector:
     dependency: transitive
     description:
@@ -21,10 +21,10 @@ packages:
     dependency: transitive
     description:
       name: characters
-      sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
+      sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
       url: "https://pub.dev"
     source: hosted
-    version: "1.2.1"
+    version: "1.3.0"
   clock:
     dependency: transitive
     description:
@@ -37,10 +37,10 @@ packages:
     dependency: transitive
     description:
       name: collection
-      sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
+      sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
       url: "https://pub.dev"
     source: hosted
-    version: "1.17.0"
+    version: "1.17.1"
   crypto:
     dependency: transitive
     description:
@@ -57,6 +57,22 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.0.5"
+  device_info_plus:
+    dependency: "direct main"
+    description:
+      name: device_info_plus
+      sha256: "2c35b6d1682b028e42d07b3aee4b98fa62996c10bc12cb651ec856a80d6a761b"
+      url: "https://pub.dev"
+    source: hosted
+    version: "9.0.2"
+  device_info_plus_platform_interface:
+    dependency: transitive
+    description:
+      name: device_info_plus_platform_interface
+      sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
+      url: "https://pub.dev"
+    source: hosted
+    version: "7.0.0"
   fake_async:
     dependency: transitive
     description:
@@ -69,18 +85,26 @@ packages:
     dependency: "direct overridden"
     description:
       name: ffi
-      sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978
+      sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99
       url: "https://pub.dev"
     source: hosted
-    version: "2.0.1"
+    version: "2.0.2"
+  file:
+    dependency: transitive
+    description:
+      name: file
+      sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
+      url: "https://pub.dev"
+    source: hosted
+    version: "6.1.4"
   file_picker:
     dependency: "direct main"
     description:
       name: file_picker
-      sha256: "0d923fb610d0abf67f2149c3a50ef85f78bebecfc4d645719ca70bcf4abc788f"
+      sha256: "9d6e95ec73abbd31ec54d0e0df8a961017e165aba1395e462e5b31ea0c165daf"
       url: "https://pub.dev"
     source: hosted
-    version: "5.2.7"
+    version: "5.3.1"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -116,10 +140,10 @@ packages:
     dependency: transitive
     description:
       name: js
-      sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
+      sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
       url: "https://pub.dev"
     source: hosted
-    version: "0.6.5"
+    version: "0.6.7"
   kmpdfkit_conversion_flutter:
     dependency: "direct main"
     description:
@@ -139,10 +163,10 @@ packages:
     dependency: transitive
     description:
       name: matcher
-      sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
+      sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
       url: "https://pub.dev"
     source: hosted
-    version: "0.12.13"
+    version: "0.12.15"
   material_color_utilities:
     dependency: transitive
     description:
@@ -155,10 +179,10 @@ packages:
     dependency: transitive
     description:
       name: meta
-      sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
+      sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
       url: "https://pub.dev"
     source: hosted
-    version: "1.8.0"
+    version: "1.9.1"
   nested:
     dependency: transitive
     description:
@@ -171,18 +195,66 @@ packages:
     dependency: "direct main"
     description:
       name: open_file
-      sha256: "5cd0288033d613ee7908aa974b7ff00805ae55d253f64d311603cf2e30613ca8"
+      sha256: a5a32d44acb7c899987d0999e1e3cbb0a0f1adebbf41ac813ec6d2d8faa0af20
       url: "https://pub.dev"
     source: hosted
-    version: "3.2.1"
+    version: "3.3.2"
   path:
     dependency: transitive
     description:
       name: path
-      sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
+      sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.8.3"
+  path_provider:
+    dependency: "direct main"
+    description:
+      name: path_provider
+      sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.0.15"
+  path_provider_android:
+    dependency: transitive
+    description:
+      name: path_provider_android
+      sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.0.27"
+  path_provider_foundation:
+    dependency: transitive
+    description:
+      name: path_provider_foundation
+      sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.2.3"
+  path_provider_linux:
+    dependency: transitive
+    description:
+      name: path_provider_linux
+      sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.1.11"
+  path_provider_platform_interface:
+    dependency: transitive
+    description:
+      name: path_provider_platform_interface
+      sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
       url: "https://pub.dev"
     source: hosted
-    version: "1.8.2"
+    version: "2.0.6"
+  path_provider_windows:
+    dependency: transitive
+    description:
+      name: path_provider_windows
+      sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.1.7"
   permission_handler:
     dependency: "direct main"
     description:
@@ -223,6 +295,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "0.1.2"
+  platform:
+    dependency: transitive
+    description:
+      name: platform
+      sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
+      url: "https://pub.dev"
+    source: hosted
+    version: "3.1.0"
   plugin_platform_interface:
     dependency: transitive
     description:
@@ -231,6 +311,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.1.4"
+  process:
+    dependency: transitive
+    description:
+      name: process
+      sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
+      url: "https://pub.dev"
+    source: hosted
+    version: "4.2.4"
   provider:
     dependency: "direct main"
     description:
@@ -288,10 +376,10 @@ packages:
     dependency: transitive
     description:
       name: test_api
-      sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
+      sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
       url: "https://pub.dev"
     source: hosted
-    version: "0.4.16"
+    version: "0.5.1"
   typed_data:
     dependency: transitive
     description:
@@ -320,10 +408,26 @@ packages:
     dependency: transitive
     description:
       name: win32
-      sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46
+      sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c"
+      url: "https://pub.dev"
+    source: hosted
+    version: "4.1.4"
+  win32_registry:
+    dependency: transitive
+    description:
+      name: win32_registry
+      sha256: "1c52f994bdccb77103a6231ad4ea331a244dbcef5d1f37d8462f713143b0bfae"
       url: "https://pub.dev"
     source: hosted
-    version: "3.1.3"
+    version: "1.1.0"
+  xdg_directories:
+    dependency: transitive
+    description:
+      name: xdg_directories
+      sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.0.0"
 sdks:
-  dart: ">=2.19.6 <3.0.0"
-  flutter: ">=3.0.0"
+  dart: ">=3.0.0-0 <4.0.0"
+  flutter: ">=3.3.0"

+ 3 - 1
example/pubspec.yaml

@@ -30,9 +30,11 @@ dependencies:
   cupertino_icons: ^1.0.2
   file_picker: ^5.2.5
   provider: ^6.0.5
-  open_file: ^3.2.1
+  open_file: ^3.3.2
   permission_handler: ^10.2.0
   uuid: ^3.0.6
+  device_info_plus: ^9.0.2
+  path_provider: ^2.0.15
 
 dev_dependencies:
   flutter_test:

+ 13 - 3
lib/cpdf_converter.dart

@@ -1,4 +1,4 @@
-///  convert_sdk_info_flutter.dart
+///  cpdf_converter.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
 ///
@@ -11,10 +11,10 @@ import 'dart:collection';
 
 import 'package:flutter/services.dart';
 import 'package:kmpdfkit_conversion_flutter/models/task_result.dart';
-
-import 'models/convert_status.dart';
+import 'models/task_status.dart';
 import 'models/convert_type.dart';
 import 'models/options/options.dart';
+import 'package:path/path.dart' as p;
 
 typedef TaskResultCallback = Function(TaskResult result);
 
@@ -51,16 +51,26 @@ class CPDFConverter {
     return outPutPath;
   }
 
+  /// Submit the conversion task
+  /// taskId : unique value
+  /// filePath : PDF file path
+  /// password : pdf file password
+  /// convertType : Converted format type
   static convert(
       {required String taskId,
       required String filePath,
+      String password = "",
       required ConvertType convertType,
+      required String outputPath,
       required Options options,
       required TaskResultCallback callback}) {
     HashMap<String, dynamic> map = HashMap();
     map['convertType'] = convertType.name;
     map['filePath'] = filePath;
     map['taskId'] = taskId;
+    map['outputDir'] = outputPath;
+    map['fileName'] = p.basenameWithoutExtension(filePath);
+    map["password"] = password;
     map.addAll(options.map);
     _channel.receiveBroadcastStream(map).listen((event) {
       Map<dynamic, dynamic> result = event;

+ 0 - 3
lib/models/convert_type.dart

@@ -1,4 +1,3 @@
-
 ///  convert_type.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -9,7 +8,6 @@
 ///  This notice may not be removed from this file.
 
 enum ConvertType{
-
   word,
   ppt,
   excel,
@@ -19,5 +17,4 @@ enum ConvertType{
   rtf,
   html,
   none,
-
 }

+ 5 - 2
lib/models/options/convert_csv_options.dart

@@ -1,5 +1,3 @@
-import 'options.dart';
-
 ///  convert_csv_options.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -9,7 +7,12 @@ import 'options.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'options.dart';
+
+
+/// Convert pdf to csv format parameters
 class ConvertCSVOptions extends Options {
+
   bool mergeCSV;
 
   ConvertCSVOptions({this.mergeCSV = true}) : super() {

+ 7 - 4
lib/models/options/convert_excel_options.dart

@@ -1,7 +1,3 @@
-import 'package:kmpdfkit_conversion_flutter/util/string_extensions.dart';
-
-import 'options.dart';
-
 ///  convert_excel_options.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -11,10 +7,17 @@ import 'options.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'package:kmpdfkit_conversion_flutter/util/string_extensions.dart';
+import 'options.dart';
+
+/// Convert pdf to xlsx format parameters
 class ConvertExcelOptions extends Options {
   bool containImages;
+
   bool containAnnotations;
+
   ExcelWorkSheetOptions workSheetOptions;
+
   ExcelContentOptions contentOptions;
 
   ConvertExcelOptions(

+ 12 - 9
lib/models/options/convert_html_options.dart

@@ -1,8 +1,4 @@
-import 'package:kmpdfkit_conversion_flutter/util/string_extensions.dart';
-
-import 'options.dart';
-
-///  convert_rtf_options.dart
+///  convert_html_options.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
 ///
@@ -11,19 +7,26 @@ import 'options.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
-class ConvertHTMLOptions extends Options {
+import 'package:kmpdfkit_conversion_flutter/util/string_extensions.dart';
+import 'options.dart';
 
+/// Convert pdf to html format parameters
+class ConvertHTMLOptions extends Options {
   bool containImages;
+
   bool containAnnotations;
+
   HtmlPageOptions htmlPageOptions;
 
-  ConvertHTMLOptions({this.containImages = true, this.containAnnotations = false,
-  this.htmlPageOptions = HtmlPageOptions.singlePage}) :super(){
+  ConvertHTMLOptions(
+      {this.containImages = true,
+      this.containAnnotations = false,
+      this.htmlPageOptions = HtmlPageOptions.singlePage})
+      : super() {
     map['containImages'] = containImages;
     map['containAnnotations'] = containAnnotations;
     map['htmlPageOptions'] = htmlPageOptions.name.capitalize();
   }
-
 }
 
 enum HtmlPageOptions {

+ 6 - 4
lib/models/options/convert_image_options.dart

@@ -1,7 +1,3 @@
-import 'package:kmpdfkit_conversion_flutter/util/string_extensions.dart';
-
-import 'options.dart';
-
 ///  convert_image_options.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -11,9 +7,15 @@ import 'options.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
+import 'package:kmpdfkit_conversion_flutter/util/string_extensions.dart';
+import 'options.dart';
+
+/// Convert pdf to image format parameters
 class ConvertImageOptions extends Options {
   bool containAnnotations;
+
   int imageDpi;
+
   ImagePageOptions imagePageOptions;
 
   ConvertImageOptions(

+ 7 - 8
lib/models/options/convert_ppt_options.dart

@@ -1,6 +1,3 @@
-
-import 'options.dart';
-
 ///  convert_ppt_options.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -10,15 +7,17 @@ import 'options.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
-class ConvertPPTOptions extends Options {
+import 'options.dart';
 
+/// Convert pdf to pptx format parameters
+class ConvertPPTOptions extends Options {
   bool containImages;
+
   bool containAnnotations;
 
-  ConvertPPTOptions({this.containImages = true, this.containAnnotations = true}) :super(){
+  ConvertPPTOptions({this.containImages = true, this.containAnnotations = true})
+      : super() {
     map['containImages'] = containImages;
     map['containAnnotations'] = containAnnotations;
   }
-
-
-}
+}

+ 7 - 7
lib/models/options/convert_rtf_options.dart

@@ -1,5 +1,3 @@
-import 'options.dart';
-
 ///  convert_rtf_options.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -9,15 +7,17 @@ import 'options.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
-class ConvertRTFOptions extends Options {
+import 'options.dart';
 
+/// Convert pdf to rtf format parameters
+class ConvertRTFOptions extends Options {
   bool containImages;
+
   bool containAnnotations;
 
-  ConvertRTFOptions({this.containImages = true, this.containAnnotations = true}) :super(){
+  ConvertRTFOptions({this.containImages = true, this.containAnnotations = true})
+      : super() {
     map['containImages'] = containImages;
     map['containAnnotations'] = containAnnotations;
   }
-
-
-}
+}

+ 4 - 7
lib/models/options/convert_txt_options.dart

@@ -1,5 +1,3 @@
-import 'options.dart';
-
 ///  convert_txt_options.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -9,10 +7,9 @@ import 'options.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
-class ConvertTXTOptions extends Options {
-
+import 'options.dart';
 
+/// Convert pdf to txt format parameters
+class ConvertTXTOptions extends Options {
   ConvertTXTOptions();
-
-
-}
+}

+ 8 - 8
lib/models/options/convert_word_options.dart

@@ -1,6 +1,3 @@
-
-import 'options.dart';
-
 ///  convert_word_options.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
@@ -10,15 +7,18 @@ import 'options.dart';
 ///  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 ///  This notice may not be removed from this file.
 
-class ConvertWordOptions extends Options {
+import 'options.dart';
 
+/// Convert pdf to docx format parameters
+class ConvertWordOptions extends Options {
   bool containImages;
+
   bool containAnnotations;
 
-  ConvertWordOptions({this.containImages = true, this.containAnnotations = true}) :super(){
+  ConvertWordOptions(
+      {this.containImages = true, this.containAnnotations = true})
+      : super() {
     map['containImages'] = containImages;
     map['containAnnotations'] = containAnnotations;
   }
-
-
-}
+}

+ 9 - 0
lib/models/options/options.dart

@@ -1,3 +1,12 @@
+///  options.dart
+///
+///  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 'dart:collection';
 
 class Options {

+ 10 - 3
lib/models/task_result.dart

@@ -1,6 +1,13 @@
-
-
-import 'package:kmpdfkit_conversion_flutter/models/convert_status.dart';
+///  task_result.dart
+///
+///  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 'package:kmpdfkit_conversion_flutter/models/task_status.dart';
 
 class TaskResult{
 

+ 1 - 1
lib/models/convert_status.dart

@@ -1,4 +1,4 @@
-///  convert_status.dart
+///  task_status.dart
 ///
 ///  Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
 ///

+ 8 - 0
lib/util/string_extensions.dart

@@ -1,3 +1,11 @@
+///  string_extensions.dart
+///
+///  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 'package:flutter/foundation.dart';