Skip to content

创建、移动、删除文本和图像

ComPDFKit 提供了完整丰富的创建、移动、删除文本和图像的方法。

通过CPDFReaderView操作

CPDFReaderView默认提供基本的交互能力,允许用户创建和删除文本和图像,拖拽移动图片和文字块位置,调整图片和文字块大小等,实现类似在常见文字处理软件中的操作。

设置上下文菜单

如果需要复制、粘贴、剪切或删除文本或图片,可以通过CPDFReaderViewsetContextMenuShowListener事件在上下文菜单中添加这些操作方法。

以下是如何在上下文菜单中添加复制、粘贴、删除等操作的示例代码:

edit_text_area_menu_layout.xml:

xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/edit_copy"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:gravity="center"
        android:text="copy" />
    <TextView
        android:id="@+id/edit_paste"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:gravity="center"
        android:text="paste" />
    <TextView
        android:id="@+id/edit_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:gravity="center"
        android:text="delete" />

</LinearLayout>
java
public class DemoContextMenuHelper extends CPDFContextMenuShowHelper {

  public DemoContextMenuHelper(CPDFReaderView cpdfReaderView) {
    super(cpdfReaderView);
  }

  @Override
  public View getEditTextAreaContentView(CPDFPageView cpdfPageView, LayoutInflater layoutInflater, CPDFEditSelections cpdfEditSelections) {
    View contentView = layoutInflater.inflate(R.layout.edit_text_area_menu_layout, null);
    invokeOnClickListener(contentView, v -> {
      try {
        int id = v.getId();
        if (id == R.id.edit_copy) {
          pageView.operateEditTextArea(CPDFPageView.EditTextAreaFuncType.COPY);
        } else if (id == R.id.edit_paste) {
          pageView.operateEditText(CPDFPageView.EditTextFuncType.PASTE);
        } else if (id == R.id.edit_delete) {
          pageView.operateEditTextArea(CPDFPageView.EditTextAreaFuncType.DELETE);
        }
      } finally {
        dismissContextMenu();
      }
    }, R.id.edit_copy, R.id.edit_paste, R.id.edit_delete);
    return contentView;
  }
}
...
// 初始化CPDFReaderView
CPDFReaderView readerView = findViewById(R.id.readerView);
CPDFDocument document = new CPDFDocument(context);
document.open(pdfPath);
readerView.setPDFDocument(document);
// 设置自定义的上下文菜单
readerView.setContextMenuShowListener(new DemoContextMenuHelper(readerView));
kotlin
class DemoContextMenuHelper(cpdfReaderView: CPDFReaderView) :
CPDFContextMenuShowHelper(cpdfReaderView) {

  override fun getEditTextAreaContentView(
    cpdfPageView: CPDFPageView,
    layoutInflater: LayoutInflater,
    cpdfEditSelections: CPDFEditSelections
  ): View {
    
    val contentView: View = layoutInflater.inflate(R.layout.edit_text_area_menu_layout, null)
    invokeOnClickListener(contentView, { v: View ->
        try {
            val id = v.id
            if (id == R.id.edit_copy) {
                pageView.operateEditTextArea(CPDFPageView.EditTextAreaFuncType.COPY)
            } else if (id == R.id.edit_paste) {
                pageView.operateEditText(CPDFPageView.EditTextFuncType.PASTE)
            } else if (id == R.id.edit_delete) {
                pageView.operateEditTextArea(CPDFPageView.EditTextAreaFuncType.DELETE)
            }
        } finally {
            dismissContextMenu()
        }
    }, R.id.edit_copy, R.id.edit_paste, R.id.edit_delete)
    return contentView
  }
}
...
// 初始化CPDFReaderView
val readerView = findViewById<CPDFReaderView>(R.id.readerView)
val document = CPDFDocument(context)
document.open(pdfPath)
readerView.pdfDocument = document
// 设置自定义的上下文菜单
readerView.contextMenuShowListener = DemoContextMenuHelper(readerView)

插入文字和图片

您可以通过CPDFEditManagerbeginEdit方法来指定是否可以插入文字和图片块。下面的代码将向您展示如何执行此操作:

java
CPDFEditManager editManager = cpdfReaderView.getEditManager();
// 允许插入图片。
editManager.beginEdit(CPDFEditPage.LoadImage);
// 允许插入文字。
editManager.beginEdit(CPDFEditPage.LoadText);
// 允许取消插入内容状态
editManager.beginEdit(CPDFEditPage.LoadNone);