Skip to content

Commit f32a964

Browse files
authored
MAINT: Add _get_page_number_from_indirect in writer (#2493)
Create similar function to have same API as in reader. Used in future development.
1 parent f20c36e commit f32a964

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

pypdf/_writer.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,28 @@ def _get_num_pages(self) -> int:
424424
pages = cast(Dict[str, Any], self.get_object(self._pages))
425425
return int(pages[NameObject("/Count")])
426426

427+
def _get_page_number_by_indirect(
428+
self, indirect_reference: Union[None, int, NullObject, IndirectObject]
429+
) -> Optional[int]:
430+
"""
431+
Generate _page_id2num.
432+
433+
Args:
434+
indirect_reference:
435+
436+
Returns:
437+
The page number or None
438+
"""
439+
# to provide same function as in PdfReader
440+
if indirect_reference is None or isinstance(indirect_reference, NullObject):
441+
return None
442+
if isinstance(indirect_reference, int):
443+
indirect_reference = IndirectObject(indirect_reference, 0, self)
444+
obj = indirect_reference.get_object()
445+
if isinstance(obj, PageObject):
446+
return obj.page_number
447+
return None
448+
427449
@property
428450
def pages(self) -> List[PageObject]:
429451
"""

tests/test_writer.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2011,3 +2011,16 @@ def test_reattach_fields():
20112011
assert isinstance(writer.pages[0]["/Annots"][0], IndirectObject)
20122012
del writer.pages[1]["/Annots"]
20132013
assert len(writer.reattach_fields(writer.pages[1])) == 0
2014+
2015+
2016+
def test_get_pagenumber_from_indirectobject():
2017+
"""Test test_get_pagenumber_from_indirectobject"""
2018+
pdf_path = RESOURCE_ROOT / "crazyones.pdf"
2019+
writer = PdfWriter(clone_from=pdf_path)
2020+
assert writer._get_page_number_by_indirect(None) is None
2021+
assert writer._get_page_number_by_indirect(NullObject()) is None
2022+
2023+
ind = writer.pages[0].indirect_reference
2024+
assert writer._get_page_number_by_indirect(ind) == 0
2025+
assert writer._get_page_number_by_indirect(ind.idnum) == 0
2026+
assert writer._get_page_number_by_indirect(ind.idnum + 1) is None

0 commit comments

Comments
 (0)