decodePageContent function
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();
}