File size: 1,384 Bytes
f340984
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import pytest
from PIL import Image

from unlimited_ocr_rdna4.errors import InferenceError
from unlimited_ocr_rdna4.pdf import PDFPageRenderer


def _make_pdf(path) -> None:
    image = Image.new("RGB", (120, 80), "white")
    try:
        image.save(path, format="PDF", resolution=72)
    finally:
        image.close()


def test_pdf_renders_one_page_at_a_time(tmp_path) -> None:
    pdf = tmp_path / "fixture.pdf"
    _make_pdf(pdf)
    with PDFPageRenderer(
        pdf,
        tmp_path,
        dpi=72,
        start_page=1,
        max_pages=1,
        max_page_pixels=20_000,
        max_total_pixels=20_000,
        max_page_rendered_bytes=1_000_000,
        max_rendered_bytes=1_000_000,
    ) as renderer:
        assert tuple(renderer.page_numbers) == (1,)
        rendered = renderer.render(1)
        assert rendered.is_file()


def test_pdf_rejects_page_over_pixel_limit(tmp_path) -> None:
    pdf = tmp_path / "fixture.pdf"
    _make_pdf(pdf)
    with (
        PDFPageRenderer(
            pdf,
            tmp_path,
            dpi=72,
            start_page=1,
            max_pages=1,
            max_page_pixels=1_000,
            max_total_pixels=20_000,
            max_page_rendered_bytes=1_000_000,
            max_rendered_bytes=1_000_000,
        ) as renderer,
        pytest.raises(InferenceError, match="would render"),
    ):
        renderer.render(1)