object method

Future<Object?> object(
  1. UPdfRef ref, {
  2. bool decrypt = true,
})

Implementation

Future<Object?> object(UPdfRef ref, {bool decrypt = true}) async {
  if (_closed) return null;
  if (overlay.containsKey(ref.number)) return overlay[ref.number];
  final Object? cached = _objects.get(ref.number);
  if (cached != null) return cached;
  if (_objects.containsKey(ref.number)) return null;
  if (!_resolving.add(ref.number)) return null;
  try {
    final UPdfXrefEntry? entry = xref.entries[ref.number];
    if (entry == null || entry.isFree) return null;
    Object? parsed;
    if (entry.isCompressed) {
      final Map<int, Object?>? contents = await _objectStreamContents(entry.streamNumber);
      parsed = contents?[ref.number];
    } else {
      parsed = await _parseIndirectAt(entry.offset, expectedNumber: ref.number, generation: entry.generation, decrypt: decrypt);
    }
    _objects.put(ref.number, parsed);
    return parsed;
  } on Object {
    return null;
  } finally {
    _resolving.remove(ref.number);
  }
}