parseBytes method

Future<PdfDocument> parseBytes(
  1. Uint8List bytes
)

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);
}