Move or copy a PDF page reference.
(self, pno, nb, before, copy)
| 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.""" |
no test coverage detected