from itertools import takewhile, starmap, islice, repeat from operator import truth from pdf2image import pdf2image def chunk_iterable(iterable, n): return takewhile(truth, map(tuple, starmap(islice, repeat((iter(iterable), n))))) def get_page_count(pdf): return pdf2image.pdfinfo_from_bytes(pdf)["Pages"] def stream_pages(pdf): def page_to_image(idx): return pdf2image.convert_from_bytes(pdf, first_page=idx, last_page=idx + 1)[0] page_count = get_page_count(pdf) return map(page_to_image, range(page_count))