diff --git a/docs/document.rst b/docs/document.rst index 951fce70c..b8791a61c 100644 --- a/docs/document.rst +++ b/docs/document.rst @@ -1480,7 +1480,7 @@ For details on **embedded files** refer to Appendix 3. .. method:: delete_page(pno=-1) - PDF only: Delete a page given by its 0-based number in `-∞ < pno < page_count - 1`. + PDF only: Delete a page given by its 0-based number in `-∞ < pno < page_count`. * Changed in v1.18.14: support Python's `del` statement. diff --git a/src/__init__.py b/src/__init__.py index 8f9484a50..75ad43732 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -3865,28 +3865,7 @@ def del_xml_metadata(self): def delete_page(self, pno: int =-1): """ Delete one page from a PDF. """ - if not self.is_pdf: - raise ValueError("is no PDF") - if self.is_closed: - raise ValueError("document closed") - - page_count = self.page_count - while pno < 0: - pno += page_count - - if pno >= page_count: - raise ValueError("bad page number(s)") - - # remove TOC bookmarks pointing to deleted page - toc = self.get_toc() - ol_xrefs = self.get_outline_xrefs() - for i, item in enumerate(toc): - if item[2] == pno + 1: - self._remove_toc_item(ol_xrefs[i]) - - self._remove_links_to(frozenset((pno,))) - self._delete_page(pno) - self._reset_page_refs() + return self.delete_pages(pno) def delete_pages(self, *args, **kw): """Delete pages from a PDF. @@ -3896,6 +3875,7 @@ def delete_pages(self, *args, **kw): specify the first/last page to delete. Or a list/tuple/range object, which can contain arbitrary page numbers. + Or a single integer page number. """ if not self.is_pdf: raise ValueError("is no PDF") @@ -3928,12 +3908,13 @@ def delete_pages(self, *args, **kw): if not f <= t < page_count: raise ValueError("bad page number(s)") numbers = tuple(range(f, t + 1)) + elif isinstance(args[0], int): + pno = args[0] + while pno < 0: + pno += page_count + numbers = (pno,) else: - r = args[0] - if type(r) is int: - return self.delete_page(r) - else: - numbers = tuple(r) + numbers = tuple(args[0]) numbers = list(map(int, set(numbers))) # ensure unique integers if numbers == []: diff --git a/tests/test_textextract.py b/tests/test_textextract.py index f85dbc650..944df1e86 100644 --- a/tests/test_textextract.py +++ b/tests/test_textextract.py @@ -374,8 +374,9 @@ def get_all_page_from_pdf(document, last_page=None): assert texts1 == texts0 - wt = pymupdf.TOOLS.mupdf_warnings() - assert wt == 'Actualtext with no position. Text may be lost or mispositioned.\n... repeated 434 times...' + if pymupdf.mupdf_version_tuple < (1, 27): + wt = pymupdf.TOOLS.mupdf_warnings() + assert wt == 'Actualtext with no position. Text may be lost or mispositioned.\n... repeated 434 times...' def test_3650(): path = os.path.normpath(f'{__file__}/../../tests/resources/test_3650.pdf')