updateFieldMetadata method

bool updateFieldMetadata(
  1. PdfSignatureFieldObjectInfo field, {
  2. String? reason,
  3. String? location,
  4. String? name,
  5. String? signingTimeRaw,
})

Updates metadata stored in the field dictionary.

Implementation

bool updateFieldMetadata(
  PdfSignatureFieldObjectInfo field, {
  String? reason,
  String? location,
  String? name,
  String? signingTimeRaw,
}) {
  void applyTo(PdfDict<PdfDataType> target) {
    if (reason != null) {
      target[PdfNameTokens.reason] = PdfString.fromString(reason);
    }
    if (location != null) {
      target[PdfNameTokens.location] = PdfString.fromString(location);
    }
    if (name != null) {
      target[PdfNameTokens.name] = PdfString.fromString(name);
    }
    if (signingTimeRaw != null) {
      target[PdfNameTokens.m] = PdfString.fromString(signingTimeRaw);
    }
  }

  // `/Reason`, `/Location`, `/Name` and `/M` are entries of the signature
  // dictionary (ISO 32000-1 ยง12.8.1), not of the field. Writing them on the
  // field would leave the signature dictionary value prevailing on read.
  final signatureDict = field.signatureDict;
  final signatureRef = field.signatureRef;
  if (signatureDict != null && signatureRef != null) {
    final updatedSignature = PdfDict<PdfDataType>.values(
      Map<String, PdfDataType>.from(signatureDict.values),
    );
    applyTo(updatedSignature);
    PdfObject<PdfDict<PdfDataType>>(
      document,
      objser: signatureRef.obj,
      objgen: signatureRef.gen,
      params: updatedSignature,
    );
    return true;
  }

  final updated = PdfDict<PdfDataType>.values(
    Map<String, PdfDataType>.from(field.fieldDict.values),
  );
  applyTo(updated);

  if (field.fieldRef != null) {
    PdfObject<PdfDict<PdfDataType>>(
      document,
      objser: field.fieldRef!.obj,
      objgen: field.fieldRef!.gen,
      params: updated,
    );
    return true;
  }
  return _replaceDirectField(field, updated);
}