From 1ba2fba539d9965906b77e34d12b97bc96c40dc4 Mon Sep 17 00:00:00 2001 From: j-t-1 <120829237+j-t-1@users.noreply.github.com> Date: Thu, 20 Nov 2025 13:41:05 +0000 Subject: [PATCH 1/9] BUG: Change logic when adding a page width and height are now treated symmetrically, and updated only if they are not provided. --- pypdf/_writer.py | 10 ++++++---- tests/test_writer.py | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/pypdf/_writer.py b/pypdf/_writer.py index 94468c5ed..8f2776ea5 100644 --- a/pypdf/_writer.py +++ b/pypdf/_writer.py @@ -707,10 +707,12 @@ def insert_blank_page( and previous page does not exist. """ - if width is None or (height is None and index < self.get_num_pages()): - oldpage = self.pages[index] - width = oldpage.mediabox.width - height = oldpage.mediabox.height + if (width is None or height is None) and index < self.get_num_pages(): + old_page = self.pages[index] + if width is None: + width = old_page.mediabox.width + if height is None: + height = old_page.mediabox.height page = PageObject.create_blank_page(self, width, height) self.insert_page(page, index) return page diff --git a/tests/test_writer.py b/tests/test_writer.py index be4c7d9c5..9e63bb427 100644 --- a/tests/test_writer.py +++ b/tests/test_writer.py @@ -238,6 +238,10 @@ def writer_operate(writer: PdfWriter) -> None: writer.page_mode = NameObject("/UseOC") assert writer._get_page_mode() == "/UseOC" writer.insert_blank_page(width=100, height=100) + page = writer.insert_blank_page(width=100) + assert page.mediabox.height == 100 + page = writer.insert_blank_page(height=100) + assert page.mediabox.width == 100 writer.insert_blank_page() # without parameters writer.remove_images() @@ -255,6 +259,24 @@ def writer_operate(writer: PdfWriter) -> None: assert k in objects_hash, f"Missing {v}" +def test_insert_blank_page(): + writer = PdfWriter(clone_from=RESOURCE_ROOT / "crazyones.pdf") + + old_page = writer.pages[0] + page = writer.insert_blank_page(index=0) + assert page.mediabox.width == old_page.mediabox.width + assert page.mediabox.height == old_page.mediabox.height + + old_page = writer.pages[0] + page = writer.insert_blank_page(width=50, index=0) + assert page.mediabox.width == 50 + assert page.mediabox.height == old_page.mediabox.height + + page = writer.insert_blank_page(width=10, height=20, index=0) + assert page.mediabox.width == 10 + assert page.mediabox.height == 20 + + @pytest.mark.parametrize( ("convert", "needs_cleanup"), [ From 476942bbb9ed8b2012e6ca9748a05a6b30c1e74e Mon Sep 17 00:00:00 2001 From: j-t-1 <120829237+j-t-1@users.noreply.github.com> Date: Thu, 20 Nov 2025 15:36:55 +0000 Subject: [PATCH 2/9] Add a test for an out-of-bounds index --- tests/test_writer.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_writer.py b/tests/test_writer.py index 9e63bb427..e28ecb0b3 100644 --- a/tests/test_writer.py +++ b/tests/test_writer.py @@ -276,6 +276,10 @@ def test_insert_blank_page(): assert page.mediabox.width == 10 assert page.mediabox.height == 20 + old_page_count = len(writer.pages) + page = writer.insert_blank_page(width=10, height=20, index=len(writer.pages)) + assert len(writer.pages) == old_page_count + 1 + @pytest.mark.parametrize( ("convert", "needs_cleanup"), From 13bacf17b0325d0407045582ca7390f23f61cd14 Mon Sep 17 00:00:00 2001 From: j-t-1 <120829237+j-t-1@users.noreply.github.com> Date: Thu, 20 Nov 2025 15:38:17 +0000 Subject: [PATCH 3/9] Remove trailing whitespace --- tests/test_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_writer.py b/tests/test_writer.py index e28ecb0b3..79b708916 100644 --- a/tests/test_writer.py +++ b/tests/test_writer.py @@ -278,7 +278,7 @@ def test_insert_blank_page(): old_page_count = len(writer.pages) page = writer.insert_blank_page(width=10, height=20, index=len(writer.pages)) - assert len(writer.pages) == old_page_count + 1 + assert len(writer.pages) == old_page_count + 1 @pytest.mark.parametrize( From 8e8bd60f43549c9af2b23e8b26781608c81abc02 Mon Sep 17 00:00:00 2001 From: j-t-1 <120829237+j-t-1@users.noreply.github.com> Date: Thu, 20 Nov 2025 16:03:47 +0000 Subject: [PATCH 4/9] Use indexed page if width or height is negative --- pypdf/_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pypdf/_writer.py b/pypdf/_writer.py index 8f2776ea5..36fae3ad4 100644 --- a/pypdf/_writer.py +++ b/pypdf/_writer.py @@ -707,7 +707,7 @@ def insert_blank_page( and previous page does not exist. """ - if (width is None or height is None) and index < self.get_num_pages(): + if not (width or height) and index < self.get_num_pages(): old_page = self.pages[index] if width is None: width = old_page.mediabox.width From 664dc175fd20fbac20e5311dc9df17285b36fb4a Mon Sep 17 00:00:00 2001 From: j-t-1 <120829237+j-t-1@users.noreply.github.com> Date: Fri, 21 Nov 2025 11:53:43 +0000 Subject: [PATCH 5/9] Refactor if statement --- pypdf/_writer.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pypdf/_writer.py b/pypdf/_writer.py index 36fae3ad4..e1420c595 100644 --- a/pypdf/_writer.py +++ b/pypdf/_writer.py @@ -707,12 +707,12 @@ def insert_blank_page( and previous page does not exist. """ - if not (width or height) and index < self.get_num_pages(): + if (width is None or width <= 0) and index < self.get_num_pages(): old_page = self.pages[index] - if width is None: - width = old_page.mediabox.width - if height is None: - height = old_page.mediabox.height + width = old_page.mediabox.width + if (height is None or height <= 0) and index < self.get_num_pages(): + old_page = self.pages[index] + height = old_page.mediabox.height page = PageObject.create_blank_page(self, width, height) self.insert_page(page, index) return page From a1ce55f7af53ef07efed42d5133db9cc2db882ef Mon Sep 17 00:00:00 2001 From: j-t-1 <120829237+j-t-1@users.noreply.github.com> Date: Fri, 21 Nov 2025 13:48:55 +0000 Subject: [PATCH 6/9] Improve tests --- tests/test_writer.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/tests/test_writer.py b/tests/test_writer.py index 79b708916..29bee345a 100644 --- a/tests/test_writer.py +++ b/tests/test_writer.py @@ -268,17 +268,40 @@ def test_insert_blank_page(): assert page.mediabox.height == old_page.mediabox.height old_page = writer.pages[0] - page = writer.insert_blank_page(width=50, index=0) - assert page.mediabox.width == 50 + page = writer.insert_blank_page(width=10, index=0) + assert page.mediabox.width == 10 assert page.mediabox.height == old_page.mediabox.height - page = writer.insert_blank_page(width=10, height=20, index=0) - assert page.mediabox.width == 10 + old_page = writer.pages[0] + page = writer.insert_blank_page(height=20, index=0) + assert page.mediabox.width == old_page.mediabox.width assert page.mediabox.height == 20 + page = writer.insert_blank_page(width=30, height=40, index=0) + assert page.mediabox.width == 30 + assert page.mediabox.height == 40 + + old_page = writer.pages[0] + page = writer.insert_blank_page(width=-10, index=0) + assert page.mediabox.width == old_page.mediabox.width + assert page.mediabox.height == old_page.mediabox.height + + old_page = writer.pages[0] + page = writer.insert_blank_page(height=-20, index=0) + assert page.mediabox.width == old_page.mediabox.width + assert page.mediabox.height == old_page.mediabox.height + + old_page = writer.pages[0] + page = writer.insert_blank_page(width=-30, height=-40, index=0) + assert page.mediabox.width == old_page.mediabox.width + assert page.mediabox.height == old_page.mediabox.height + old_page_count = len(writer.pages) - page = writer.insert_blank_page(width=10, height=20, index=len(writer.pages)) + old_page = writer.pages[old_page_count - 1] + page = writer.insert_blank_page(width=50, height=60, index=len(writer.pages)) assert len(writer.pages) == old_page_count + 1 + assert page.mediabox.width == old_page.mediabox.width + assert page.mediabox.height == old_page.mediabox.height @pytest.mark.parametrize( From 02043ba704b7f0ccb9d3059d4289a844a00eb838 Mon Sep 17 00:00:00 2001 From: j-t-1 <120829237+j-t-1@users.noreply.github.com> Date: Fri, 21 Nov 2025 13:55:38 +0000 Subject: [PATCH 7/9] Fix test --- tests/test_writer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_writer.py b/tests/test_writer.py index 29bee345a..22373497f 100644 --- a/tests/test_writer.py +++ b/tests/test_writer.py @@ -300,8 +300,8 @@ def test_insert_blank_page(): old_page = writer.pages[old_page_count - 1] page = writer.insert_blank_page(width=50, height=60, index=len(writer.pages)) assert len(writer.pages) == old_page_count + 1 - assert page.mediabox.width == old_page.mediabox.width - assert page.mediabox.height == old_page.mediabox.height + assert page.mediabox.width == 50 + assert page.mediabox.height == 60 @pytest.mark.parametrize( From 3f800cd894074f3605593f387b204eb735b5f5e6 Mon Sep 17 00:00:00 2001 From: j-t-1 <120829237+j-t-1@users.noreply.github.com> Date: Thu, 27 Nov 2025 10:58:10 +0000 Subject: [PATCH 8/9] Add test --- tests/test_writer.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_writer.py b/tests/test_writer.py index 22373497f..f798e47ae 100644 --- a/tests/test_writer.py +++ b/tests/test_writer.py @@ -303,6 +303,12 @@ def test_insert_blank_page(): assert page.mediabox.width == 50 assert page.mediabox.height == 60 + old_page_count = len(writer.pages) + old_page = writer.pages[old_page_count - 1] + page = writer.insert_blank_page(width=None, height=42, index=len(writer.pages)) + assert page.mediabox.width == old_page.mediabox.width + assert page.mediabox.height == 42 + @pytest.mark.parametrize( ("convert", "needs_cleanup"), From cf81daa780ce35aa61f25ee86acc60daa91eebdc Mon Sep 17 00:00:00 2001 From: j-t-1 <120829237+j-t-1@users.noreply.github.com> Date: Fri, 28 Nov 2025 09:59:38 +0000 Subject: [PATCH 9/9] Use variable --- tests/test_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_writer.py b/tests/test_writer.py index f798e47ae..2c9bbd13b 100644 --- a/tests/test_writer.py +++ b/tests/test_writer.py @@ -305,7 +305,7 @@ def test_insert_blank_page(): old_page_count = len(writer.pages) old_page = writer.pages[old_page_count - 1] - page = writer.insert_blank_page(width=None, height=42, index=len(writer.pages)) + page = writer.insert_blank_page(width=None, height=42, index=old_page_count) assert page.mediabox.width == old_page.mediabox.width assert page.mediabox.height == 42