Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions pypdf/_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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]
Expand Down
24 changes: 24 additions & 0 deletions tests/test_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Loading