appendContent method
Implementation
Future<void> appendContent(int pageIndex, String operators, {Map<String, Object?> extraResources = const <String, Object?>{}}) async {
final UPdfDict? page = await mutablePage(pageIndex);
if (page == null) return;
final int number = allocate();
put(number, buildStream(Uint8List.fromList(utf8.encode("\nq\n$operators\nQ\n"))));
final Object? contents = page["Contents"];
if (contents is List<Object?>) {
page["Contents"] = <Object?>[...contents, UPdfRef(number, 0)];
} else if (contents != null) {
page["Contents"] = <Object?>[contents, UPdfRef(number, 0)];
} else {
page["Contents"] = <Object?>[UPdfRef(number, 0)];
}
if (extraResources.isEmpty) return;
final Object? resolved = await document.resolve(page["Resources"]);
final UPdfDict resources = resolved is UPdfDict ? resolved.copy() : UPdfDict(<String, Object?>{});
extraResources.forEach((String key, Object? value) {
final Object? existing = resources[key];
if (existing is UPdfDict && value is UPdfDict) {
final UPdfDict merged = existing.copy();
value.entries.forEach((String innerKey, Object? innerValue) => merged[innerKey] = innerValue);
resources[key] = merged;
} else {
resources[key] = value;
}
});
page["Resources"] = resources;
}