Skip to content
ComPDF
Guides

创建文本与图片

ComPDF Flutter SDK 提供了便捷的 API 来创建文本和图片内容。

创建文本

此方法在指定页面插入一个新的文本区域。它在页面坐标系统内创建一个新的文本框,并将给定的文本内容写入其中。坐标原点 (0, 0) 位于页面的左下角。

参数说明:

  • pageIndex:目标页面的索引,将在该页面插入文本,从 0 开始。
  • content:要插入的文本内容。
  • offset:文本区域左下角在 PDF 页面坐标系中的位置(单位:点)。
  • maxWidth:文本区域的最大宽度。文本将在超过此宽度时自动换行。如果为 null,则宽度不受限制。
  • attr:文本属性,如字体大小、颜色、对齐方式等。默认使用标准的 CPDFEditorTextAttr 配置。

示例:

dart
bool result = await document.createNewTextArea(
  pageIndex: 0,
  content: 'ComPDF 插入文本 这是测试创建文本区域...',
  offset: const Offset(50, 800),
  maxWidth: 300,
  attr: const CPDFEditorTextAttr(
    fontSize: 18,
    fontColor: Colors.red,
    alignment: CPDFAlignment.left,
  ),
);

注意:目前2.6.0版本暂时仅支持在Android平台中使用,会在后续版本支持iOS平台。


创建图片

此方法在指定页面插入一个新的图片区域。它在页面坐标系统内创建一个新的图片框。坐标原点 (0, 0) 位于页面的左下角。

参数说明:

  • pageIndex:目标页面的索引,将在该页面插入图片,从 0 开始。
  • imageData:要插入的图片数据。支持多种格式:
    • 文件路径:CPDFImageData.fromPath('/path/to/image.png')
    • Base64:CPDFImageData.fromBase64('iVBORw0KGgo...')
    • 资源文件:CPDFImageData.fromAsset('assets/images/logo.png')
    • Uri(Android):CPDFImageData.fromUri('content://...')
  • offset:图片区域左下角在 PDF 页面坐标系中的位置(单位:点)。
  • width:图片区域的宽度。高度会根据图片的宽高比自动计算。如果为 null,则使用图片的原始宽度。

示例:

dart
// 从文件路径创建
bool result1 = await document.createNewImageArea(
  pageIndex: 0,
  imageData: CPDFImageData.fromPath('/path/to/image.png'),
  offset: const Offset(50, 700),
  width: 200,
);

// 从 Base64 创建
bool result2 = await document.createNewImageArea(
  pageIndex: 1,
  imageData: CPDFImageData.fromBase64('iVBORw0KGgoAAAANSUhEUgAAAAUA...'),
  offset: const Offset(100, 600),
  width: 150,
);

// 从资源文件创建
bool result3 = await document.createNewImageArea(
  pageIndex: 2,
  imageData: CPDFImageData.fromAsset('logo.png'),
  offset: const Offset(200, 500),
  width: null, // 使用原始宽度
);

注意:目前 2.6.0 版本仅支持 Android 平台,后续版本将支持 iOS 平台。

编辑模式内容插入

在内容编辑模式下,当点击 PDF 页面区域时,会自动创建文本输入框或弹出图片选择器,以便快速插入内容。在 2.6.0 版本中,您可以通过以下配置选项关闭此功能:

dart
CPDFConfiguration(
    readerViewConfig: CPDFReaderViewConfig(
      enableCreateImagePickerDialog: false,
      enableCreateEditTextInput: false
    )
  );