writeSignature method

Future<bool> writeSignature(
  1. CPDFSignatureWidget widget,
  2. String outputPath,
  3. CPDFDigitalSignatureConfig config
)

Writes a digital signature to outputPath using widget and config.

The source document is not overwritten. The widget must come from this document's CPDFPage.getWidgets result so its native UUID can be resolved.

example:

// signatureWidget came from the current document or the reader callback.
final success = await document.writeSignature(
  signatureWidget,
  '/path/to/signed.pdf',
  CPDFDigitalSignatureConfig(
    certificatePath: certificatePath,
    password: password,
    reason: 'Approved',
  ),
);

Implementation

Future<bool> writeSignature(
  CPDFSignatureWidget widget,
  String outputPath,
  CPDFDigitalSignatureConfig config,
) async {
  if (widget.uuid.isEmpty) {
    throw ArgumentError.value(
      widget.uuid,
      'widget.uuid',
      'A native signature widget UUID is required.',
    );
  }
  if (widget.page < 0) {
    throw ArgumentError.value(
      widget.page,
      'widget.page',
      'The page index must not be negative.',
    );
  }
  if (outputPath.isEmpty) {
    throw ArgumentError.value(
      outputPath,
      'outputPath',
      'An output path is required.',
    );
  }
  if (config.certificatePath.isEmpty) {
    throw ArgumentError.value(
      config.certificatePath,
      'config.certificatePath',
      'A certificate path is required.',
    );
  }
  if (config.password.isEmpty) {
    throw ArgumentError.value(
      config.password,
      'config.password',
      'A certificate password is required.',
    );
  }
  final timestampServerUrl = config.timestampServerUrl;
  if (timestampServerUrl != null &&
      !_isTimestampServerUrl(timestampServerUrl)) {
    throw ArgumentError.value(
      timestampServerUrl,
      'config.timestampServerUrl',
      'The timestamp server URL must be an http or https URL.',
    );
  }
  final result = await _channel.invokeMethod<bool>('write_signature', {
    'page_index': widget.page,
    'uuid': widget.uuid,
    'output_path': outputPath,
    'config': config.toJson(),
  });
  return result ?? false;
}