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.