parseBytes method
Implementation
Future<PdfDocument> parseBytes(Uint8List bytes) async {
final content = ascii.decode(bytes, allowInvalid: true); // safer for PDF headers
// Naive object parser (expand later)
final objects = <PdfObject>[];
final pages = <PdfPage>[];
final regex = RegExp(r'(\d+) (\d+) obj(.*?)endobj', dotAll: true);
for (final match in regex.allMatches(content)) {
objects.add(PdfObject(
number: int.parse(match.group(1)!),
generation: int.parse(match.group(2)!),
content: match.group(3)!.trim(),
rawBytes: match.group(0)!.codeUnits,
));
}
// Find pages
for (var obj in objects) {
if (obj.content.contains("/Type /Page")) {
pages.add(PdfPage(number: obj.number));
}
}
return PdfDocument(objects: objects, pages: pages);
}