Browse Source

compdfkit(rn) - android 1.12.0 更改

liuxiaolong 1 year ago
parent
commit
ee364c35c4

+ 73 - 113
App.tsx

@@ -1,121 +1,81 @@
 /**
- * Sample React Native App
- * https://github.com/facebook/react-native
- * @flow
+ * 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 React, { Component } from 'react';
- import {
-   Platform,
-   StyleSheet,
-   Text,
-   View,
-   Button,
-   NativeModules
- } from 'react-native';
+import React, { Component } from 'react';
+import configuration from './assets/configuration.json';
+import {
+  Platform,
+  StyleSheet,
+  Text,
+  View,
+  Button,
+  NativeModules
+} from 'react-native';
 
- var nativeModule = NativeModules.OpenNativeModule;
- // var analyticsModule = NativeModules.UMAnalyticsModule;
 
- const instructions = Platform.select({
-   ios: 'Press Cmd+R to reload,\n' +
-     'Cmd+D or shake for dev menu',
-   android: 'Double tap R on your keyboard to reload,\n' +
-     'Shake or press menu button for dev menu',
- });
+const instructions = Platform.select({
+  ios: 'Press Cmd+R to reload,\n' +
+    'Cmd+D or shake for dev menu',
+  android: 'Double tap R on your keyboard to reload,\n' +
+    'Shake or press menu button for dev menu',
+});
 
 
+type Props = {};
+export default class App extends Component<Props> {
+  render() {
+    return (
+      <View style={styles.container}>
+        <Text style={styles.welcome}>
+          Welcome to React Native!
+        </Text>
+        <Text style={styles.instructions}>
+          To get started, edit App.tsx
+        </Text>
+        <Text style={styles.instructions}>
+          {instructions}
+        </Text>
+        <Button
+          title={'Jump to the native page'}
+          onPress={() => {
+            this.jumpToNativeView();
+          }}
+        />
+      </View>
+    );
+  }
 
- // set disable functionality:
- const configuration = {
-                         "modeConfig": {
-                           // setting the default display mode when opening
-                           // viewer、annotations、contentEditor、forms、digitalSignatures
-                           "initialViewMode": "viewer"
-                         },
-                         // top toolbar configuration:
-                         "toolbarConfig": {
-                           "androidAvailableActions": [
-                             "thumbnail",
-                             "search",
-                             "bota",
-                             "menu"
-                           ],
-                           // ios top toolbar left buttons
-                           "iosLeftBarAvailableActions":[
-                             "back",
-                             "thumbnail"
-                           ],
-                           // ios top toolbar right buttons
-                           "iosRightBarAvailableActions":[
-                             "search",
-                             "bota",
-                             "menu"
-                           ],
-                           "availableMenus": [
-                             "viewSettings",
-                             "documentEditor",
-                             "security",
-                             "watermark",
-                             "documentInfo",
-                             "save",
-                             "share",
-                             "openDocument"
-                           ]
-                         },
-                         // readerView configuration
-                         "readerViewConfig": {
-                           "linkHighlight": true,
-                           "formFieldHighlight": true
-                         }
-                       };
- 
- type Props = {};
- export default class App extends Component<Props> {
-   render() {
-     return (
-       <View style={styles.container}>
-         <Text style={styles.welcome}>
-           Welcome to React Native!
-         </Text>
-         <Text style={styles.instructions}>
-           To get started, edit App.js
-         </Text>
-         <Text style={styles.instructions}>
-           {instructions}
-         </Text>
-         <Button
-           title={'Jump to the native page'}
-           onPress={() => {
-             this.jumpToNativeView();
-           }}
-         />
-       </View>
-     );
-   }
-   
-   jumpToNativeView() {
-        NativeModules.OpenPDFModule.openPDF(JSON.stringify(configuration))
-        // NativeModules.OpenPDFModule.openPDFByConfiguration(filePath, password, JSON.stringify(configuration))
-   }
- }
- 
- const styles = StyleSheet.create({
-   container: {
-     flex: 1,
-     justifyContent: 'center',
-     alignItems: 'center',
-     backgroundColor: '#F5FCFF',
-   },
-   welcome: {
-     fontSize: 20,
-     textAlign: 'center',
-     margin: 10,
-   },
-   instructions: {
-     textAlign: 'center',
-     color: '#333333',
-     marginBottom: 5,
-   },
- });
- 
+  jumpToNativeView() {
+    NativeModules.OpenPDFModule.openPDF(JSON.stringify(configuration))
+
+    // NativeModules.OpenPDFModule.openPDFByConfiguration(filePath, password, JSON.stringify(configuration))
+
+    // only android platform
+    // NativeModules.OpenPDFModule.openPDFByUri(uriString, password, JSON.stringify(configuration))
+  }
+}
+
+const styles = StyleSheet.create({
+  container: {
+    flex: 1,
+    justifyContent: 'center',
+    alignItems: 'center',
+    backgroundColor: '#F5FCFF',
+  },
+  welcome: {
+    fontSize: 20,
+    textAlign: 'center',
+    margin: 10,
+  },
+  instructions: {
+    textAlign: 'center',
+    color: '#333333',
+    marginBottom: 5,
+  },
+});

+ 3 - 6
android/app/build.gradle

@@ -101,9 +101,6 @@ android {
             proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
         }
     }
-    buildFeatures {
-        viewBinding = true
-    }
 }
 
 dependencies {
@@ -114,9 +111,9 @@ dependencies {
     implementation "com.facebook.react:react-native:+"  // From node_modules
     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
 
-    api 'com.compdf:compdfkit:1.11.0'
-    api 'com.compdf:compdfkit-ui:1.11.0'
-    api 'com.compdf:compdfkit-tools:1.11.0'
+//    api 'com.compdf:compdfkit:1.11.0'
+//    api 'com.compdf:compdfkit-ui:1.11.0'
+//    api 'com.compdf:compdfkit-tools:1.11.0'
 
     api 'com.github.bumptech.glide:glide:4.15.1'
     annotationProcessor 'com.github.bumptech.glide:compiler:4.15.1'

BIN
android/app/libs/ComPDFKit-UI.aar


BIN
android/app/libs/ComPDFKit.aar


BIN
android/app/libs/ComPDFKit_Tools-release.aar


File diff suppressed because it is too large
+ 19 - 24
android/app/src/main/AndroidManifest.xml


+ 0 - 124
android/app/src/main/java/com/compdfkit/pdfviewer/pdf/CPDFConfiguration.java

@@ -1,124 +0,0 @@
-/**
- * Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
- * <p>
- * 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.pdfviewer.pdf;
-
-import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
-
-import java.io.Serializable;
-import java.util.List;
-
-
-public class CPDFConfiguration implements Serializable {
-
-    public ModeConfig modeConfig = new ModeConfig();
-
-    public ToolbarConfig toolbarConfig = new ToolbarConfig();
-
-    public ReaderViewConfig readerViewConfig = new ReaderViewConfig();
-
-    public static class ModeConfig implements Serializable {
-
-        public ModeConfig() {
-
-        }
-
-        public ModeConfig(CPreviewMode initialViewMode) {
-            this.initialViewMode = initialViewMode;
-        }
-
-        public CPreviewMode initialViewMode = CPreviewMode.Viewer;
-
-    }
-
-    public static class ToolbarConfig implements Serializable {
-
-        public ToolbarConfig() {
-
-        }
-
-        public enum ToolbarAction {
-            Back,
-            Thumbnail,
-            Search,
-            Bota,
-            Menu;
-
-            public static ToolbarAction fromString(String str) {
-                try {
-                    String firstLetter = str.substring(0, 1).toUpperCase();
-                    String result = firstLetter + str.substring(1);
-
-                    return ToolbarAction.valueOf(result);
-
-                } catch (Exception e) {
-                    return null;
-                }
-            }
-        }
-
-        public enum MenuAction {
-            ViewSettings,
-            DocumentEditor,
-            Security,
-            Watermark,
-            DocumentInfo,
-            Save,
-            Share,
-            OpenDocument;
-
-            public static MenuAction fromString(String str) {
-                try {
-                    String firstLetter = str.substring(0, 1).toUpperCase();
-                    String result = firstLetter + str.substring(1);
-                    return MenuAction.valueOf(result);
-                } catch (Exception e) {
-                    return null;
-                }
-            }
-        }
-
-        public List<ToolbarAction> androidAvailableActions;
-
-        public List<MenuAction> availableMenus;
-
-    }
-
-    public static class ReaderViewConfig implements Serializable {
-
-        public boolean linkHighlight;
-
-        public boolean formFieldHighlight;
-
-    }
-
-    public static class Builder {
-
-        CPDFConfiguration configuration = new CPDFConfiguration();
-
-        public Builder setModeConfig(ModeConfig modeConfig) {
-            configuration.modeConfig = modeConfig;
-            return this;
-        }
-
-        public Builder setToolbarConfig(ToolbarConfig toolbarConfig) {
-            configuration.toolbarConfig = toolbarConfig;
-            return this;
-        }
-
-        public Builder setReaderViewConfig(ReaderViewConfig readerViewConfig) {
-            configuration.readerViewConfig = readerViewConfig;
-            return this;
-        }
-
-        public CPDFConfiguration create() {
-            return configuration;
-        }
-    }
-}

+ 0 - 110
android/app/src/main/java/com/compdfkit/pdfviewer/pdf/CPDFConfigurationUtils.java

@@ -1,110 +0,0 @@
-/**
- * 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.pdfviewer.pdf;
-
-
-import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
-
-import org.json.JSONArray;
-import org.json.JSONObject;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class CPDFConfigurationUtils {
-
-
-    public static CPDFConfiguration normalConfig(){
-        CPDFConfiguration.Builder builder = new CPDFConfiguration.Builder()
-                .setModeConfig(new CPDFConfiguration.ModeConfig(CPreviewMode.Viewer));
-
-        CPDFConfiguration.ReaderViewConfig readerViewConfig = new CPDFConfiguration.ReaderViewConfig();
-        readerViewConfig.linkHighlight = true;
-        readerViewConfig.formFieldHighlight = true;
-        builder.setReaderViewConfig(readerViewConfig);
-
-        CPDFConfiguration.ToolbarConfig toolbarConfig = new CPDFConfiguration.ToolbarConfig();
-        toolbarConfig.androidAvailableActions = Arrays.asList(
-                CPDFConfiguration.ToolbarConfig.ToolbarAction.Thumbnail,
-                CPDFConfiguration.ToolbarConfig.ToolbarAction.Search,
-                CPDFConfiguration.ToolbarConfig.ToolbarAction.Bota,
-                CPDFConfiguration.ToolbarConfig.ToolbarAction.Menu
-        );
-        toolbarConfig.availableMenus = Arrays.asList(
-                CPDFConfiguration.ToolbarConfig.MenuAction.ViewSettings,
-                CPDFConfiguration.ToolbarConfig.MenuAction.DocumentEditor,
-                CPDFConfiguration.ToolbarConfig.MenuAction.Security,
-                CPDFConfiguration.ToolbarConfig.MenuAction.Watermark,
-                CPDFConfiguration.ToolbarConfig.MenuAction.DocumentInfo,
-                CPDFConfiguration.ToolbarConfig.MenuAction.Save,
-                CPDFConfiguration.ToolbarConfig.MenuAction.Share,
-                CPDFConfiguration.ToolbarConfig.MenuAction.OpenDocument
-        );
-        builder.setToolbarConfig(toolbarConfig);
-        return builder.create();
-    }
-
-    public static CPDFConfiguration fromJson(String json){
-        try {
-            CPDFConfiguration configuration = new CPDFConfiguration();
-            JSONObject rootJsonObject = new JSONObject(json);
-            configuration.modeConfig = parseModeConfig(rootJsonObject.getJSONObject("modeConfig"));
-            configuration.toolbarConfig = parseToolbarConfig(rootJsonObject.getJSONObject("toolbarConfig"));
-            configuration.readerViewConfig = parseReaderViewConfig(rootJsonObject.getJSONObject("readerViewConfig"));
-            return configuration;
-        } catch (Exception e) {
-            return  CPDFConfigurationUtils.normalConfig();
-        }
-    }
-
-    private static CPDFConfiguration.ModeConfig parseModeConfig(JSONObject jsonObject){
-        CPDFConfiguration.ModeConfig modeConfig = new CPDFConfiguration.ModeConfig();
-        CPreviewMode mode = CPreviewMode.fromAlias(jsonObject.optString("initialViewMode"));
-        modeConfig.initialViewMode = mode != null ? mode : CPreviewMode.Viewer;
-        return modeConfig;
-    }
-
-    private static CPDFConfiguration.ToolbarConfig parseToolbarConfig(JSONObject jsonObject){
-        CPDFConfiguration.ToolbarConfig toolbarConfig = new CPDFConfiguration.ToolbarConfig();
-        List<CPDFConfiguration.ToolbarConfig.ToolbarAction> androidAvailableActionsList = new ArrayList<>();
-        JSONArray androidAvailableActions = jsonObject.optJSONArray("androidAvailableActions");
-        if (androidAvailableActions != null) {
-            for (int i = 0; i < androidAvailableActions.length(); i++) {
-                CPDFConfiguration.ToolbarConfig.ToolbarAction action = CPDFConfiguration.ToolbarConfig.ToolbarAction.fromString(androidAvailableActions.optString(i));
-                if (action != null) {
-                    androidAvailableActionsList.add(action);
-                }
-            }
-        }
-        toolbarConfig.androidAvailableActions = androidAvailableActionsList;
-
-        // parse more menu actions
-        List<CPDFConfiguration.ToolbarConfig.MenuAction> menuActionList = new ArrayList<>();
-        JSONArray availableMenusArray = jsonObject.optJSONArray("availableMenus");
-        if (availableMenusArray != null) {
-            for (int i = 0; i < availableMenusArray.length(); i++) {
-                CPDFConfiguration.ToolbarConfig.MenuAction menuAction = CPDFConfiguration.ToolbarConfig.MenuAction.fromString(availableMenusArray.optString(i));
-                if (menuAction != null) {
-                    menuActionList.add(menuAction);
-                }
-            }
-        }
-        toolbarConfig.availableMenus = menuActionList;
-        return toolbarConfig;
-    }
-
-    private static CPDFConfiguration.ReaderViewConfig parseReaderViewConfig(JSONObject jsonObject){
-        CPDFConfiguration.ReaderViewConfig readerViewConfig = new CPDFConfiguration.ReaderViewConfig();
-        readerViewConfig.linkHighlight = jsonObject.optBoolean("linkHighlight", true);
-        readerViewConfig.formFieldHighlight = jsonObject.optBoolean("formFieldHighlight", true);
-        return readerViewConfig;
-    }
-}

+ 0 - 747
android/app/src/main/java/com/compdfkit/pdfviewer/pdf/CPDFDocumentActivity.java

@@ -1,747 +0,0 @@
-/**
- * Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
- * <p>
- * 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.pdfviewer.pdf;
-
-import static com.compdfkit.tools.contenteditor.CEditToolbar.SELECT_AREA_IMAGE;
-import static com.compdfkit.tools.contenteditor.CEditToolbar.SELECT_AREA_TEXT;
-import static com.compdfkit.ui.contextmenu.CPDFContextMenuShowHelper.AddEditImageArea;
-import static com.compdfkit.ui.contextmenu.CPDFContextMenuShowHelper.ReplaceEditImageArea;
-
-import android.Manifest;
-import android.content.Intent;
-import android.graphics.Paint;
-import android.net.Uri;
-import android.os.Build;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.Toast;
-
-import androidx.activity.result.ActivityResultLauncher;
-import androidx.annotation.Nullable;
-import androidx.core.content.ContextCompat;
-
-import com.compdfkit.core.annotation.CPDFAnnotation;
-import com.compdfkit.core.annotation.form.CPDFSignatureWidget;
-import com.compdfkit.core.document.CPDFDocument;
-import com.compdfkit.core.edit.CPDFEditManager;
-import com.compdfkit.core.edit.CPDFEditPage;
-import com.compdfkit.pdfviewer.R;
-import com.compdfkit.tools.common.basic.activity.CBasicPDFActivity;
-import com.compdfkit.tools.common.contextmenu.CPDFContextMenuHelper;
-import com.compdfkit.tools.common.utils.CFileUtils;
-import com.compdfkit.tools.common.utils.CLog;
-import com.compdfkit.tools.common.utils.CPermissionUtil;
-import com.compdfkit.tools.common.utils.CToastUtil;
-import com.compdfkit.tools.common.utils.activitycontracts.CSelectPDFDocumentResultContract;
-import com.compdfkit.tools.common.utils.annotation.CPDFAnnotationManager;
-import com.compdfkit.tools.common.utils.dialog.CAlertDialog;
-import com.compdfkit.tools.common.utils.task.CExtractAssetFileTask;
-import com.compdfkit.tools.common.utils.threadpools.CThreadPoolUtils;
-import com.compdfkit.tools.common.utils.window.CPopupMenuWindow;
-import com.compdfkit.tools.common.views.pdfbota.CPDFBOTA;
-import com.compdfkit.tools.common.views.pdfbota.CPDFBotaDialogFragment;
-import com.compdfkit.tools.common.views.pdfbota.CPDFBotaFragmentTabs;
-import com.compdfkit.tools.common.views.pdfproperties.CAnnotationType;
-import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CAnnotStyle;
-import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CStyleDialogFragment;
-import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.CStyleType;
-import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.manager.CStyleManager;
-import com.compdfkit.tools.common.views.pdfview.CPDFViewCtrl;
-import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
-import com.compdfkit.tools.forms.pdfproperties.pdfsign.SignatureWidgetImpl;
-import com.compdfkit.tools.security.encryption.CDocumentEncryptionDialog;
-import com.compdfkit.tools.security.encryption.CInputOwnerPwdDialog;
-import com.compdfkit.tools.security.watermark.CWatermarkEditDialog;
-import com.compdfkit.tools.signature.CertificateDigitalDatas;
-import com.compdfkit.tools.signature.bean.CPDFDocumentSignInfo;
-import com.compdfkit.tools.signature.info.signlist.CPDFCertDigitalSignListDialog;
-import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment;
-import com.compdfkit.ui.contextmenu.IContextMenuShowListener;
-import com.compdfkit.ui.proxy.form.CPDFComboboxWidgetImpl;
-import com.compdfkit.ui.proxy.form.CPDFListboxWidgetImpl;
-import com.compdfkit.ui.proxy.form.CPDFPushbuttonWidgetImpl;
-import com.compdfkit.ui.reader.CPDFPageView;
-import com.compdfkit.ui.reader.CPDFReaderView;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class CPDFDocumentActivity extends CBasicPDFActivity {
-
-    public static final String EXTRA_FILE_PATH = "file_path";
-
-    public static final String EXTRA_FILE_PASSWORD = "file_password";
-
-    public static final String EXTRA_CONFIGURATION = "extra_configuration";
-
-    /**
-     * assets folder pdf file
-     */
-    public static final String QUICK_START_GUIDE = "PDF32000_2008.pdf";
-
-    private com.compdfkit.pdfviewer.databinding.PdfSampleActivityBinding binding;
-
-    CSampleScreenManager screenManager = new CSampleScreenManager();
-
-    private CPDFConfiguration cpdfConfiguration;
-
-    private ActivityResultLauncher<Void> selectDocumentLauncher = registerForActivityResult(new CSelectPDFDocumentResultContract(), uri -> {
-        if (uri != null) {
-            CPDFReaderView readerView = binding.pdfView.getCPdfReaderView();
-            if (readerView != null && readerView.getEditManager() != null) {
-                readerView.getEditManager().endEdit();
-            }
-            if (readerView.getContextMenuShowListener() != null) {
-                readerView.getContextMenuShowListener().dismissContextMenu();
-            }
-            CFileUtils.takeUriPermission(this, uri);
-            binding.pdfView.resetAnnotationType();
-            binding.formToolBar.reset();
-            binding.editToolBar.resetStatus();
-            binding.signatureToolBar.reset();
-            setPreviewMode(CPreviewMode.Viewer);
-            screenManager.changeWindowStatus(CPreviewMode.Viewer);
-            screenManager.constraintHide(binding.signStatusView);
-            binding.pdfView.openPDF(uri, null, () -> {
-                binding.editToolBar.setEditMode(false);
-            });
-        }
-    });
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        binding = com.compdfkit.pdfviewer.databinding.PdfSampleActivityBinding.inflate(getLayoutInflater());
-        setContentView(binding.getRoot());
-        screenManager.bind(binding);
-        //Extract PDF files from the Android assets folder
-        parseConfiguration();
-        initDocument(()->{
-            initPDFView();
-            initToolBarView();
-            initSearchBar();
-            initAnnotToolbar();
-            initFormToolbar();
-            initEditBar();
-            initSignatureToolbar();
-            applyConfiguration();
-            onDoNext();
-        });
-    }
-
-    private void initDocument(CInitPDFRequestListener initPDFRequestListener) {
-        String password = getIntent().getStringExtra(EXTRA_FILE_PASSWORD);
-        if (!TextUtils.isEmpty(getIntent().getStringExtra(EXTRA_FILE_PATH))) {
-            String path = getIntent().getStringExtra(EXTRA_FILE_PATH);
-            binding.pdfView.openPDF(path, password);
-            if (initPDFRequestListener != null) {
-                initPDFRequestListener.success();
-            }
-        } else if (getIntent().getData() != null) {
-            CFileUtils.takeUriPermission(this, getIntent().getData());
-            binding.pdfView.openPDF(getIntent().getData(), password);
-            if (initPDFRequestListener != null) {
-                initPDFRequestListener.success();
-            }
-        } else if (getIntent().getClipData() != null &&
-                getIntent().getClipData().getItemCount() > 0 &&
-                getIntent().getClipData().getItemAt(0) != null) {
-
-            Uri uri = getIntent().getClipData().getItemAt(0).getUri();
-            CFileUtils.takeUriPermission(this, uri);
-            binding.pdfView.openPDF(uri, password);
-            if (initPDFRequestListener != null) {
-                initPDFRequestListener.success();
-            }
-        } else {
-            CExtractAssetFileTask.extract(this, QUICK_START_GUIDE, QUICK_START_GUIDE, (filePath) -> {
-                        binding.pdfView.openPDF(filePath);
-                        runOnUiThread(()->{
-                            if (initPDFRequestListener != null) {
-                                initPDFRequestListener.success();
-                            }
-                        });
-                    }
-            );
-        }
-    }
-
-    private void initPDFView() {
-        binding.pdfView.getCPdfReaderView().setMinScaleEnable(false);
-        initAnnotationAttr(binding.pdfView);
-        initFormAttr(binding.pdfView);
-        registerAnnotHelper(binding.pdfView);
-        registerFormHelper(binding.pdfView);
-        Paint paint = new Paint();
-        paint.setStyle(Paint.Style.FILL);
-        paint.setColor(ContextCompat.getColor(this, R.color.tools_color_accent_50));
-        binding.pdfView.getCPdfReaderView().setFormPreviewPaint(paint);
-        binding.pdfView.addOnPDFFocusedTypeChangeListener(type -> {
-            if (type != CPDFAnnotation.Type.INK) {
-                if (binding.inkCtrlView.getVisibility() == View.VISIBLE) {
-                    screenManager.changeWindowStatus(type);
-                }
-            }
-        });
-        binding.pdfView.setOnTapMainDocAreaCallback(() -> {
-            //Use the CFillScreenManager.class to manage fullscreen switching.
-            screenManager.fillScreenChange();
-        });
-        binding.pdfView.getCPdfReaderView().setPdfAddAnnotCallback((cpdfPageView, cpdfBaseAnnot) -> {
-            // Annotation creation completed listener, you can use cpdfBaseAnnot.getAnnotType() to determine the type of the added annotation
-            if (cpdfBaseAnnot instanceof CPDFListboxWidgetImpl) {
-                // When the ListBox form is created, display an editing dialog for adding list data
-                CPDFAnnotationManager annotationManager = new CPDFAnnotationManager();
-                annotationManager.showFormListEditFragment(getSupportFragmentManager(), cpdfBaseAnnot, cpdfPageView, false);
-            } else if (cpdfBaseAnnot instanceof CPDFComboboxWidgetImpl) {
-                // When the ComboBox form is created, display an editing dialog for adding list data
-                CPDFAnnotationManager annotationManager = new CPDFAnnotationManager();
-                annotationManager.showFormComboBoxEditFragment(getSupportFragmentManager(), cpdfBaseAnnot, cpdfPageView, true);
-            } else if (cpdfBaseAnnot instanceof CPDFPushbuttonWidgetImpl) {
-                // When the PushButton form is created, display a dialog for editing the action method
-                CPDFAnnotationManager annotationManager = new CPDFAnnotationManager();
-                annotationManager.showPushButtonActionDialog(getSupportFragmentManager(), binding.pdfView.getCPdfReaderView(),
-                        cpdfBaseAnnot, cpdfPageView);
-            }
-        });
-    }
-
-    private void setPreviewMode(CPreviewMode mode) {
-        if (binding.pdfView.getCPdfReaderView() == null) {
-            return;
-        }
-        binding.pdfView.getCPdfReaderView().removeAllAnnotFocus();
-        IContextMenuShowListener contextMenuShowListener = binding.pdfView.getCPdfReaderView().getContextMenuShowListener();
-        if (contextMenuShowListener != null) {
-            contextMenuShowListener.dismissContextMenu();
-        }
-        screenManager.changeWindowStatus(mode);
-        binding.pdfToolBar.selectMode(mode);
-        binding.formToolBar.reset();
-        binding.signatureToolBar.reset();
-        resetContextMenu(binding.pdfView, mode);
-        CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
-        if (mode == CPreviewMode.Edit) {
-            binding.pdfView.getCPdfReaderView().setViewMode(CPDFReaderView.ViewMode.PDFEDIT);
-            if (editManager != null && !editManager.isEditMode()) {
-                editManager.enable();
-                editManager.beginEdit(CPDFEditPage.LoadTextImage);
-            }
-            if (!CPermissionUtil.hasStoragePermissions(this)) {
-                requestStoragePermissions();
-            }
-        } else {
-            if (editManager != null && editManager.isEditMode()) {
-                editManager.endEdit();
-            }
-            switch (mode) {
-                case Viewer:
-                case Signature:
-                    binding.pdfView.getCPdfReaderView().setViewMode(CPDFReaderView.ViewMode.VIEW);
-                    break;
-                case Annotation:
-                    binding.pdfView.getCPdfReaderView().setViewMode(CPDFReaderView.ViewMode.ANNOT);
-                    break;
-                case Form:
-                    binding.pdfView.getCPdfReaderView().setViewMode(CPDFReaderView.ViewMode.FORM);
-                    break;
-                default:
-                    break;
-            }
-        }
-    }
-
-    private void initToolBarView() {
-        binding.pdfToolBar.addMode(CPreviewMode.Annotation);
-        binding.pdfToolBar.addMode(CPreviewMode.Edit);
-        binding.pdfToolBar.addMode(CPreviewMode.Form);
-        binding.pdfToolBar.addMode(CPreviewMode.Signature);
-        binding.pdfToolBar.setPreviewModeChangeListener(this::setPreviewMode);
-        if (cpdfConfiguration != null) {
-            CPDFConfiguration.ToolbarConfig toolbarConfig = cpdfConfiguration.toolbarConfig;
-            for (CPDFConfiguration.ToolbarConfig.ToolbarAction androidAvailableAction : toolbarConfig.androidAvailableActions) {
-                switch (androidAvailableAction) {
-                    case Thumbnail:
-                        binding.pdfToolBar.addAction(R.drawable.tools_ic_thumbnail, v -> {
-                            showPageEdit(binding.pdfView, false, () -> {
-                                if (curEditMode > CPDFEditPage.LoadNone && binding.pdfToolBar.getMode() == CPreviewMode.Edit) {
-                                    CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
-                                    if (!editManager.isEditMode()) {
-                                        editManager.beginEdit(curEditMode);
-                                    }
-                                }
-                            });
-                        });
-                        break;
-                    case Search:
-                        binding.pdfToolBar.addAction(R.drawable.tools_ic_search, v -> {
-                            if (binding.pdfView.getCPdfReaderView().getEditManager().isEditMode()) {
-                                curEditMode = binding.pdfView.getCPdfReaderView().getLoadType();
-                            } else {
-                                curEditMode = CPDFEditPage.LoadNone;
-                            }
-                            binding.pdfView.exitEditMode();
-                            binding.pdfToolBar.setVisibility(View.GONE);
-                            binding.pdfSearchToolBar.setVisibility(View.VISIBLE);
-                            binding.pdfSearchToolBar.showKeyboard();
-                        });
-                        break;
-                    case Bota:
-                        binding.pdfToolBar.addAction(R.drawable.tools_ic_bookmark, v -> {
-                            binding.pdfView.getCPdfReaderView().removeAllAnnotFocus();
-                            binding.pdfView.exitEditMode();
-                            ArrayList<CPDFBotaFragmentTabs> tabs = new ArrayList<>();
-                            CPDFBotaFragmentTabs annotationTab = new CPDFBotaFragmentTabs(CPDFBOTA.ANNOTATION, getString(R.string.tools_annotations));
-                            CPDFBotaFragmentTabs outlineTab = new CPDFBotaFragmentTabs(CPDFBOTA.OUTLINE, getString(R.string.tools_outlines));
-                            CPDFBotaFragmentTabs bookmarkTab = new CPDFBotaFragmentTabs(CPDFBOTA.BOOKMARKS, getString(R.string.tools_bookmarks));
-                            if (binding.pdfToolBar.getMode() == CPreviewMode.Viewer) {
-                                tabs.add(outlineTab);
-                                tabs.add(bookmarkTab);
-                            } else {
-                                tabs.add(outlineTab);
-                                tabs.add(bookmarkTab);
-                                tabs.add(annotationTab);
-                            }
-                            CPDFBotaDialogFragment dialogFragment = CPDFBotaDialogFragment.newInstance();
-                            dialogFragment.initWithPDFView(binding.pdfView);
-                            dialogFragment.setBotaDialogTabs(tabs);
-                            dialogFragment.show(getSupportFragmentManager(), "annotationList");
-                        });
-                        break;
-
-                    case Menu:
-                        binding.pdfToolBar.addAction(R.drawable.tools_ic_more, v -> {
-                            showToolbarMenuDialog(v);
-                        });
-                        break;
-                    default:
-                        break;
-                }
-            }
-        }
-    }
-
-    private void requestStoragePermissions() {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-            CPermissionUtil.openManageAllFileAppSettings(this);
-        } else {
-            multiplePermissionResultLauncher.launch(STORAGE_PERMISSIONS, result -> {
-                if (CPermissionUtil.hasStoragePermissions(this)) {
-                    selectDocument();
-                } else {
-                    if (!CPermissionUtil.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
-                        showPermissionsRequiredDialog();
-                    }
-                }
-            });
-        }
-    }
-
-    private void initAnnotToolbar() {
-        binding.annotationToolBar.initWithPDFView(binding.pdfView);
-        binding.annotationToolBar.setFragmentManager(getSupportFragmentManager());
-        binding.annotationToolBar.setAnnotationChangeListener(type -> {
-            screenManager.changeWindowStatus(type);
-            //You are required to grant recording permission when selecting voice notes
-            if (type == CAnnotationType.SOUND) {
-                if (!hasPermission(Manifest.permission.RECORD_AUDIO)) {
-                    permissionResultLauncher.launch(Manifest.permission.RECORD_AUDIO, hasRecordAudioPermission -> {
-                        if (!hasRecordAudioPermission) {
-                            binding.pdfView.resetAnnotationType();
-                            if (!CPermissionUtil.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO)) {
-                                showPermissionsRequiredDialog();
-                            }
-                        }
-                    });
-                }
-            }
-        });
-        binding.inkCtrlView.initWithPDFView(binding.pdfView);
-        binding.inkCtrlView.setFragmentManager(getSupportFragmentManager());
-    }
-
-    private void initFormToolbar() {
-        binding.formToolBar.initWithPDFView(binding.pdfView);
-        binding.formToolBar.setFragmentManager(getSupportFragmentManager());
-    }
-
-    private void initSearchBar() {
-        binding.pdfSearchToolBar.initWithPDFView(binding.pdfView);
-
-        binding.pdfSearchToolBar.onSearchQueryResults(list -> {
-            CSearchResultDialogFragment searchResultDialog = new CSearchResultDialogFragment();
-            searchResultDialog.show(getSupportFragmentManager(), "searchResultDialogFragment");
-            searchResultDialog.setSearchTextInfos(list);
-            searchResultDialog.setOnClickSearchItemListener(clickItem -> {
-                binding.pdfView.getCPdfReaderView().setDisplayPageIndex(clickItem.page);
-                binding.pdfView.getCPdfReaderView().getTextSearcher().searchBegin(clickItem.page, clickItem.textRangeIndex);
-                searchResultDialog.dismiss();
-            });
-        });
-        binding.pdfSearchToolBar.setExitSearchListener(() -> {
-            if (curEditMode > CPDFEditPage.LoadNone) {
-                CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
-                if (!editManager.isEditMode()) {
-                    editManager.beginEdit(curEditMode);
-                }
-            }
-            binding.pdfToolBar.setVisibility(View.VISIBLE);
-            binding.pdfSearchToolBar.setVisibility(View.GONE);
-        });
-    }
-
-    private void initEditBar() {
-        if (binding.pdfView == null || binding.pdfView.getCPdfReaderView() == null) {
-            return;
-        }
-        binding.editToolBar.initWithPDFView(binding.pdfView);
-        binding.editToolBar.setEditMode(false);
-        binding.editToolBar.setEditPropertyBtnClickListener((view) -> {
-            int type = binding.pdfView.getCPdfReaderView().getSelectAreaType();
-            CStyleType styleType = CStyleType.UNKNOWN;
-            if (type == SELECT_AREA_TEXT) {
-                styleType = CStyleType.EDIT_TEXT;
-            } else if (type == SELECT_AREA_IMAGE) {
-                styleType = CStyleType.EDIT_IMAGE;
-            }
-            if (styleType != CStyleType.UNKNOWN) {
-                CPDFReaderView readerView = binding.pdfView.getCPdfReaderView();
-                CPDFContextMenuHelper menuHelper = (CPDFContextMenuHelper) readerView.getContextMenuShowListener();
-                if (menuHelper == null || menuHelper.getReaderView() == null) {
-                    return;
-                }
-                CStyleManager styleManager = new CStyleManager(menuHelper.getEditSelection(), menuHelper.getPageView());
-                CAnnotStyle annotStyle = styleManager.getStyle(styleType);
-                CStyleDialogFragment styleDialogFragment = CStyleDialogFragment.newInstance(annotStyle);
-                styleManager.setAnnotStyleFragmentListener(styleDialogFragment);
-                styleManager.setDialogHeightCallback(styleDialogFragment, binding.pdfView.getCPdfReaderView());
-                styleDialogFragment.show(getSupportFragmentManager(), "textPropertyDialogFragment");
-                menuHelper.dismissContextMenu();
-            }
-        });
-        binding.pdfView.setEndScrollCallback(() -> {
-            binding.editToolBar.updateUndoRedo();
-        });
-    }
-
-    private void initSignatureToolbar() {
-        binding.signStatusView.initWithPDFView(binding.pdfView);
-        binding.signStatusView.getBtnDetails().setOnClickListener(v -> {
-            CPDFCertDigitalSignListDialog signListDialog = CPDFCertDigitalSignListDialog.newInstance();
-            signListDialog.initWithPDFView(binding.pdfView);
-            signListDialog.setDialogDismissListener(this::verifyDocumentSignStatus);
-            signListDialog.show(getSupportFragmentManager(), "signListDialog");
-        });
-        binding.signatureToolBar.initWithPDFView(binding.pdfView);
-        binding.signatureToolBar.getVerifySignButton().setOnClickListener(v -> {
-            verifyDocumentSignStatus();
-        });
-    }
-
-    private void parseConfiguration() {
-        if (getIntent().hasExtra(EXTRA_CONFIGURATION)) {
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-                cpdfConfiguration = getIntent().getSerializableExtra(EXTRA_CONFIGURATION, CPDFConfiguration.class);
-            } else {
-                cpdfConfiguration = (CPDFConfiguration) getIntent().getSerializableExtra(EXTRA_CONFIGURATION);
-            }
-        } else {
-            cpdfConfiguration = CPDFConfigurationUtils.normalConfig();
-        }
-    }
-
-    private void applyConfiguration() {
-        if (cpdfConfiguration.readerViewConfig != null) {
-            CPDFConfiguration.ReaderViewConfig readerViewConfig = cpdfConfiguration.readerViewConfig;
-            binding.pdfView.getCPdfReaderView().setLinkHighlight(readerViewConfig.linkHighlight);
-            binding.pdfView.getCPdfReaderView().setFormFieldHighlight(readerViewConfig.formFieldHighlight);
-        }
-        if (cpdfConfiguration.modeConfig != null) {
-            CPDFConfiguration.ModeConfig modeConfig = cpdfConfiguration.modeConfig;
-            if (modeConfig.initialViewMode != CPreviewMode.PageEdit) {
-                setPreviewMode(modeConfig.initialViewMode);
-                if (modeConfig.initialViewMode == CPreviewMode.Edit) {
-                    binding.editToolBar.setEditMode(true);
-                }
-            } else {
-                setPreviewMode(CPreviewMode.Viewer);
-                showPageEdit(binding.pdfView, true, () -> {
-                    if (curEditMode > CPDFEditPage.LoadNone && binding.pdfToolBar.getMode() == CPreviewMode.Edit) {
-                        CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
-                        if (!editManager.isEditMode()) {
-                            editManager.beginEdit(curEditMode);
-                        }
-                    }
-                });
-            }
-        }
-    }
-
-    private void showToolbarMenuDialog(View anchorView) {
-        //Show the PDF settings dialog fragment
-        CPopupMenuWindow menuWindow = new CPopupMenuWindow(this);
-        if (cpdfConfiguration != null && cpdfConfiguration.toolbarConfig != null) {
-            List<CPDFConfiguration.ToolbarConfig.MenuAction> menuActions = cpdfConfiguration.toolbarConfig.availableMenus;
-            if (menuActions == null || menuActions.size() == 0) {
-                return;
-            }
-            anchorView.setSelected(true);
-            for (CPDFConfiguration.ToolbarConfig.MenuAction menuAction : menuActions) {
-                switch (menuAction) {
-                    case ViewSettings:
-                        menuWindow.addItem(R.drawable.tools_ic_preview_settings, R.string.tools_view_setting, v1 -> {
-                            showDisplaySettings(binding.pdfView);
-                        });
-                        break;
-                    case DocumentEditor:
-                        menuWindow.addItem(R.drawable.tools_page_edit, R.string.tools_page_edit_toolbar_title, v1 -> {
-                            showPageEdit(binding.pdfView, true, () -> {
-                                if (curEditMode > CPDFEditPage.LoadNone && binding.pdfToolBar.getMode() == CPreviewMode.Edit) {
-                                    CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
-                                    if (!editManager.isEditMode()) {
-                                        editManager.beginEdit(curEditMode);
-                                    }
-                                }
-                            });
-                        });
-                        break;
-                    case Security:
-                        menuWindow.addItem(R.drawable.tools_ic_add_security, R.string.tools_security, v1 -> {
-                            CPDFDocument document = binding.pdfView.getCPdfReaderView().getPDFDocument();
-                            if (document == null) {
-                                return;
-                            }
-                            if (document.getPermissions() == CPDFDocument.PDFDocumentPermissions.PDFDocumentPermissionsUser) {
-                                CInputOwnerPwdDialog inputOwnerPwdDialog = CInputOwnerPwdDialog.newInstance();
-                                inputOwnerPwdDialog.setDocument(document);
-                                inputOwnerPwdDialog.setCancelClickListener(v2 -> {
-                                    inputOwnerPwdDialog.dismiss();
-                                });
-                                inputOwnerPwdDialog.setConfirmClickListener(ownerPassword -> {
-                                    document.reload(ownerPassword);
-                                    showSettingEncryptionDialog();
-                                    inputOwnerPwdDialog.dismiss();
-                                });
-                                inputOwnerPwdDialog.show(getSupportFragmentManager(), "inputPasswordDialog");
-                                return;
-                            }
-                            showSettingEncryptionDialog();
-                        });
-                        break;
-                    case Watermark:
-                        menuWindow.addItem(R.drawable.tools_ic_add_watermark, R.string.tools_watermark, v1 -> {
-                            CWatermarkEditDialog watermarkEditDialog = CWatermarkEditDialog.newInstance();
-                            watermarkEditDialog.setDocument(binding.pdfView.getCPdfReaderView().getPDFDocument());
-                            watermarkEditDialog.setPageIndex(binding.pdfView.currentPageIndex);
-                            watermarkEditDialog.setCompleteListener((pdfFile) -> {
-                                watermarkEditDialog.dismiss();
-                                if (TextUtils.isEmpty(pdfFile)){
-                                    CToastUtil.showLongToast(this, R.string.tools_watermark_add_failed);
-                                    return;
-                                }
-                                binding.pdfView.openPDF(pdfFile);
-                                CToastUtil.showLongToast(this, R.string.tools_watermark_add_success);
-                            });
-                            watermarkEditDialog.show(getSupportFragmentManager(), "watermarkEditDialog");
-                        });
-                        break;
-                    case DocumentInfo:
-                        menuWindow.addItem(R.drawable.tools_ic_document_info, R.string.tools_document_info, v1 -> {
-                            showDocumentInfo(binding.pdfView);
-                        });
-                        break;
-                    case Save:
-                        menuWindow.addItem(R.drawable.tools_ic_menu_save, R.string.tools_save, v1 -> {
-                            binding.pdfView.savePDF((filePath, pdfUri) -> {
-                                CToastUtil.showLongToast(this, R.string.tools_save_success);
-                            }, e -> {
-
-                            });
-                        });
-                        break;
-                    case Share:
-                        menuWindow.addItem(R.drawable.tools_ic_share, R.string.tools_share, v1 -> {
-                            binding.editToolBar.resetStatus();
-                            sharePDF(binding.pdfView);
-                        });
-                        break;
-                    case OpenDocument:
-                        menuWindow.addItem(R.drawable.tools_ic_new_file, R.string.tools_open_document, v1 -> {
-                            if (CPermissionUtil.hasStoragePermissions(this)) {
-                                selectDocument();
-                            } else {
-                                requestStoragePermissions();
-                            }
-                        });
-                        break;
-                    default:
-                        break;
-                }
-            }
-        }
-        menuWindow.setOnDismissListener(() -> anchorView.setSelected(false));
-        menuWindow.showAsDropDown(anchorView);
-    }
-
-    /**
-     *
-     */
-    private void verifyDocumentSignStatus() {
-        CPDFDocument document = binding.pdfView.getCPdfReaderView().getPDFDocument();
-        if (CertificateDigitalDatas.hasDigitalSignature(document)) {
-            CThreadPoolUtils.getInstance().executeIO(() -> {
-                CPDFDocumentSignInfo status = CertificateDigitalDatas.verifyDocumentSignStatus(document);
-                runOnUiThread(() -> {
-                    if (status != null) {
-                        binding.signStatusView.setStatus(status);
-                        screenManager.fillScreenManager.bindTopToolView(binding.signStatusView);
-                        screenManager.constraintShow(binding.signStatusView);
-                    }
-                });
-            });
-        } else {
-            if (binding.signStatusView.getVisibility() == View.VISIBLE) {
-                screenManager.fillScreenManager.removeAndHideToolView(binding.signStatusView);
-                screenManager.constraintHide(binding.signStatusView);
-            }
-        }
-    }
-
-    private void selectDocument() {
-        if (binding.pdfToolBar.getMode() == CPreviewMode.Edit) {
-            binding.pdfView.exitEditMode();
-        }
-
-        if (binding.pdfView.getCPdfReaderView().getPDFDocument() == null) {
-            selectDocumentLauncher.launch(null);
-            return;
-        }
-        if (!binding.pdfView.getCPdfReaderView().getPDFDocument().hasChanges()) {
-            selectDocumentLauncher.launch(null);
-            return;
-        }
-        CAlertDialog alertDialog = CAlertDialog.newInstance(getString(R.string.tools_save_title), getString(R.string.tools_save_message));
-        alertDialog.setConfirmClickListener(v -> {
-            //save pdf document
-            binding.pdfView.savePDF((filePath, pdfUri) -> {
-                alertDialog.dismiss();
-                selectDocumentLauncher.launch(null);
-            }, e -> {
-                alertDialog.dismiss();
-                selectDocumentLauncher.launch(null);
-            });
-        });
-        alertDialog.setCancelClickListener(v -> {
-            alertDialog.dismiss();
-            selectDocumentLauncher.launch(null);
-        });
-        alertDialog.show(getSupportFragmentManager(), "alertDialog");
-    }
-
-    private void onDoNext() {
-        multiplePermissionResultLauncher.launch(STORAGE_PERMISSIONS);
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-        if (requestCode == ReplaceEditImageArea) {
-            if (binding.pdfView == null || binding.pdfView.getCPdfReaderView() == null) {
-                return;
-            }
-            for (int i = 0; i < binding.pdfView.getCPdfReaderView().getChildCount(); i++) {
-                CPDFPageView pageView = (CPDFPageView) binding.pdfView.getCPdfReaderView().getChildAt(i);
-                if (pageView == null) {
-                    continue;
-                }
-                if (data == null) {
-                    return;
-                }
-                if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getPageNum()) {
-                    boolean ret = pageView.operateEditImageArea(CPDFPageView.EditImageFuncType.REPLACE, data.getData());
-                    if (ret == false) {
-                        Toast.makeText(getApplicationContext(), "replace fail", Toast.LENGTH_LONG).show();
-                    }
-                    break;
-                }
-            }
-        } else if (requestCode == AddEditImageArea) {
-            if (binding.pdfView == null || binding.pdfView.getCPdfReaderView() == null) {
-                return;
-            }
-            if (data == null) {
-                return;
-            }
-            for (int i = 0; i < binding.pdfView.getCPdfReaderView().getChildCount(); i++) {
-                CPDFPageView pageView = (CPDFPageView) binding.pdfView.getCPdfReaderView().getChildAt(i);
-                if (pageView == null) {
-                    continue;
-                }
-                if (pageView.getPageNum() == binding.pdfView.getCPdfReaderView().getAddImagePage()) {
-                    boolean ret = pageView.addEditImageArea(binding.pdfView.getCPdfReaderView().getAddImagePoint(), data.getData());
-                    if (ret == false) {
-                        Toast.makeText(getApplicationContext(), "add fail", Toast.LENGTH_LONG).show();
-                    }
-                    break;
-                }
-            }
-        }
-    }
-
-    private void showSettingEncryptionDialog() {
-        CDocumentEncryptionDialog documentEncryptionDialog = CDocumentEncryptionDialog.newInstance();
-        documentEncryptionDialog.setDocument(binding.pdfView.getCPdfReaderView().getPDFDocument());
-        documentEncryptionDialog.setEncryptionResultListener((isRemoveSecurity, result, filePath, passowrd) -> {
-            binding.pdfView.openPDF(filePath);
-            documentEncryptionDialog.dismiss();
-            int msgResId;
-            if (isRemoveSecurity) {
-                msgResId = result ? R.string.tools_password_remove_success : R.string.tools_password_remove_fail;
-            } else {
-                msgResId = result ? R.string.tools_set_password_successfully : R.string.tools_set_password_failures;
-            }
-            CToastUtil.showLongToast(this, msgResId);
-        });
-        documentEncryptionDialog.show(getSupportFragmentManager(), "documentEncryption");
-    }
-
-    @Override
-    public void registerFormHelper(CPDFViewCtrl pdfView) {
-        super.registerFormHelper(pdfView);
-        pdfView.getCPdfReaderView().getAnnotImplRegistry()
-                // Register the CustomSignatureWidgetImpl.class to implement a custom dropdown options popup.
-                .registImpl(CPDFSignatureWidget.class, CSignatureWidgetImpl.class);
-    }
-
-    @Override
-    public void onBackPressed() {
-        if (binding.pdfView != null) {
-            binding.pdfView.savePDF((filePath, pdfUri) -> super.onBackPressed(), e -> super.onBackPressed());
-        } else {
-            super.onBackPressed();
-        }
-    }
-
-    public static class CSignatureWidgetImpl extends SignatureWidgetImpl {
-        @Override
-        public CPreviewMode getCurrentMode() {
-            if (readerView.getContext() instanceof CPDFDocumentActivity) {
-                return ((CPDFDocumentActivity) readerView.getContext()).binding.pdfToolBar.getMode();
-            } else {
-                return CPreviewMode.Viewer;
-            }
-        }
-    }
-
-    interface CInitPDFRequestListener {
-        void success();
-    }
-}

+ 0 - 134
android/app/src/main/java/com/compdfkit/pdfviewer/pdf/CSampleScreenManager.java

@@ -1,134 +0,0 @@
-package com.compdfkit.pdfviewer.pdf;
-
-import android.view.View;
-
-import androidx.constraintlayout.widget.ConstraintSet;
-
-import com.compdfkit.core.annotation.CPDFAnnotation;
-import com.compdfkit.pdfviewer.databinding.PdfSampleActivityBinding;
-import com.compdfkit.tools.common.utils.animation.CFillScreenManager;
-import com.compdfkit.tools.common.utils.animation.ConstraintSetUtils;
-import com.compdfkit.tools.common.views.pdfproperties.CAnnotationType;
-import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
-
-public class CSampleScreenManager {
-    private PdfSampleActivityBinding binding;
-
-    public CFillScreenManager fillScreenManager = new CFillScreenManager();
-
-    private boolean isFillScreen;
-
-    private ConstraintSet constraintSet = new ConstraintSet();
-
-    private ConstraintSetUtils constraintSetUtils = new ConstraintSetUtils();
-
-    public void bind(PdfSampleActivityBinding mainBinding){
-        this.binding = mainBinding;
-        constraintSet.clone(binding.getRoot());
-        fillScreenManager.bindRightToolViewList(binding.pdfView.slideBar);
-        fillScreenManager.bindBottomToolViewList(binding.pdfView.indicatorView);
-        fillScreenManager.bindBottomToolViewList(binding.flBottomToolBar);
-    }
-
-
-    public void changeWindowStatus(CPreviewMode mode){
-        if (mode == CPreviewMode.Viewer){
-            fillScreenManager.removeToolView(binding.flBottomToolBar);
-            constraintSetUtils.hideFromBottom(constraintSet, binding.flBottomToolBar);
-        }else if (mode == CPreviewMode.Annotation){
-            fillScreenManager.bindBottomToolViewList(binding.flBottomToolBar);
-            binding.annotationToolBar.setVisibility(View.VISIBLE);
-            binding.editToolBar.setVisibility(View.GONE);
-            binding.formToolBar.setVisibility(View.GONE);
-            binding.signatureToolBar.setVisibility(View.GONE);
-            constraintSetUtils.showFromBottom(constraintSet, binding.flBottomToolBar);
-        } else if (mode == CPreviewMode.Edit) {
-            fillScreenManager.bindBottomToolViewList(binding.flBottomToolBar);
-            binding.annotationToolBar.setVisibility(View.GONE);
-            binding.editToolBar.setVisibility(View.VISIBLE);
-            binding.formToolBar.setVisibility(View.GONE);
-            binding.signatureToolBar.setVisibility(View.GONE);
-            constraintSetUtils.showFromBottom(constraintSet, binding.flBottomToolBar);
-        } else if (mode == CPreviewMode.Form){
-            fillScreenManager.bindBottomToolViewList(binding.flBottomToolBar);
-            binding.annotationToolBar.setVisibility(View.GONE);
-            binding.editToolBar.setVisibility(View.GONE);
-            binding.formToolBar.setVisibility(View.VISIBLE);
-            binding.signatureToolBar.setVisibility(View.GONE);
-            constraintSetUtils.showFromBottom(constraintSet, binding.flBottomToolBar);
-        } else if (mode == CPreviewMode.Signature){
-            fillScreenManager.bindBottomToolViewList(binding.flBottomToolBar);
-            binding.annotationToolBar.setVisibility(View.GONE);
-            binding.editToolBar.setVisibility(View.GONE);
-            binding.formToolBar.setVisibility(View.GONE);
-            binding.signatureToolBar.setVisibility(View.VISIBLE);
-            constraintSetUtils.showFromBottom(constraintSet, binding.flBottomToolBar);
-        }
-        constraintSetUtils.apply(constraintSet, binding.getRoot());
-    }
-
-    public void changeWindowStatus(CAnnotationType type){
-        if (type == CAnnotationType.INK){
-            fillScreenChange();
-            fillScreenManager.bindTopToolView(binding.inkCtrlView);
-            binding.inkCtrlView.setVisibility(View.VISIBLE);
-        }else {
-            if (isFillScreen){
-                fillScreenChange();
-            }
-            binding.inkCtrlView.setVisibility(View.GONE);
-            fillScreenManager.removeToolView(binding.inkCtrlView);
-        }
-    }
-
-    public void changeWindowStatus(CPDFAnnotation.Type pdfType){
-        if (pdfType == CPDFAnnotation.Type.INK){
-            fillScreenChange();
-            fillScreenManager.hideFromTop(binding.pdfToolBar, 200);
-            fillScreenManager.hideFromBottom(binding.flBottomToolBar, 200);
-        }else {
-            if (isFillScreen) {
-                fillScreenChange();
-            }
-            binding.inkCtrlView.setVisibility(View.GONE);
-            fillScreenManager.removeToolView(binding.inkCtrlView);
-        }
-    }
-
-    public void fillScreenChange() {
-        fillScreenManager.fillScreenChange(!isFillScreen);
-        if (!isFillScreen) {
-            //enter full screen
-            constraintSetUtils.hideFromTop(constraintSet, binding.flTool);
-            constraintSetUtils.hideFromBottom(constraintSet, binding.flBottomToolBar);
-            constraintSetUtils.hideFromBottom(constraintSet, binding.signatureToolBar);
-            isFillScreen = true;
-        } else {
-            //enter normal state
-            constraintSetUtils.showFromTop(constraintSet, binding.flTool);
-            //show bottom annotationBar
-            if (fillScreenManager.bottomToolViewList.contains(binding.flBottomToolBar)) {
-                constraintSetUtils.showFromBottom(constraintSet, binding.flBottomToolBar);
-            }else {
-                constraintSetUtils.hideFromBottom(constraintSet, binding.flBottomToolBar);
-            }
-            if (fillScreenManager.topToolViewList.contains(binding.signStatusView)) {
-                constraintSetUtils.show(constraintSet, binding.signStatusView);
-            }else {
-                constraintSetUtils.hide(constraintSet, binding.signStatusView);
-            }
-            isFillScreen = false;
-        }
-        constraintSetUtils.apply(constraintSet, binding.getRoot());
-    }
-
-    public void constraintShow(View view){
-        constraintSetUtils.show(constraintSet, view);
-        constraintSetUtils.apply(constraintSet, binding.getRoot());
-    }
-
-    public void constraintHide(View view){
-        constraintSetUtils.hide(constraintSet, view);
-        constraintSetUtils.apply(constraintSet, binding.getRoot());
-    }
-}

+ 28 - 2
android/app/src/main/java/com/compdfkit/pdfviewer/pdf/OpenPDFModule.java

@@ -1,10 +1,23 @@
+/**
+ * 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.pdfviewer.pdf;
 
 import android.content.Intent;
+import android.net.Uri;
 
 import androidx.annotation.NonNull;
 
-import com.compdfkit.core.document.CPDFSdk;
+import com.compdfkit.tools.common.pdf.CPDFConfigurationUtils;
+import com.compdfkit.tools.common.pdf.CPDFDocumentActivity;
+import com.compdfkit.tools.common.pdf.config.CPDFConfiguration;
+import com.compdfkit.tools.common.utils.CFileUtils;
 import com.facebook.react.bridge.ReactApplicationContext;
 import com.facebook.react.bridge.ReactContext;
 import com.facebook.react.bridge.ReactContextBaseJavaModule;
@@ -28,9 +41,11 @@ public class OpenPDFModule extends ReactContextBaseJavaModule {
 
     @ReactMethod
     public void openPDF(String configurationJson) {
-        Intent intent = new Intent(mReactContext, CPDFDocumentActivity.class);
+        String samplePDFPath = CFileUtils.getAssetsTempFile(mReactContext, "PDF32000_2008.pdf","PDF32000_2008.pdf");
         CPDFConfiguration configuration = CPDFConfigurationUtils.fromJson(configurationJson);
+        Intent intent = new Intent(mReactContext, CPDFDocumentActivity.class);
         intent.putExtra(CPDFDocumentActivity.EXTRA_CONFIGURATION, configuration);
+        intent.putExtra(CPDFDocumentActivity.EXTRA_FILE_PATH, samplePDFPath);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         mReactContext.startActivity(intent);
     }
@@ -45,4 +60,15 @@ public class OpenPDFModule extends ReactContextBaseJavaModule {
         intent.putExtra(CPDFDocumentActivity.EXTRA_CONFIGURATION, configuration);
         mReactContext.startActivity(intent);
     }
+
+    @ReactMethod
+    public void openPDFByUri(String uriString, String password, String configurationJson){
+        Intent intent = new Intent(mReactContext, CPDFDocumentActivity.class);
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        intent.setData(Uri.parse(uriString));
+        intent.putExtra(CPDFDocumentActivity.EXTRA_FILE_PASSWORD, password);
+        CPDFConfiguration configuration = CPDFConfigurationUtils.fromJson(configurationJson);
+        intent.putExtra(CPDFDocumentActivity.EXTRA_CONFIGURATION, configuration);
+        mReactContext.startActivity(intent);
+    }
 }

+ 9 - 0
android/app/src/main/java/com/compdfkit/pdfviewer/pdf/PDFReactPackage.java

@@ -1,3 +1,12 @@
+/**
+ * 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.pdfviewer.pdf;
 
 import androidx.annotation.NonNull;

+ 0 - 109
android/app/src/main/res/layout/pdf_sample_activity.xml

@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context=".pdf.CPDFDocumentActivity">
-
-    <com.compdfkit.tools.common.views.pdfview.CPDFViewCtrl
-        android:id="@+id/pdf_view"
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        app:layout_constrainedHeight="true"
-        app:layout_constraintBottom_toTopOf="@id/fl_bottom_tool_bar"
-        app:layout_constraintTop_toBottomOf="@id/fl_tool"
-        app:tools_enable_page_indicator="true"
-        app:tools_enable_slider_bar="true"
-        app:tools_page_indicator_margin_bottom="20dp"
-        app:tools_slider_bar_icon="@drawable/tools_ic_pdf_slider_bar"
-        app:tools_slider_bar_position="right" />
-
-    <FrameLayout
-        android:id="@+id/fl_tool"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:background="@color/tools_color_primary"
-        android:elevation="4dp"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent">
-
-        <com.compdfkit.tools.common.views.CPDFToolBar
-            android:id="@+id/pdf_tool_bar"
-            android:layout_width="match_parent"
-            android:layout_height="?android:attr/actionBarSize"
-            android:elevation="4dp"
-            android:title="@string/tools_pdf_viewer_mode"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
-
-        <com.compdfkit.tools.viewer.pdfsearch.CSearchToolbar
-            android:id="@+id/pdf_search_tool_bar"
-            android:layout_width="match_parent"
-            android:layout_height="?android:attr/actionBarSize"
-            android:visibility="gone"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
-
-    </FrameLayout>
-
-    <com.compdfkit.tools.annotation.pdfproperties.pdflnk.CInkCtrlView
-        android:id="@+id/ink_ctrl_view"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginHorizontal="16dp"
-        android:visibility="gone"
-        app:layout_constraintTop_toBottomOf="@id/fl_tool" />
-
-    <com.compdfkit.tools.signature.verify.CVerifySignStatusView
-        android:id="@+id/sign_status_view"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/fl_tool"
-        android:visibility="gone"
-        tools:visibility="visible"
-        app:status="valid" />
-
-    <FrameLayout
-        android:id="@+id/fl_bottom_tool_bar"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent">
-
-        <com.compdfkit.tools.annotation.pdfannotationbar.CAnnotationToolbar
-            android:id="@+id/annotation_tool_bar"
-            android:layout_width="match_parent"
-            android:layout_height="?android:attr/actionBarSize"
-            />
-
-        <com.compdfkit.tools.contenteditor.CEditToolbar
-            android:id="@+id/edit_tool_bar"
-            android:layout_width="match_parent"
-            android:layout_height="?android:attr/actionBarSize"
-            />
-
-        <com.compdfkit.tools.forms.pdfformbar.CFormToolbar
-            android:id="@+id/form_tool_bar"
-            android:layout_width="match_parent"
-            android:layout_height="?android:attr/actionBarSize"
-            android:visibility="gone"
-            />
-
-        <com.compdfkit.tools.signature.CSignatureToolBar
-            android:id="@+id/signature_tool_bar"
-            android:layout_width="match_parent"
-            android:visibility="gone"
-            android:layout_height="?android:attr/actionBarSize"
-            app:layout_constraintBottom_toBottomOf="parent" />
-
-    </FrameLayout>
-
-
-</androidx.constraintlayout.widget.ConstraintLayout>

+ 257 - 0
assets/configuration.json

@@ -0,0 +1,257 @@
+{
+  "modeConfig": {
+    "initialViewMode": "viewer",
+    "availableViewModes": [
+      "viewer",
+      "annotations",
+      "contentEditor",
+      "forms",
+      "signatures"
+    ]
+  },
+  "toolbarConfig": {
+    "androidAvailableActions": [
+      "thumbnail",
+      "search",
+      "bota",
+      "menu"
+    ],
+    "iosLeftBarAvailableActions": [
+      "back",
+      "thumbnail"
+    ],
+    "iosRightBarAvailableActions": [
+      "search",
+      "bota",
+      "menu"
+    ],
+    "availableMenus": [
+      "viewSettings",
+      "documentEditor",
+      "documentInfo",
+      "watermark",
+      "security",
+      "flattened",
+      "save",
+      "share",
+      "openDocument"
+    ]
+  },
+  "annotationsConfig": {
+    "availableTypes": [
+      "note",
+      "highlight",
+      "underline",
+      "squiggly",
+      "strikeout",
+      "ink",
+      "circle",
+      "square",
+      "arrow",
+      "line",
+      "freetext",
+      "signature",
+      "stamp",
+      "pictures",
+      "link",
+      "sound"
+    ],
+    "availableTools": [
+      "setting",
+      "undo",
+      "redo"
+    ],
+    "initAttribute": {
+      "note": {
+        "color": "#1460F3",
+        "alpha": 255
+      },
+      "highlight": {
+        "color": "#1460F3",
+        "alpha": 77
+      },
+      "underline": {
+        "color": "#1460F3",
+        "alpha": 77
+      },
+      "squiggly": {
+        "color": "#1460F3",
+        "alpha": 77
+      },
+      "strikeout": {
+        "color": "#1460F3",
+        "alpha": 77
+      },
+      "ink": {
+        "color": "#1460F3",
+        "alpha": 100,
+        "borderWidth": 10
+      },
+      "square": {
+        "fillColor": "#1460F3",
+        "borderColor": "#000000",
+        "colorAlpha" : 128,
+        "borderWidth": 2,
+        "borderStyle": {
+          "style": "solid",
+          "dashGap": 0.0
+        }
+      },
+      "circle": {
+        "fillColor": "#1460F3",
+        "borderColor": "#000000",
+        "colorAlpha" : 128,
+        "borderWidth": 2,
+        "borderStyle": {
+          "style": "solid",
+          "dashGap": 0.0
+        }
+      },
+      "line": {
+        "borderColor": "#1460F3",
+        "borderAlpha": 100,
+        "borderWidth": 5,
+        "borderStyle": {
+          "style": "solid",
+          "dashGap": 0.0
+        }
+      },
+      "arrow": {
+        "borderColor": "#1460F3",
+        "borderAlpha": 100,
+        "borderWidth": 5,
+        "borderStyle": {
+          "style": "solid",
+          "dashGap": 0.0
+        },
+        "startLineType": "none",
+        "tailLineType": "openArrow"
+      },
+      "freeText": {
+        "fontColor": "#000000",
+        "fontColorAlpha": 255,
+        "fontSize": 30,
+        "isBold": false,
+        "isItalic": false,
+        "alignment": "left",
+        "typeface": "Helvetica"
+      }
+    }
+  },
+  "contentEditorConfig": {
+    "availableTypes": [
+      "editorText",
+      "editorImage"
+    ],
+    "availableTools": [
+      "setting",
+      "undo",
+      "redo"
+    ],
+    "initAttribute": {
+      "text": {
+        "fontColor": "#000000",
+        "fontColorAlpha" : 100,
+        "fontSize": 30,
+        "isBold": false,
+        "isItalic": false,
+        "typeface": "Times-Roman",
+        "alignment": "left"
+      }
+    }
+  },
+  "formsConfig": {
+    "availableTypes": [
+      "textField",
+      "checkBox",
+      "radioButton",
+      "listBox",
+      "comboBox",
+      "signaturesFields",
+      "pushButton"
+    ],
+    "availableTools": [
+      "undo",
+      "redo"
+    ],
+    "initAttribute": {
+      "textField": {
+        "fillColor": "#DDE9FF",
+        "borderColor": "#1460F3",
+        "borderWidth": 2,
+        "fontColor": "#000000",
+        "fontSize": 20,
+        "isBold": false,
+        "isItalic": false,
+        "alignment": "left",
+        "multiline": true,
+        "typeface": "Helvetica"
+      },
+      "checkBox": {
+        "fillColor": "#DDE9FF",
+        "borderColor": "#1460F3",
+        "borderWidth": 2,
+        "checkedColor": "#43474D",
+        "isChecked": false,
+        "checkedStyle": "check"
+      },
+      "radioButton": {
+        "fillColor": "#DDE9FF",
+        "borderColor": "#1460F3",
+        "borderWidth": 2,
+        "checkedColor": "#43474D",
+        "isChecked": false,
+        "checkedStyle": "circle"
+      },
+      "listBox": {
+        "fillColor": "#DDE9FF",
+        "borderColor": "#1460F3",
+        "borderWidth": 2,
+        "fontColor": "#000000",
+        "fontSize": 20,
+        "typeface": "Helvetica",
+        "isBold": false,
+        "isItalic": false
+      },
+      "comboBox": {
+        "fillColor": "#DDE9FF",
+        "borderColor": "#1460F3",
+        "borderWidth": 2,
+        "fontColor": "#000000",
+        "fontSize": 20,
+        "typeface": "Helvetica",
+        "isBold": false,
+        "isItalic": false
+      },
+      "pushButton": {
+        "fillColor": "#DDE9FF",
+        "borderColor": "#1460F3",
+        "borderWidth": 2,
+        "fontColor": "#000000",
+        "fontSize": 20,
+        "title": "Button",
+        "typeface": "Helvetica",
+        "isBold": false,
+        "isItalic": false
+      },
+      "signaturesFields": {
+        "fillColor": "#DDE9FF",
+        "borderColor": "#000000",
+        "borderWidth": 2
+      }
+    }
+  },
+  "readerViewConfig": {
+    "linkHighlight": true,
+    "formFieldHighlight": true,
+    "displayMode": "singlePage",
+    "continueMode": true,
+    "verticalMode": true,
+    "cropMode": false,
+    "themes" : "light",
+    "enableSliderBar": true,
+    "enablePageIndicator": true,
+    "pageSpacing": 10,
+    "pageScale": 1.0
+  }
+}

+ 4 - 6
ios/ComPDFKit_RN.xcodeproj/project.pbxproj

@@ -15,7 +15,6 @@
 		7699B88040F8A987B510C191 /* libPods-ComPDFKit_RN-ComPDFKit_RNTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-ComPDFKit_RN-ComPDFKit_RNTests.a */; };
 		81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
 		C93DCBED2AD6A52600DD0409 /* developer_guide_ios.pdf in Resources */ = {isa = PBXBuildFile; fileRef = C93DCBEA2AD6A52400DD0409 /* developer_guide_ios.pdf */; };
-		C9E0B3F12B186DA600E8855B /* CPDFViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9E0B3EE2B186DA600E8855B /* CPDFViewController.swift */; };
 		C9E0B3F22B186DA600E8855B /* OpenPDFModuleBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = C9E0B3EF2B186DA600E8855B /* OpenPDFModuleBridge.m */; };
 		C9E0B3F42B186DED00E8855B /* OpenPDFModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9E0B3F32B186DED00E8855B /* OpenPDFModule.swift */; };
 /* End PBXBuildFile section */
@@ -49,7 +48,6 @@
 		89C6BE57DB24E9ADA2F236DE /* Pods-ComPDFKit_RN-ComPDFKit_RNTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ComPDFKit_RN-ComPDFKit_RNTests.release.xcconfig"; path = "Target Support Files/Pods-ComPDFKit_RN-ComPDFKit_RNTests/Pods-ComPDFKit_RN-ComPDFKit_RNTests.release.xcconfig"; sourceTree = "<group>"; };
 		C93DCBEA2AD6A52400DD0409 /* developer_guide_ios.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = developer_guide_ios.pdf; sourceTree = "<group>"; };
 		C9E0B3ED2B186DA600E8855B /* ComPDFKit_RN-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ComPDFKit_RN-Bridging-Header.h"; path = "ComPDFKit_RN/ComPDFKit_RN-Bridging-Header.h"; sourceTree = "<group>"; };
-		C9E0B3EE2B186DA600E8855B /* CPDFViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CPDFViewController.swift; path = ComPDFKit_RN/CPDFViewController.swift; sourceTree = "<group>"; };
 		C9E0B3EF2B186DA600E8855B /* OpenPDFModuleBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenPDFModuleBridge.m; path = ComPDFKit_RN/OpenPDFModuleBridge.m; sourceTree = "<group>"; };
 		C9E0B3F02B186DA600E8855B /* OpenPDFModuleBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenPDFModuleBridge.h; path = ComPDFKit_RN/OpenPDFModuleBridge.h; sourceTree = "<group>"; };
 		C9E0B3F32B186DED00E8855B /* OpenPDFModule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenPDFModule.swift; path = ComPDFKit_RN/OpenPDFModule.swift; sourceTree = "<group>"; };
@@ -97,7 +95,6 @@
 			isa = PBXGroup;
 			children = (
 				C9E0B3F32B186DED00E8855B /* OpenPDFModule.swift */,
-				C9E0B3EE2B186DA600E8855B /* CPDFViewController.swift */,
 				C9E0B3F02B186DA600E8855B /* OpenPDFModuleBridge.h */,
 				C9E0B3EF2B186DA600E8855B /* OpenPDFModuleBridge.m */,
 				C9E0B3ED2B186DA600E8855B /* ComPDFKit_RN-Bridging-Header.h */,
@@ -430,7 +427,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
-				C9E0B3F12B186DA600E8855B /* CPDFViewController.swift in Sources */,
 				13B07FC11A68108700A75B9A /* main.m in Sources */,
 				C9E0B3F42B186DED00E8855B /* OpenPDFModule.swift in Sources */,
 				C9E0B3F22B186DA600E8855B /* OpenPDFModuleBridge.m in Sources */,
@@ -638,7 +634,8 @@
 					"$(inherited)",
 					"-Wl",
 					"-ld_classic",
-					"-Wl -ld_classic ",
+					"-Wl",
+					"-ld_classic",
 				);
 				REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
 				SDKROOT = iphoneos;
@@ -713,7 +710,8 @@
 					"$(inherited)",
 					"-Wl",
 					"-ld_classic",
-					"-Wl -ld_classic ",
+					"-Wl",
+					"-ld_classic",
 				);
 				REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
 				SDKROOT = iphoneos;

File diff suppressed because it is too large
+ 0 - 1519
ios/ComPDFKit_RN/CPDFViewController.swift


+ 8 - 102
ios/ComPDFKit_RN/OpenPDFModule.swift

@@ -9,7 +9,7 @@
 //  UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
 //  This notice may not be removed from this file.
 //
-
+import UIKit
 import Foundation
 import ComPDFKit
 import ComPDFKit_Tools
@@ -22,8 +22,9 @@ class OpenPDFModule: NSObject, CPDFViewBaseControllerDelete {
     DispatchQueue.main.async {
       let documentPath = Bundle.main.path(forResource: "developer_guide_ios", ofType: "pdf") ?? ""
       let rootNav = OpenPDFModule.presentedViewController()
-      let jsonDic = self.readJSON(configurationJson)
-      let configuration = self.parseJSON(jsonDic)
+      
+      let jsonDataParse = CPDFJSONDataParse(String: configurationJson)
+      guard let configuration = jsonDataParse.configuration else { return }
       
       let pdfViewController = CPDFViewController(filePath: documentPath, password: "", configuration: configuration)
       pdfViewController.delegate = self
@@ -36,8 +37,10 @@ class OpenPDFModule: NSObject, CPDFViewBaseControllerDelete {
   @objc(openPDFByConfiguration: password: configurationJson:)
   func configurationJson(filePath: String, password: String, configurationJson: String) {
     let rootNav = OpenPDFModule.presentedViewController()
-    let jsonDic = self.readJSON(configurationJson)
-    let configuration = self.parseJSON(jsonDic)
+    
+    let jsonDataParse = CPDFJSONDataParse(String: configurationJson)
+    guard let configuration = jsonDataParse.configuration else { return }
+    
     
     let pdfViewController = CPDFViewController(filePath: filePath, password: password, configuration: configuration)
     pdfViewController.delegate = self
@@ -50,103 +53,6 @@ class OpenPDFModule: NSObject, CPDFViewBaseControllerDelete {
     return true
   }
   
-  // MARK: - Private Methods
-  
-  func readJSON(_ jsonFilePath: String) -> Dictionary<String, Any> {
-    do {
-      if let jsonData = jsonFilePath.data(using: .utf8) {
-        
-        let jsonDic = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String: Any] ?? [String: Any]()
-        
-        return jsonDic
-      }
-      
-    } catch{
-      
-    }
-    
-    return Dictionary()
-  }
-  
-  func parseJSON(_ jsonDic: Dictionary<String, Any>) -> CPDFConfiguration {
-    let configuration = CPDFConfiguration()
-    
-    for (key, value) in jsonDic {
-      print("Key: \(key)")
-      if let innerDict = value as? [String: Any] {
-        for (innerKey, innerValue) in innerDict {
-          if let innerArray = innerValue as? [Any] {
-            if innerKey == "iosRightBarAvailableActions" {
-              for (_, item) in innerArray.enumerated() {
-                if item as! String == "search" {
-                  let search = CNavBarButtonItem(viewRightBarButtonItem: .search)
-                  configuration.showRightItems.append(search)
-                } else if item as! String == "bota" {
-                  let bota = CNavBarButtonItem(viewRightBarButtonItem: .bota)
-                  configuration.showRightItems.append(bota)
-                } else if item as! String == "menu" {
-                  let more = CNavBarButtonItem(viewRightBarButtonItem: .more)
-                  configuration.showRightItems.append(more)
-                }
-              }
-            } else if innerKey == "iosLeftBarAvailableActions" {
-              for (_, item) in innerArray.enumerated() {
-                
-                if item as! String == "back" {
-                  let back = CNavBarButtonItem(viewLeftBarButtonItem: .back)
-                  configuration.showleftItems.append(back)
-                } else if item as! String == "thumbnail" {
-                  let thumbnail = CNavBarButtonItem(viewLeftBarButtonItem: .thumbnail)
-                  configuration.showleftItems.append(thumbnail)
-                }
-              }
-            } else if innerKey == "availableMenus" {
-              for (_, item) in innerArray.enumerated() {
-                if item as! String == "viewSettings" {
-                  configuration.showMoreItems.append(.setting)
-                } else if item as! String == "documentEditor" {
-                  configuration.showMoreItems.append(.pageEdit)
-                } else if item as! String == "security" {
-                  configuration.showMoreItems.append(.security)
-                } else if item as! String == "watermark" {
-                  configuration.showMoreItems.append(.watermark)
-                } else if item as! String == "documentInfo" {
-                  configuration.showMoreItems.append(.info)
-                } else if item as! String == "save" {
-                  configuration.showMoreItems.append(.save)
-                } else if item as! String == "share" {
-                  configuration.showMoreItems.append(.share)
-                } else if item as! String == "openDocument" {
-                  configuration.showMoreItems.append(.addFile)
-                }
-              }
-            }
-          } else {
-            if innerKey == "initialViewMode" {
-              if innerValue as! String == "viewer" {
-                  configuration.enterToolModel = .viewer
-              } else if innerValue as! String == "annotations" {
-                  configuration.enterToolModel = .annotation
-              } else if innerValue as! String == "contentEditor" {
-                  configuration.enterToolModel = .edit
-              } else if innerValue as! String == "forms" {
-                  configuration.enterToolModel = .form
-              } else if innerValue as! String == "digitalSignatures" {
-                  configuration.enterToolModel = .signature
-              }
-            }
-          }
-        }
-      } else if let innerArray = value as? [Any] {
-        for (index, item) in innerArray.enumerated() {
-          print("  Item \(index): \(item)")
-        }
-      }
-    }
-    
-    return configuration
-  }
-  
   func PDFViewBaseControllerDissmiss(_ baseControllerDelete: CPDFViewBaseController) {
     baseControllerDelete.dismiss(animated: true)
   }

+ 2 - 2
ios/Podfile

@@ -30,8 +30,8 @@ target 'ComPDFKit_RN' do
 
   # Flags change depending on the env values.
   flags = get_default_flags()
-  pod "ComPDFKit", podspec:'https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit/1.11.0.podspec'
-  pod "ComPDFKit_Tools", podspec:'https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit_tools/1.11.0.podspec'
+  pod "ComPDFKit", podspec:'https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit/1.12.0.podspec'
+  pod "ComPDFKit_Tools", podspec:'https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit_tools/1.12.0.podspec'
 
   use_react_native!(
     :path => config[:reactNativePath],

+ 16 - 10
ios/Podfile.lock

@@ -1,8 +1,8 @@
 PODS:
   - boost (1.76.0)
   - CocoaAsyncSocket (7.6.5)
-  - ComPDFKit (1.11.0)
-  - ComPDFKit_Tools (1.11.0)
+  - ComPDFKit (1.12.0)
+  - ComPDFKit_Tools (1.12.0)
   - DoubleConversion (1.1.6)
   - FBLazyVector (0.72.5)
   - FBReactNativeSpec (0.72.5):
@@ -377,6 +377,8 @@ PODS:
   - React-jsinspector (0.72.5)
   - React-logger (0.72.5):
     - glog
+  - react-native-document-picker (9.1.0):
+    - React-Core
   - React-NativeModulesApple (0.72.5):
     - hermes-engine
     - React-callinvoker
@@ -494,8 +496,8 @@ PODS:
 
 DEPENDENCIES:
   - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
-  - ComPDFKit (from `https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit/1.11.0.podspec`)
-  - ComPDFKit_Tools (from `https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit_tools/1.11.0.podspec`)
+  - ComPDFKit (from `https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit/1.12.0.podspec`)
+  - ComPDFKit_Tools (from `https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit_tools/1.12.0.podspec`)
   - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
   - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
   - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
@@ -540,6 +542,7 @@ DEPENDENCIES:
   - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
   - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
   - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
+  - react-native-document-picker (from `../node_modules/react-native-document-picker`)
   - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
   - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
   - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
@@ -580,9 +583,9 @@ EXTERNAL SOURCES:
   boost:
     :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
   ComPDFKit:
-    :podspec: https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit/1.11.0.podspec
+    :podspec: https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit/1.12.0.podspec
   ComPDFKit_Tools:
-    :podspec: https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit_tools/1.11.0.podspec
+    :podspec: https://www.compdf.com/download/ios/cocoapods/xcframeworks/compdfkit_tools/1.12.0.podspec
   DoubleConversion:
     :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
   FBLazyVector:
@@ -624,6 +627,8 @@ EXTERNAL SOURCES:
     :path: "../node_modules/react-native/ReactCommon/jsinspector"
   React-logger:
     :path: "../node_modules/react-native/ReactCommon/logger"
+  react-native-document-picker:
+    :path: "../node_modules/react-native-document-picker"
   React-NativeModulesApple:
     :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
   React-perflogger:
@@ -664,8 +669,8 @@ EXTERNAL SOURCES:
 SPEC CHECKSUMS:
   boost: 57d2868c099736d80fcd648bf211b4431e51a558
   CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
-  ComPDFKit: 3a5153d59a6e0770c939e4b6043806a65c546abe
-  ComPDFKit_Tools: 2e2e1c412e674ed2128d5fdc9df52aa6575e890b
+  ComPDFKit: fa8cf83e29a4a789e3cabd99ab9b63e2a6c56c8e
+  ComPDFKit_Tools: 5b8cf981a8895c55847f9e4933066baa91c9d534
   DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
   FBLazyVector: 71803c074f6325f10b5ec891c443b6bbabef0ca7
   FBReactNativeSpec: 448e08a759d29a96e15725ae532445bf4343567c
@@ -697,6 +702,7 @@ SPEC CHECKSUMS:
   React-jsiexecutor: ff70a72027dea5cc7d71cfcc6fad7f599f63987a
   React-jsinspector: aef73cbd43b70675f572214d10fa438c89bf11ba
   React-logger: 2e4aee3e11b3ec4fa6cfd8004610bbb3b8d6cca4
+  react-native-document-picker: b4f4a23b73f864ce17965b284c0757648993805b
   React-NativeModulesApple: 797bc6078d566eef3fb3f74127e6e1d2e945a15f
   React-perflogger: cd8886513f68e1c135a1e79d20575c6489641597
   React-RCTActionSheet: 726d2615ca62a77ce3e2c13d87f65379cdc73498
@@ -718,6 +724,6 @@ SPEC CHECKSUMS:
   Yoga: 86fed2e4d425ee4c6eab3813ba1791101ee153c6
   YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
 
-PODFILE CHECKSUM: 4c7564c54a1d357e559e08004b9e323d01d55aaa
+PODFILE CHECKSUM: 4d85fe9fe196d18c488c53ef04e6284a16aac160
 
-COCOAPODS: 1.11.3
+COCOAPODS: 1.14.3

+ 3 - 2
package.json

@@ -1,6 +1,6 @@
 {
   "name": "ComPDFKit_RN",
-  "version": "1.0.0",
+  "version": "1.12.0",
   "private": true,
   "scripts": {
     "android": "react-native run-android",
@@ -11,7 +11,8 @@
   },
   "dependencies": {
     "react": "18.2.0",
-    "react-native": "0.72.5"
+    "react-native": "0.72.5",
+    "react-native-document-picker": "^9.1.0"
   },
   "devDependencies": {
     "@babel/core": "^7.20.0",

File diff suppressed because it is too large
+ 839 - 832
yarn.lock