libai 1 рік тому
батько
коміт
96b3f24163

BIN
ComPDFKit_Repo/compdfkit-ui/ComPDFKit-UI.aar


BIN
ComPDFKit_Repo/compdfkit/ComPDFKit.aar


+ 17 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/common/views/CToolBar.java

@@ -17,6 +17,7 @@ import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.TypedValue;
 import android.view.LayoutInflater;
+import android.view.View;
 import android.widget.FrameLayout;
 
 import androidx.annotation.DrawableRes;
@@ -29,6 +30,8 @@ import androidx.appcompat.widget.AppCompatTextView;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.utils.viewutils.CDimensUtils;
 import com.compdfkit.tools.common.utils.viewutils.CViewUtils;
+import com.compdfkit.tools.common.views.pdfview.CPDFViewCtrl;
+import com.compdfkit.ui.reader.CPDFReaderView;
 
 /**
  * compdfkit-tools ui common toolbar
@@ -57,9 +60,11 @@ import com.compdfkit.tools.common.utils.viewutils.CViewUtils;
  * @see CToolBar#setBackBtnClickListener(OnClickListener)
  */
 public class CToolBar extends FrameLayout {
+    private AppCompatTextView tvToolBarReplace;
     private AppCompatTextView tvToolBarTitle;
 
     private AppCompatImageView ivToolBarBackBtn;
+    CPDFViewCtrl pdfView;
 
     public CToolBar(@NonNull Context context) {
         this(context, null);
@@ -76,6 +81,7 @@ public class CToolBar extends FrameLayout {
 
     private void initToolBar(Context context, @Nullable AttributeSet attrs) {
         LayoutInflater.from(getContext()).inflate(R.layout.tools_ctool_bar, this);
+        tvToolBarReplace = findViewById(R.id.tv_tool_bar_replace);
         tvToolBarTitle = findViewById(R.id.tv_tool_bar_title);
         ivToolBarBackBtn = findViewById(R.id.iv_tool_bar_back);
         initAttributes(context, attrs);
@@ -103,6 +109,17 @@ public class CToolBar extends FrameLayout {
         ivToolBarBackBtn.setOnClickListener(clickListener);
     }
 
+    public void initWithPDFView(CPDFViewCtrl pdfView) {
+        this.pdfView = pdfView;
+        if (this.pdfView.getCPdfReaderView().getViewMode() == CPDFReaderView.ViewMode.PDFEDIT) {
+            tvToolBarReplace.setVisibility(View.VISIBLE);
+        }
+    }
+
+    public void setReplaceClickListener(OnClickListener clickListener) {
+        tvToolBarReplace.setOnClickListener(clickListener);
+    }
+
     public void setTitle(@StringRes int titleResId) {
         tvToolBarTitle.setText(titleResId);
     }

+ 100 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/viewer/pdfsearch/CSearchResultDialogFragment.java

@@ -1,19 +1,31 @@
 package com.compdfkit.tools.viewer.pdfsearch;
 
+import android.content.Context;
+import android.content.DialogInterface;
+import android.util.Log;
+import android.util.SparseArray;
 import android.view.View;
+import android.widget.EditText;
 
+import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.widget.AppCompatTextView;
 import androidx.constraintlayout.widget.ConstraintLayout;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.compdfkit.core.edit.CPDFEditFindSelection;
+import com.compdfkit.core.edit.CPDFEditManager;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.basic.fragment.CBasicBottomSheetDialogFragment;
 import com.compdfkit.tools.common.utils.viewutils.CViewUtils;
 import com.compdfkit.tools.common.views.CToolBar;
+import com.compdfkit.tools.common.views.pdfview.CPDFViewCtrl;
 import com.compdfkit.tools.viewer.pdfsearch.adapter.CSearchPDFTextRecyclerviewAdapter;
 import com.compdfkit.tools.viewer.pdfsearch.bean.CSearchTextInfo;
+import com.compdfkit.ui.edit.CPDFEditTextSearchReplace;
+import com.compdfkit.ui.reader.CPDFReaderView;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public class CSearchResultDialogFragment extends CBasicBottomSheetDialogFragment {
@@ -30,7 +42,13 @@ public class CSearchResultDialogFragment extends CBasicBottomSheetDialogFragment
     private CSearchPDFTextRecyclerviewAdapter searchTextAdapter;
 
     private CSearchPDFTextRecyclerviewAdapter.OnClickSearchItemListener onClickSearchItemListener;
+    CPDFViewCtrl pdfView;
+    Context context;
 
+    ReplaceListener replaceListener = null;
+    public  void setReplaceListener(ReplaceListener listener) {
+        replaceListener = listener;
+    }
     @Override
     protected float dimAmount() {
         return CViewUtils.isLandScape(getContext()) ? 0.2F : 0F;
@@ -61,11 +79,67 @@ public class CSearchResultDialogFragment extends CBasicBottomSheetDialogFragment
         super.onDestroy();
     }
 
+    public void initWithPDFView(CPDFViewCtrl pdfView) {
+        this.pdfView = pdfView;
+    }
+
+    void createDialog() {
+        AlertDialog.Builder builder = new AlertDialog.Builder(pdfView.getContext());
+        EditText editText = new EditText(pdfView.getContext());
+        builder.setMessage("全部替换为");
+        editText.setHint("pdf");
+        builder.setView(editText);
+
+        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialogInterface, int i) {
+                if (searchTextInfos != null && searchTextInfos.size() > 1) {
+                    CSearchTextInfo info = searchTextInfos.get(1);
+                    if (info == null) return;
+                    CPDFReaderView readerView = pdfView.getCPdfReaderView();
+                    if (readerView == null) return;
+                    CPDFEditTextSearchReplace searchReplace = readerView.getEditTextSearchReplace();
+                    if (searchReplace == null) return;
+                    searchReplace.setSearchConfig(info.keyword, 0);
+                    CPDFEditManager editManager = readerView.getEditManager();
+                    if (editManager == null) return;
+ //                   editManager.beginEdit(3);
+                    searchReplace.findSelections();
+                    searchReplace.replaceAll(editText.getText().toString());
+
+//                for (int i = 0; i < searchTextInfos.size(); i++) {
+//                    CSearchTextInfo info = searchTextInfos.get(i);
+//                    if (info == null) continue;
+//                    if (info.isHeader) {
+//                        searchReplace.findEditString(i);
+//                        searchReplace.replaceAll("ABCD");
+//                    }
+//                }
+ //                   editManager.endEdit();
+                    dismiss();
+                    if (replaceListener != null) {
+                        replaceListener.onReplaceEnd();
+                    }
+                }
+            }
+        });
+        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialogInterface, int i) {
+                dismiss();
+            }
+        });
+        AlertDialog dialog = builder.create();
+        dialog.show();
+    }
+
+
     private void initView() {
         toolBar = mContentView.findViewById(R.id.id_search_head);
         recyclerView = mContentView.findViewById(R.id.id_reader_search_recyclerView);
         clSearchResultEmpty = mContentView.findViewById(R.id.cl_search_result_empty_view);
         AppCompatTextView tvResultInfo = mContentView.findViewById(R.id.tv_search_result);
+        toolBar.initWithPDFView(pdfView);
         if (searchTextInfos != null) {
             tvResultInfo.setText(getContext().getString(R.string.tools_search_result_found, searchTextInfos.size()));
         }
@@ -83,6 +157,28 @@ public class CSearchResultDialogFragment extends CBasicBottomSheetDialogFragment
         toolBar.setBackBtnClickListener(view -> {
             dismiss();
         });
+        toolBar.setReplaceClickListener(view -> {
+            if (searchTextInfos != null) {
+//                Log.e("ss","ttttttt1");
+//                CPDFReaderView readerView = pdfView.getCPdfReaderView();
+//                if (readerView == null) return;
+//                CPDFEditTextSearchReplace searchReplace = readerView.getEditTextSearchReplace();
+//                searchReplace.setSearchConfig("pdf", 0);
+//                if (searchReplace == null) return;
+//                CPDFEditManager editManager = readerView.getEditManager();
+//                if (editManager == null) return;
+// //               editManager.beginEdit(3);
+//                Log.e("ss","ttttttt2");
+//                SparseArray<ArrayList<CPDFEditFindSelection>> ss = searchReplace.findSelections();
+//                Log.e("ss","ttttttt3");
+//                Log.e("ssss","bbbbbb find:ss="+(ss==null?"null":"not null"));
+//                Log.e("ss","bbbbb:n="+ss.size());
+//                searchReplace.replaceAll("ABCD");
+  //              editManager.endEdit();
+                createDialog();
+            }
+
+        });
         searchTextAdapter.setOnClickSearchItemListener(onClickSearchItemListener);
     }
 
@@ -101,4 +197,8 @@ public class CSearchResultDialogFragment extends CBasicBottomSheetDialogFragment
             searchTextAdapter.setOnClickSearchItemListener(listener);
         }
     }
+
+    public interface ReplaceListener {
+        public void onReplaceEnd();
+    }
 }

+ 31 - 0
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/viewer/pdfsearch/CSearchToolbar.java

@@ -43,6 +43,11 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
     private ImageView ivSearchResultList;
 
     private boolean enableSearchResultList = true;
+    OnSearchListener onSearchListener = null;
+
+    public void setOnExitSearchListener(OnSearchListener listener) {
+        onSearchListener = listener;
+    }
 
     public CSearchToolbar(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -122,6 +127,9 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
             @Override
             protected void onPreExecute() {
                 super.onPreExecute();
+                if (onSearchListener != null) {
+                    onSearchListener.onStartSearch();
+                }
             }
 
             @Override
@@ -135,6 +143,9 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
                 if (searchResultListener != null) {
                     searchResultListener.result(list);
                 }
+                if (onSearchListener != null) {
+                    onSearchListener.onEndSearch();
+                }
             }
         };
         searchTask.execute();
@@ -148,6 +159,21 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
         pdfView.getCPdfReaderView().getTextSearcher().searchForward();
     }
 
+    public void exitSearch() {
+        cancelTask();
+        ITextSearcher searcher = pdfView.getCPdfReaderView().getTextSearcher();
+        if (searcher != null) {
+            searcher.cancelSearch();
+            pdfView.getCPdfReaderView().invalidateAllChildren();
+        }
+        hideKeyboard();
+        if (null != onExitSearchListener) {
+            onExitSearchListener.exitSearch();
+        }
+        etSearchKeywords.clearFocus();
+        etSearchKeywords.setText("");
+    }
+
     @Override
     public void onClick(View view) {
         int id = view.getId();
@@ -223,4 +249,9 @@ public class CSearchToolbar extends RelativeLayout implements View.OnClickListen
     public interface OnExitSearchListener {
         void exitSearch();
     }
+
+    public interface OnSearchListener {
+        void onStartSearch();
+        void onEndSearch();
+    }
 }

+ 19 - 1
ComPDFKit_Tools/src/main/res/layout/tools_ctool_bar.xml

@@ -6,6 +6,24 @@
     android:layout_height="match_parent"
     tools:layout_height="?android:attr/actionBarSize">
 
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_tool_bar_replace"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="10dp"
+        android:layout_marginEnd="24dp"
+        android:fontFamily="sans-serif-medium"
+        android:textColor="@color/tools_error"
+        android:textSize="22sp"
+        android:visibility="gone"
+        android:text="全部替换"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/tv_tool_bar_title"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintStart_toEndOf="@id/iv_tool_bar_back"
+        app:layout_constraintTop_toTopOf="parent"
+        />
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_tool_bar_title"
@@ -20,7 +38,7 @@
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0"
-        app:layout_constraintStart_toEndOf="@id/iv_tool_bar_back"
+        app:layout_constraintStart_toEndOf="@id/tv_tool_bar_replace"
         app:layout_constraintTop_toTopOf="parent"
         />
 

+ 24 - 1
ContentEditor/src/main/java/com/compdfkit/contenteditor/PDFEditSampleActivity.java

@@ -44,6 +44,7 @@ import com.compdfkit.tools.common.views.pdfproperties.pdfstyle.manager.CStyleMan
 import com.compdfkit.tools.common.views.pdfview.CPreviewMode;
 import com.compdfkit.tools.contenteditor.CPDFEditPage;
 import com.compdfkit.tools.viewer.pdfsearch.CSearchResultDialogFragment;
+import com.compdfkit.tools.viewer.pdfsearch.CSearchToolbar;
 import com.compdfkit.ui.reader.CPDFPageView;
 import com.compdfkit.ui.reader.CPDFReaderView;
 
@@ -112,7 +113,7 @@ public class PDFEditSampleActivity extends CBasicPDFActivity {
             CPDFEditManager editManager = binding.pdfView.getCPdfReaderView().getEditManager();
             if (editManager.isEditMode()) {
                 curEditMode = binding.pdfView.getCPdfReaderView().getLoadType();
-                editManager.endEdit();
+  //              editManager.endEdit();
             }
             binding.pdfToolBar.setVisibility(View.GONE);
             binding.pdfSearchToolBar.setVisibility(View.VISIBLE);
@@ -207,6 +208,7 @@ public class PDFEditSampleActivity extends CBasicPDFActivity {
         binding.pdfSearchToolBar.initWithPDFView(binding.pdfView);
         binding.pdfSearchToolBar.onSearchQueryResults(list -> {
             CSearchResultDialogFragment searchResultDialog = new CSearchResultDialogFragment();
+            searchResultDialog.initWithPDFView(binding.pdfView);
             searchResultDialog.show(getSupportFragmentManager(), "searchResultDialogFragment");
             searchResultDialog.setSearchTextInfos(list);
             searchResultDialog.setOnClickSearchItemListener(clickItem -> {
@@ -214,6 +216,16 @@ public class PDFEditSampleActivity extends CBasicPDFActivity {
                 binding.pdfView.getCPdfReaderView().getTextSearcher().searchBegin(clickItem.page, clickItem.textRangeIndex);
                 searchResultDialog.dismiss();
             });
+            
+            searchResultDialog.setReplaceListener(new CSearchResultDialogFragment.ReplaceListener() {
+                @Override
+                public void onReplaceEnd() {
+                    binding.pdfSearchToolBar.exitSearch();
+                    setPreviewMode(CPreviewMode.Viewer);
+                    //setPreviewMode(CPreviewMode.Edit);
+                }
+            });
+
         });
 
         binding.pdfSearchToolBar.setExitSearchListener(() -> {
@@ -225,6 +237,17 @@ public class PDFEditSampleActivity extends CBasicPDFActivity {
             binding.pdfToolBar.setVisibility(View.VISIBLE);
             binding.pdfSearchToolBar.setVisibility(View.GONE);
         });
+        binding.pdfSearchToolBar.setOnExitSearchListener(new CSearchToolbar.OnSearchListener() {
+            @Override
+            public void onStartSearch() {
+                binding.pdfEditProgressbar.setVisibility(View.VISIBLE);
+            }
+
+            @Override
+            public void onEndSearch() {
+                binding.pdfEditProgressbar.setVisibility(View.GONE);
+            }
+        });
     }
 
     private void initEditBar() {

+ 11 - 0
ContentEditor/src/main/res/layout/edit_pdf_sample_activity.xml

@@ -71,4 +71,15 @@
             app:layout_constraintStart_toStartOf="parent" />
     </FrameLayout>
 
+    <ProgressBar
+        android:id="@+id/pdf_edit_progressbar"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:indeterminate="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:visibility="gone" />
+
 </androidx.constraintlayout.widget.ConstraintLayout>