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