page property

PdfPage? get page

Gets the page of the field.

Implementation

PdfPage? get page {
  if (_page == null) {
    final PdfFieldHelper helper = PdfFieldHelper.getHelper(_helper.field);
    final int backUpIndex = helper.defaultIndex;
    helper.defaultIndex = _helper._collectionIndex;
    _page = _helper.field.page;
    final PdfName pName = PdfName(PdfDictionaryProperties.p);
    final PdfArray? kids = helper.kids;
    if (kids != null && kids.count > 0) {
      final PdfCrossTable crosstable = helper.crossTable!;
      final PdfDocument? doc = crosstable.document;
      if (doc != null && PdfDocumentHelper.getHelper(doc).isLoadedDocument) {
        if (_helper.dictionary!.containsKey(pName)) {
          final IPdfPrimitive? pageRef = crosstable
              .getObject(_helper.dictionary![PdfDictionaryProperties.p]);
          if (pageRef != null && pageRef is PdfDictionary) {
            final PdfReference widgetReference =
                crosstable.getReference(_helper.dictionary);
            for (int i = 0; i < doc.pages.count; i++) {
              final PdfPage loadedPage = doc.pages[i];
              final PdfArray? lAnnots =
                  PdfPageHelper.getHelper(loadedPage).obtainAnnotations();
              if (lAnnots != null) {
                for (int i = 0; i < lAnnots.count; i++) {
                  final IPdfPrimitive? holder = lAnnots[i];
                  if (holder != null &&
                      holder is PdfReferenceHolder &&
                      holder.reference != null &&
                      holder.reference!.objNum == widgetReference.objNum &&
                      holder.reference!.genNum == widgetReference.genNum) {
                    _page = PdfPageCollectionHelper.getHelper(doc.pages)
                        .getPage(pageRef);
                    helper.defaultIndex = backUpIndex;
                    return _page;
                  }
                }
              }
              if (_helper.dictionary!
                  .containsKey(PdfDictionaryProperties.p)) {
                final IPdfPrimitive? itemPageDict = PdfCrossTable.dereference(
                    _helper.dictionary![PdfDictionaryProperties.p]);
                final PdfDictionary pageDict =
                    PdfPageHelper.getHelper(loadedPage).dictionary!;
                if (itemPageDict is PdfDictionary &&
                    itemPageDict == pageDict) {
                  _page = loadedPage;
                  helper.defaultIndex = backUpIndex;
                  return _page;
                }
              }
            }
            helper.defaultIndex = backUpIndex;
            _page = null;
          }
        } else {
          final PdfReference widgetReference =
              crosstable.getReference(_helper.dictionary);
          for (int i = 0; i < doc.pages.count; i++) {
            final PdfPage loadedPage = doc.pages[i];
            final PdfArray? lAnnots =
                PdfPageHelper.getHelper(loadedPage).obtainAnnotations();
            if (lAnnots != null) {
              for (int i = 0; i < lAnnots.count; i++) {
                final IPdfPrimitive? holder = lAnnots[i];
                if (holder != null &&
                    holder is PdfReferenceHolder &&
                    holder.reference!.objNum == widgetReference.objNum &&
                    holder.reference!.genNum == widgetReference.genNum) {
                  return _page = loadedPage;
                }
              }
            }
          }
          _page = null;
        }
      }
    }
    helper.defaultIndex = backUpIndex;
  }
  return _page;
}