MCPcopy Create free account
hub / github.com/pymupdf/PyMuPDF / _move_copy_page

Method _move_copy_page

src/__init__.py:3978–4032  ·  view source on GitHub ↗

Move or copy a PDF page reference.

(self, pno, nb, before, copy)

Source from the content-addressed store, hash-verified

3976 assert 0, f'_make_page_map() is no-op'
3977
3978 def _move_copy_page(self, pno, nb, before, copy):
3979 """Move or copy a PDF page reference."""
3980 pdf = _as_pdf_document(self)
3981 same = 0
3982 # get the two page objects -----------------------------------
3983 # locate the /Kids arrays and indices in each
3984
3985 page1, parent1, i1 = pdf_lookup_page_loc( pdf, pno)
3986
3987 kids1 = mupdf.pdf_dict_get( parent1, PDF_NAME('Kids'))
3988
3989 page2, parent2, i2 = pdf_lookup_page_loc( pdf, nb)
3990 kids2 = mupdf.pdf_dict_get( parent2, PDF_NAME('Kids'))
3991 if before: # calc index of source page in target /Kids
3992 pos = i2
3993 else:
3994 pos = i2 + 1
3995
3996 # same /Kids array? ------------------------------------------
3997 same = mupdf.pdf_objcmp( kids1, kids2)
3998
3999 # put source page in target /Kids array ----------------------
4000 if not copy and same != 0: # update parent in page object
4001 mupdf.pdf_dict_put( page1, PDF_NAME('Parent'), parent2)
4002 mupdf.pdf_array_insert( kids2, page1, pos)
4003
4004 if same != 0: # different /Kids arrays ----------------------
4005 parent = parent2
4006 while parent.m_internal: # increase /Count objects in parents
4007 count = mupdf.pdf_dict_get_int( parent, PDF_NAME('Count'))
4008 mupdf.pdf_dict_put_int( parent, PDF_NAME('Count'), count + 1)
4009 parent = mupdf.pdf_dict_get( parent, PDF_NAME('Parent'))
4010 if not copy: # delete original item
4011 mupdf.pdf_array_delete( kids1, i1)
4012 parent = parent1
4013 while parent.m_internal: # decrease /Count objects in parents
4014 count = mupdf.pdf_dict_get_int( parent, PDF_NAME('Count'))
4015 mupdf.pdf_dict_put_int( parent, PDF_NAME('Count'), count - 1)
4016 parent = mupdf.pdf_dict_get( parent, PDF_NAME('Parent'))
4017 else: # same /Kids array
4018 if copy: # source page is copied
4019 parent = parent2
4020 while parent.m_internal: # increase /Count object in parents
4021 count = mupdf.pdf_dict_get_int( parent, PDF_NAME('Count'))
4022 mupdf.pdf_dict_put_int( parent, PDF_NAME('Count'), count + 1)
4023 parent = mupdf.pdf_dict_get( parent, PDF_NAME('Parent'))
4024 else:
4025 if i1 < pos:
4026 mupdf.pdf_array_delete( kids1, i1)
4027 else:
4028 mupdf.pdf_array_delete( kids1, i1 + 1)
4029 if pdf.m_internal.rev_page_map: # page map no longer valid: drop it
4030 mupdf.ll_pdf_drop_page_tree( pdf.m_internal)
4031
4032 self._reset_page_refs()
4033
4034 def _newPage(self, pno=-1, width=595, height=842):
4035 """Make a new PDF page."""

Callers 2

copy_pageMethod · 0.95
move_pageMethod · 0.95

Calls 4

_reset_page_refsMethod · 0.95
_as_pdf_documentFunction · 0.85
pdf_lookup_page_locFunction · 0.85
PDF_NAMEFunction · 0.85

Tested by

no test coverage detected