setMetadata method
Implementation
Future<void> setMetadata(UDocMetadata metadata) async {
final Object? infoRef = document.xref.trailer?["Info"];
final int number = infoRef is UPdfRef ? infoRef.number : allocate();
final Object? existing = infoRef is UPdfRef ? await current(infoRef) : null;
final UPdfDict info = existing is UPdfDict ? existing.copy() : UPdfDict(<String, Object?>{});
void assign(String key, String? value) {
if (value == null) return;
if (value.isEmpty) {
info.entries.remove(key);
return;
}
info[key] = _text(value);
}
assign("Title", metadata.title);
assign("Author", metadata.author);
assign("Subject", metadata.subject);
assign("Keywords", metadata.keywords);
assign("Creator", metadata.creator);
assign("Producer", metadata.producer ?? "u_doc");
info["ModDate"] = _dateString(DateTime.now());
put(number, info);
if (infoRef is! UPdfRef) {
final UPdfDict trailer = document.xref.trailer ?? UPdfDict(<String, Object?>{});
trailer["Info"] = UPdfRef(number, 0);
document.xref.trailer = trailer;
}
}