Generate document preview

Use Document.generate_preview to render document pages to image files (PNG, JPEG, or BMP). You configure the render with PreviewOptions and supply two callbacks: one that returns a writable stream for each page, and one that releases it after the page is written.

Render pages to PNG images

Pass the two callables directly to PreviewOptions(create_page_stream, release_page_stream) — the library invokes create_page_stream(page_number) to obtain a stream for each page and release_page_stream(page_number, page_stream) once the page has been written. Set preview_format and, optionally, page_numbers to limit which pages are rendered.

import os
from groupdocs.annotation import Annotator
from groupdocs.annotation.options import PreviewOptions, PreviewFormats

def generate_document_preview():
    output_dir = "./preview"
    os.makedirs(output_dir, exist_ok=True)

    # Track the open streams so each page's file can be closed after it is written
    open_streams = {}

    def create_page_stream(page_number):
        stream = open(os.path.join(output_dir, f"page_{page_number}.png"), "wb")
        open_streams[page_number] = stream
        return stream

    def release_page_stream(page_number, page_stream):
        stream = open_streams.pop(page_number, None)
        if stream:
            stream.close()

    with Annotator("./sample.pdf") as annotator:
        preview_options = PreviewOptions(create_page_stream, release_page_stream)
        preview_options.preview_format = PreviewFormats.PNG
        preview_options.page_numbers = [1]
        annotator.document.generate_preview(preview_options)

    print(f"Generated page preview image(s) in {output_dir}.")

if __name__ == "__main__":
    generate_document_preview()

PreviewFormats supports PNG, JPEG, and BMP. Other useful PreviewOptions properties include width/height, resolution, render_comments, and render_annotations.