links method

Future<List<UDocLink>> links(
  1. int pageIndex
)

Implementation

Future<List<UDocLink>> links(int pageIndex) async {
  final UPdfPage? target = await page(pageIndex);
  if (target == null) return const <UDocLink>[];
  final Object? annotations = await resolve(target.dict["Annots"]);
  if (annotations is! List<Object?>) return const <UDocLink>[];
  final List<UDocLink> out = <UDocLink>[];
  for (final Object? entry in annotations) {
    final Object? annotation = await resolve(entry);
    if (annotation is! UPdfDict) continue;
    final Object? subtype = annotation["Subtype"];
    if (subtype is! UPdfName || subtype.value != "Link") continue;
    final Object? rectObject = await resolve(annotation["Rect"]);
    final Rect rect = uPdfRectFromArray(rectObject is List<Object?> ? rectObject : null, fallback: Rect.zero);
    UDocDestination? target2 = await destination(annotation["Dest"]);
    String? uri;
    String? actionName;
    final Object? action = await resolve(annotation["A"]);
    if (action is UPdfDict) {
      final Object? actionType = action["S"];
      actionName = actionType is UPdfName ? actionType.value : null;
      if (actionName == "URI") {
        final Object? uriObject = await resolve(action["URI"]);
        uri = uriObject is UPdfString ? uriObject.text : null;
      }
      target2 ??= await destination(action["D"]);
    }
    out.add(UDocLink(pageIndex: pageIndex, rect: rect, destination: target2, uri: uri, action: actionName));
  }
  return out;
}