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