appendContent method

Future<void> appendContent(
  1. int pageIndex,
  2. String operators, {
  3. Map<String, Object?> extraResources = const <String, Object?>{},
})

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;
}