decodePageContent function

Uint8List? decodePageContent(
  1. PdfDocumentParser parser,
  2. int pageIndex
)

Content stream of a page, with every part of /Contents concatenated and decompressed.

Returns null when the page does not exist; returns empty bytes when the page exists but has no content.

Implementation

Uint8List? decodePageContent(PdfDocumentParser parser, int pageIndex) {
  final page = parser.pageDictAt(pageIndex);
  if (page == null) return null;

  final parts = BytesBuilder(copy: false);
  void addStream(dynamic value) {
    final ref = PdfParserObjects.asRef(value);
    if (ref == null) return;
    final object = parser.getObject(ref.obj);
    final raw = object?.streamData;
    if (object == null || raw == null) return;
    final dict = object.value;
    if (dict is! PdfDictToken) return;
    final data = decodeStreamData(parser, dict, raw);
    if (data == null) return;
    if (parts.length > 0) parts.addByte(0x0A);
    parts.add(data);
  }

  final contents = parser.resolve(page.values['/Contents']);
  if (contents is PdfArrayToken) {
    for (final item in contents.values) {
      addStream(item);
    }
  } else {
    addStream(page.values['/Contents']);
  }

  return parts.toBytes();
}