apply method

Future<int> apply(
  1. int pageIndex,
  2. List<Rect> areas, {
  3. bool paintBlack = true,
  4. Color fill = const Color(0xFF000000),
})

Implementation

Future<int> apply(int pageIndex, List<Rect> areas, {bool paintBlack = true, Color fill = const Color(0xFF000000)}) async {
  if (areas.isEmpty) return 0;
  final UPdfPage? page = await document.page(pageIndex);
  final UPdfDict? mutable = await edit.mutablePage(pageIndex);
  if (page == null || mutable == null) return 0;
  final Uint8List content = await document.pageContent(page);
  final _UPdfRedactionPass pass = _UPdfRedactionPass(document: document, resources: page.resources, areas: areas);
  final Uint8List filtered = await pass.run(content);
  final int contentNumber = edit.allocate();
  edit.put(contentNumber, edit.buildStream(filtered));
  mutable["Contents"] = UPdfRef(contentNumber, 0);
  if (paintBlack) {
    final StringBuffer buffer = StringBuffer("${UPdfSerializer.number(fill.r)} ${UPdfSerializer.number(fill.g)} ${UPdfSerializer.number(fill.b)} rg\n");
    for (final Rect area in areas) {
      buffer.writeln("${UPdfSerializer.number(area.left)} ${UPdfSerializer.number(area.top)} ${UPdfSerializer.number(area.width)} ${UPdfSerializer.number(area.height)} re f");
    }
    await edit.appendContent(pageIndex, buffer.toString());
  }
  await _removeRedactAnnotations(pageIndex, mutable);
  return pass.removed;
}