diff --git a/pypdf/_page.py b/pypdf/_page.py index e7b47882c..5fed53636 100644 --- a/pypdf/_page.py +++ b/pypdf/_page.py @@ -1503,7 +1503,7 @@ def scale(self, sx: float, sy: float) -> None: Scale a page by the given factors by applying a transformation matrix to its content and updating the page size. - This updates the various page boundaries (mediabox, cropbox, etc.) + This updates the various page boundaries (artbox, cropbox, etc.) and the contents of the page. Args: @@ -1512,11 +1512,11 @@ def scale(self, sx: float, sy: float) -> None: """ self.add_transformation((sx, 0, 0, sy, 0, 0)) - self.mediabox = self.mediabox.scale(sx, sy) - self.cropbox = self.cropbox.scale(sx, sy) self.bleedbox = self.bleedbox.scale(sx, sy) self.trimbox = self.trimbox.scale(sx, sy) self.artbox = self.artbox.scale(sx, sy) + self.cropbox = self.cropbox.scale(sx, sy) + self.mediabox = self.mediabox.scale(sx, sy) if PG.ANNOTS in self: annotations = self[PG.ANNOTS] diff --git a/tests/test_page.py b/tests/test_page.py index f7f1b9430..56ed41b8c 100644 --- a/tests/test_page.py +++ b/tests/test_page.py @@ -1504,3 +1504,27 @@ def __getitem__(self, item) -> Any: page[NameObject("/Resources")] = resources with mock.patch.object(none_reference, "get_object", return_value=None): assert page.extract_text() == "" + + +@pytest.mark.enable_socket +def test_scale_by(): + """Tests for #3487""" + url = "https://github.com/user-attachments/files/22685841/input.pdf" + name = "issue3487.pdf" + reader = PdfReader(BytesIO(get_data_from_url(url, name=name))) + + original_box = RectangleObject((0, 0, 595.275604, 841.88974)) + expected_box = RectangleObject((0.0, 0.0, 297.637802, 420.94487)) + for page in reader.pages: + assert page.artbox == original_box + assert page.bleedbox == original_box + assert page.cropbox == original_box + assert page.mediabox == original_box + assert page.trimbox == original_box + + page.scale_by(0.5) + assert page.artbox == expected_box + assert page.bleedbox == expected_box + assert page.cropbox == expected_box + assert page.mediabox == expected_box + assert page.trimbox == expected_box