§
    `Ò³gŠg  ã                   óV  — d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
ZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ  ej        e¦  «        Z G d
„ dej        ¦  «        Z  G d„ dej        ¦  «        Z! G d„ dej        ¦  «        Z"d„ Z# e	dd¦  «        Z$dS ))ÚPdfDocumentÚ
PdfFormEnvÚ
PdfXObjectÚPdfOutlineItemé    N)ÚPath)Ú
namedtuple)ÚPDFIUM_INFO)ÚPdfiumError)ÚPdfPage)Ú	PdfObject)ÚPdfAttachmentc                   ó\  ‡ — e Zd ZdZd'ˆ fd„	Zˆ fd„Zed„ ¦   «         Zed„ ¦   «         Z	d„ Z
d	„ Zd
„ Zd„ Zed„ ¦   «         Zd(d„Zd„ Zd„ Zd„ Zdej        fd„Zej        fd„Zd„ Zd„ ZdZd)d„Zd„ Zd„ Zd„ Zd„ Z d„ Z!d(d„Z"d„ Z#d*d„Z$d„ Z%d „ Z&d!„ Z'd"„ Z(	 	 	 	 d+d%„Z)e*j+        ddddfd&„Z+ˆ xZ,S ),r   aÄ  
    Document helper class.
    
    Parameters:
        input_data (str | pathlib.Path | bytes | ctypes.Array | typing.BinaryIO | FPDF_DOCUMENT):
            The input PDF given as file path, bytes, ctypes array, byte buffer, or raw PDFium document handle.
            A byte buffer is defined as an object that implements ``seek() tell() read() readinto()``.
        password (str | None):
            A password to unlock the PDF, if encrypted. Otherwise, None or an empty string may be passed.
            If a password is given but the PDF is not encrypted, it will be ignored (as of PDFium 5418).
        autoclose (bool):
            Whether byte buffer input should be automatically closed on finalization.
    
    Raises:
        PdfiumError: Raised if the document failed to load. The exception message is annotated with the reason reported by PDFium.
        FileNotFoundError: Raised if an invalid or non-existent file path was given.
    
    Hint:
        * :func:`len` may be called to get a document's number of pages.
        * Looping over a document will yield its pages from beginning to end.
        * Pages may be loaded using list index access.
        * The ``del`` keyword and list index access may be used to delete pages.
    
    Attributes:
        raw (FPDF_DOCUMENT):
            The underlying PDFium document handle.
        formenv (PdfFormEnv | None):
            Form env, if the document has forms and :meth:`.init_forms` was called.
    NFc                 ó¸  •— t          |t          ¦  «        rt          |¦  «        }t          |t          ¦  «        rI|                     ¦   «                              ¦   «         }|                     ¦   «         st          |¦  «        ‚|| _        || _        || _	        g | _
        g | _        d | _        t          | j        t          j        ¦  «        r| j        | _        nIt!          | j        | j        | j	        ¦  «        \  | _        }}| xj
        |z  c_
        | xj        |z  c_        t#          ¦   «                              t&          j        | j
        | j        ¦  «         d S ©N)Ú
isinstanceÚstrr   Ú
expanduserÚresolveÚis_fileÚFileNotFoundErrorÚ_inputÚ	_passwordÚ
_autocloseÚ_data_holderÚ_data_closerÚformenvÚpdfium_cÚFPDF_DOCUMENTÚrawÚ	_open_pdfÚsuperÚ__init__r   Ú_close_impl)ÚselfÚinputÚpasswordÚ	autocloseÚto_holdÚto_closeÚ	__class__s         €úY/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/pypdfium2/_helpers/document.pyr"   zPdfDocument.__init__9   s2  ø€ å�e�SÑ!Ô!ð 	 Ý˜‘K”KˆEÝ�e�TÑ"Ô"ð 	/Ø×$Ò$Ñ&Ô&×.Ò.Ñ0Ô0ˆEØ—=’=‘?”?ð /Ý'¨Ñ.Ô.Ð.àˆŒØ!ˆŒØ#ˆŒØˆÔØˆÔð ˆŒå�d”k¥8Ô#9Ñ:Ô:ð 	*Ø”{ˆDŒHˆHå*3°D´KÀÄÐQUÔQ`Ñ*aÔ*aÑ'ˆDŒH�g˜xØÐÔ Ñ(ÐÔØÐÔ Ñ)ÐÔå‰Œ×Ò�Ô0°$Ô2CÀTÔEVÑWÔWÐWÐWÐWó    c                 ó
  •— t          | j        t          ¦  «        r"t          t	          | j        ¦  «        ¦  «        }n™t          | j        t
          ¦  «        r&dt          t          | j        ¦  «        ¦  «        › d�}nYt          | j        t          j	        ¦  «        r&dt          t          | j        ¦  «        ¦  «        › d�}nt          | j        ¦  «        }t          ¦   «                              ¦   «         d d…         › d|› d�S )Nz<bytes object at ú>z<FPDF_DOCUMENT at éÿÿÿÿz from )r   r   r   Úreprr   ÚbytesÚhexÚidr   r   r!   Ú__repr__)r$   Úinput_rr*   s     €r+   r4   zPdfDocument.__repr__U   sÞ   ø€ Ý�d”k¥4Ñ(Ô(ð 	(Ý�C ¤Ñ,Ô,Ñ.Ô.ˆGˆGÝ˜œ¥UÑ+Ô+ð 	(ØA­#­b°´©o¬oÑ*>Ô*>ÐAÐAÐAˆGˆGÝ˜œ¥XÔ%;Ñ<Ô<ð 	(ØB­3­r°$´+©¬Ñ+?Ô+?ÐBÐBÐBˆGˆGå˜4œ;Ñ'Ô'ˆGÝ‘'”'×"Ò"Ñ$Ô$ S b SÔ)Ð;Ð;°Ð;Ð;Ð;Ð;r,   c                 ó   — d S r   © ©r$   s    r+   ÚparentzPdfDocument.parenta   s   € àˆtr,   c                 óØ   — t          j        | ¦  «         |D ]}t          |¦  «         Œ|D ]}|                     ¦   «          Œ|                     ¦   «          |                     ¦   «          d S r   )r   ÚFPDF_CloseDocumentr3   ÚcloseÚclear)r   Údata_holderÚdata_closerÚdatas       r+   r#   zPdfDocument._close_implf   sw   € åÔ# CÑ(Ô(Ð(Øð 	ð 	ˆDÝˆt‰HŒHˆHˆHØð 	ð 	ˆDØ�JŠJ‰LŒLˆLˆLØ×ÒÑÔÐØ×ÒÑÔÐÐÐr,   c                 ó*   — t          j        | ¦  «        S r   )r   ÚFPDF_GetPageCountr8   s    r+   Ú__len__zPdfDocument.__len__q   s   € ÝÔ)¨$Ñ/Ô/Ð/r,   c              #   ó\   K  — t          t          | ¦  «        ¦  «        D ]}| |         V — Œd S r   )ÚrangeÚlen©r$   Úis     r+   Ú__iter__zPdfDocument.__iter__t   s<   è è € Ý�˜D™	œ	Ñ#Ô#ð 	ð 	ˆAØ�q”'ˆMˆMˆMˆMð	ð 	r,   c                 ó,   — |                       |¦  «        S r   )Úget_pagerG   s     r+   Ú__getitem__zPdfDocument.__getitem__x   s   € Ø�}Š}˜QÑÔÐr,   c                 ó0   — |                       |¦  «         d S r   )Údel_pagerG   s     r+   Ú__delitem__zPdfDocument.__delitem__{   s   € Ø�Š�aÑÔÐÐÐr,   c                 ó>   — t          j        ¦   «         } | |¦  «        S )zJ
        Returns:
            PdfDocument: A new, empty document.
        )r   ÚFPDF_CreateNewDocument)ÚclsÚnew_pdfs     r+   ÚnewzPdfDocument.new   s    € õ Ô1Ñ3Ô3ˆØˆs�7‰|Œ|Ðr,   c                 ó¬  — |                       ¦   «         }|t          j        k    s| j        rdS dt          j        v r/t          j        dk    rt          j        dk    rt          d¦  «        ‚|sbdt          j        v r?t          j	        d¬¦  «        }t          j
        d	d
t          j        |¦  «        ¬¦  «        }nt          j
        d	¬¦  «        }t          j        | |¦  «        }|st          d| › d�¦  «        ‚t          ||| ¦  «        | _        |                      | j        ¦  «         |t          j        t          j        fv r‘dt          j        v rgt          j        | ¦  «        }|sOt          j        ¦   «         }t*                               dt.          j                             |¦  «        › �¦  «         dS dS t*                               d¦  «         dS dS )aß  
        Initialize a form env, if the document has forms. If already initialized, nothing will be done.
        See the :attr:`formenv` attribute.
    
        Attention:
            If form rendering is desired, this method shall be called immediately after document construction, before getting document length or page handles.
        
        Parameters:
            config (FPDF_FORMFILLINFO | None):
                Custom form config interface to use (optional).
        NÚV8Úsourcebuildi-  z@V8 enabled pdfium-binaries builds <= 5677 crash on init_forms().ÚXFAé   )Úversioné   F)rZ   Úxfa_disabledÚm_pJsPlatformz*Initializing form env failed for document ú.zFPDF_LoadXFA() failed with zÆinit_forms() called on XFA pdf, but this pdfium binary was compiled without XFA support.
Run `PDFIUM_PLATFORM=auto-v8 pip install -v pypdfium2 --no-binary pypdfium2` to get a build with XFA support.)Úget_formtyper   ÚFORMTYPE_NONEr   r	   ÚflagsÚoriginÚbuildÚRuntimeErrorÚIPDF_JSPLATFORMÚFPDF_FORMFILLINFOÚctypesÚpointerÚFPDFDOC_InitFormFillEnvironmentr
   r   Ú_add_kidÚFORMTYPE_XFA_FULLÚFORMTYPE_XFA_FOREGROUNDÚFPDF_LoadXFAÚFPDF_GetLastErrorÚloggerÚwarningÚpdfium_iÚXFAErrorToStrÚget)r$   ÚconfigÚformtypeÚjs_platformr   ÚokÚerrs          r+   Ú
init_formszPdfDocument.init_forms‰   sã  € ð ×$Ò$Ñ&Ô&ˆØ•xÔ-Ò-Ð-°´Ð-ØˆFð •;Ô$Ð$Ð$­Ô);¸}Ò)LÐ)LÕQ\ÔQbÐfjÒQjÐQjÝÐaÑbÔbÐbàð 	?Ø�Ô)Ð)Ð)Ý&Ô6¸qÐAÑAÔA�Ý!Ô3¸AÈEÕagÔaoÐp{Ña|Ôa|Ð}Ñ}Ô}��å!Ô3¸AÐ>Ñ>Ô>�åÔ6°t¸VÑDÔDˆØð 	TÝÐRÈ4ÐRÐRÐRÑSÔSÐSÝ! # v¨tÑ4Ô4ˆŒØ�Š�d”lÑ#Ô#Ð#à�Ô2µHÔ4TÐUÐUÐUØ�Ô)Ð)Ð)ÝÔ*¨4Ñ0Ô0�Øð dÝ"Ô4Ñ6Ô6�CÝ—N’NÐ#bÅÔAW×A[ÒA[Ð\_ÑA`ÔA`Ð#bÐ#bÑcÔcÐcÐcÐcðdð dõ —’ðDñô ð ð ð ð VÐUr,   c                 ó*   — t          j        | ¦  «        S )z¯
        Returns:
            int: PDFium form type that applies to the document (:attr:`FORMTYPE_*`).
            :attr:`FORMTYPE_NONE` if the document has no forms.
        )r   ÚFPDF_GetFormTyper8   s    r+   r_   zPdfDocument.get_formtypeº   s   € õ Ô(¨Ñ.Ô.Ð.r,   c                 ó*   — t          j        | ¦  «        S )zV
        Returns:
            int: Page displaying mode (:attr:`PAGEMODE_*`).
        )r   ÚFPDFDoc_GetPageModer8   s    r+   Úget_pagemodezPdfDocument.get_pagemodeÄ   s   € õ
 Ô+¨DÑ1Ô1Ð1r,   c                 óD   — t          t          j        | ¦  «        ¦  «        S )zm
        Returns:
            bool: Whether the document is tagged (cf. PDF 1.7, 10.7 "Tagged PDF").
        )Úboolr   ÚFPDFCatalog_IsTaggedr8   s    r+   Ú	is_taggedzPdfDocument.is_taggedÍ   s   € õ
 •XÔ2°4Ñ8Ô8Ñ:Ô:Ð:r,   c                 óÀ  — t          |t          t          f¦  «        rt          |d¦  «        d}}n-t	          j        |d¦  «        r|d}}nt          d|› d�¦  «        ‚	 | t	          j        |¦  «        |f}|€t          j	        |Ž nt          j
        g |¢|‘R Ž }|st          d¦  «        ‚	 |r|                     ¦   «          dS dS # |r|                     ¦   «          w w xY w)	a
  
        Save the document at its current state.
        
        Parameters:
            dest (str | pathlib.Path | io.BytesIO):
                File path or byte buffer the document shall be written to.
            version (int | None):
                The PDF version to use, given as an integer (14 for 1.4, 15 for 1.5, ...).
                If None (the default), PDFium will set a version automatically.
            flags (int):
                PDFium saving flags (defaults to :attr:`FPDF_NO_INCREMENTAL`).
        ÚwbTÚwFzCannot save to 'ú'NzFailed to save document.)r   r   r   Úopenrq   Ú	is_bufferÚ
ValueErrorÚget_bufwriterr   ÚFPDF_SaveAsCopyÚFPDF_SaveWithVersionr
   r<   )r$   ÚdestrZ   ra   ÚbufferÚ
need_closeÚsaveargsrw   s           r+   ÚsavezPdfDocument.saveÕ   s  € õ �d�S¥$˜KÑ(Ô(ð 	9Ý!% d¨DÑ!1Ô!1°4�JˆFˆFÝÔ  cÑ*Ô*ð 	9Ø!% u�JˆFˆFåÐ7°Ð7Ð7Ð7Ñ8Ô8Ð8ð	Ø�hÔ4°VÑ<Ô<¸eÐDˆHØ8?¸•Ô)¨8Ð4Ð4ÍXÔMjÐM~ÐltÐM~Ðv}ÐM~ÐM~ÐM~ˆBØð >Ý!Ð"<Ñ=Ô=Ð=ð>ð ð Ø—’‘”���ðð øˆzð Ø—’‘”��ðøøøs   ÁAC ÃCc                 óª   — t          j        | |dd¦  «        }t          j        |¦  «        }t          j        | |||¦  «         |j        d|dz
  …         S )aÓ  
        Parameters:
            type (int):
                The identifier type to retrieve (:attr:`FILEIDTYPE_*`), either permanent or changing.
                If the file was updated incrementally, the permanent identifier stays the same,
                while the changing identifier is re-calculated.
        Returns:
            bytes: Unique file identifier from the PDF's trailer dictionary.
            See PDF 1.7, Section 14.4 "File Identifiers".
        Nr   r[   )r   ÚFPDF_GetFileIdentifierrg   Úcreate_string_bufferr   )r$   ÚtypeÚn_bytesrŽ   s       r+   Úget_identifierzPdfDocument.get_identifierô   sV   € õ Ô1°$¸¸dÀAÑFÔFˆÝÔ,¨WÑ5Ô5ˆÝÔ'¨¨d°F¸GÑDÔDÐDØŒz˜*˜7 1™9˜*Ô%Ð%r,   c                 óh   — t          j        ¦   «         }t          j        | |¦  «        }|sdS |j        S )zÄ
        Returns:
            int | None: The PDF version of the document (14 for 1.4, 15 for 1.5, ...),
            or None if the document is new or its version could not be determined.
        N)rg   Úc_intr   ÚFPDF_GetFileVersionÚvalue)r$   rZ   rw   s      r+   Úget_versionzPdfDocument.get_version  s6   € õ ”,‘.”.ˆÝÔ)¨$°Ñ8Ô8ˆØð 	Ø�4ØŒ}Ðr,   c                 ó   — |dz                         d¦  «        }t          j        | |dd¦  «        }t          j        |¦  «        }t          j        | |||¦  «         |j        d|dz
  …                              d¦  «        S )z¯
        Returns:
            str: Value of the given key in the PDF's metadata dictionary.
            If the key is not contained, an empty string will be returned.
        ú úutf-8Nr   r[   ú	utf-16-le)Úencoder   ÚFPDF_GetMetaTextrg   r”   r   Údecode)r$   ÚkeyÚenc_keyr–   rŽ   s        r+   Úget_metadata_valuezPdfDocument.get_metadata_value  s{   € ð ˜‘<×'Ò'¨Ñ0Ô0ˆÝÔ+¨D°'¸4ÀÑCÔCˆÝÔ,¨WÑ5Ô5ˆÝÔ! $¨°¸ÑAÔAÐAØŒz˜*˜7 1™9˜*Ô%×,Ò,¨[Ñ9Ô9Ð9r,   )ÚTitleÚAuthorÚSubjectÚKeywordsÚCreatorÚProducerÚCreationDateÚModDatec                 ón   ‡ — ˆ fd„‰ j         D ¦   «         }|rd„ |                     ¦   «         D ¦   «         }|S )zí
        Get the document's metadata as dictionary.
        
        Parameters:
            skip_empty (bool):
                If True, skip items whose value is an empty string.
        Returns:
            dict: PDF metadata.
        c                 ó<   •— i | ]}|‰                      |¦  «        “ŒS r7   )r¦   )Ú.0Úkr$   s     €r+   ú
<dictcomp>z1PdfDocument.get_metadata_dict.<locals>.<dictcomp>,  s)   ø€ ÐNÐNÐN°a�A�t×.Ò.¨qÑ1Ô1ÐNÐNÐNr,   c                 ó   — i | ]
\  }}|¯||“ŒS r7   r7   )r±   r²   Úvs      r+   r³   z1PdfDocument.get_metadata_dict.<locals>.<dictcomp>.  s#   € Ð?Ð?Ð?¡  A¸QÐ?˜˜1Ð?Ð?Ð?r,   )ÚMETADATA_KEYSÚitems)r$   Ú
skip_emptyÚmetadatas   `  r+   Úget_metadata_dictzPdfDocument.get_metadata_dict"  sM   ø€ ð OÐNÐNÐN¸4Ô;MÐNÑNÔNˆØð 	@Ø?Ð?¨¯ªÑ)9Ô)9Ð?Ñ?Ô?ˆHØˆr,   c                 ó*   — t          j        | ¦  «        S )zY
        Returns:
            int: The number of embedded files in the document.
        )r   ÚFPDFDoc_GetAttachmentCountr8   s    r+   Úcount_attachmentszPdfDocument.count_attachments2  s   € õ
 Ô2°4Ñ8Ô8Ð8r,   c                 óv   — t          j        | |¦  «        }|st          d|› d�¦  «        ‚t          || ¦  «        S )z]
        Returns:
            PdfAttachment: The attachment at *index* (zero-based).
        z"Failed to get attachment at index r^   )r   ÚFPDFDoc_GetAttachmentr
   r   )r$   ÚindexÚraw_attachments      r+   Úget_attachmentzPdfDocument.get_attachment:  sI   € õ
 "Ô7¸¸eÑDÔDˆØð 	MÝÐKÀ5ÐKÐKÐKÑLÔLÐLÝ˜^¨TÑ2Ô2Ð2r,   c                 óä   — |dz                         d¦  «        }t          j        |t          j        ¦  «        }t          j        | |¦  «        }|st          d|› d�¦  «        ‚t          || ¦  «        S )aN  
        Add a new attachment to the document. It may appear at an arbitrary index (as of PDFium 5418).
        
        Parameters:
            name (str):
                The name the attachment shall have. Usually a file name with extension.
        Returns:
            PdfAttachment: Handle to the new, empty attachment.
        rž   r    z!Failed to create new attachment 'z'.)r¡   rg   Úcastr   ÚFPDF_WIDESTRINGÚFPDFDoc_AddAttachmentr
   r   )r$   ÚnameÚenc_nameÚenc_name_ptrrÁ   s        r+   Únew_attachmentzPdfDocument.new_attachmentE  st   € ð ˜6‘M×)Ò)¨+Ñ6Ô6ˆÝ”{ 8­XÔ-EÑFÔFˆÝ!Ô7¸¸lÑKÔKˆØð 	LÝÐJÀ$ÐJÐJÐJÑKÔKÐKÝ˜^¨TÑ2Ô2Ð2r,   c                 óZ   — t          j        | |¦  «        }|st          d|› d�¦  «        ‚dS )a±  
        Unlink the attachment at *index* (zero-based).
        It will be hidden from the viewer, but is still present in the file (as of PDFium 5418).
        Following attachments shift one slot to the left in the array representation used by PDFium's API.
        
        Handles to the attachment in question received from :meth:`.get_attachment`
        must not be accessed anymore after this method has been called.
        z%Failed to delete attachment at index r^   N)r   ÚFPDFDoc_DeleteAttachmentr
   )r$   rÀ   rw   s      r+   Údel_attachmentzPdfDocument.del_attachmentW  sE   € õ Ô.¨t°UÑ;Ô;ˆØð 	PÝÐNÀeÐNÐNÐNÑOÔOÐOð	Pð 	Pr,   c                 ó   — t          j        | |¦  «        }|st          d¦  «        ‚t          || | j        ¦  «        }| j        r5t          j        || j        ¦  «         | j                             |¦  «         n|                      |¦  «         |S )a   
        Returns:
            PdfPage: The page at *index* (zero-based).
        Note:
            This calls ``FORM_OnAfterLoadPage()`` if the document has an active form env.
            The form env must not be closed before the page is closed!
        zFailed to load page.)r   ÚFPDF_LoadPager
   r   r   ÚFORM_OnAfterLoadPagerj   )r$   rÀ   Úraw_pageÚpages       r+   rK   zPdfDocument.get_pagef  s�   € õ Ô)¨$°Ñ6Ô6ˆØð 	6ÝÐ4Ñ5Ô5Ð5Ý�x  t¤|Ñ4Ô4ˆàŒ<ð 	 ÝÔ)¨$°´Ñ=Ô=Ð=ØŒL×!Ò! $Ñ'Ô'Ð'Ð'à�MŠM˜$ÑÔÐàˆr,   c                 ó¢   — |€t          | ¦  «        }t          j        | |||¦  «        }t          || d¦  «        }|                      |¦  «         |S )a  
        Insert a new, empty page into the document.
        
        Parameters:
            width (float):
                Target page width (horizontal size).
            height (float):
                Target page height (vertical size).
            index (int | None):
                Suggested zero-based index at which the page shall be inserted.
                If None or larger that the document's current last index, the page will be appended to the end.
        Returns:
            PdfPage: The newly created page.
        N)rF   r   ÚFPDFPage_Newr   rj   )r$   ÚwidthÚheightrÀ   rÑ   rÒ   s         r+   Únew_pagezPdfDocument.new_page}  sR   € ð ˆ=Ý˜‘I”IˆEÝÔ(¨¨u°e¸VÑDÔDˆÝ�x  tÑ,Ô,ˆà�Š�dÑÔÐØˆr,   c                 ó0   — t          j        | |¦  «         dS )z:
        Remove the page at *index* (zero-based).
        N)r   ÚFPDFPage_Delete)r$   rÀ   s     r+   rN   zPdfDocument.del_page•  s   € õ
 	Ô   uÑ-Ô-Ð-Ð-Ð-r,   c                 óF  — |€t          | ¦  «        }t          |t          ¦  «        r+t          j        | ||                     d¦  «        |¦  «        }n>d}d}|r t          |¦  «        }t          j        |z  |Ž }t          j        | ||||¦  «        }|st          d¦  «        ‚dS )a.  
        Import pages from a foreign document.
        
        Parameters:
            pdf (PdfDocument):
                The document from which to import pages.
            pages (list[int] | str | None):
                The pages to include. It may either be a list of zero-based page indices, or a string of one-based page numbers and ranges.
                If None, all pages will be included.
            index (int):
                Zero-based index at which to insert the given pages. If None, they are appended to the end of the document.
        NÚasciir   zFailed to import pages.)
rF   r   r   r   ÚFPDF_ImportPagesr¡   rg   r™   ÚFPDF_ImportPagesByIndexr
   )r$   ÚpdfÚpagesrÀ   rw   Ú
page_countÚc_pagess          r+   Úimport_pageszPdfDocument.import_pages�  s³   € ð ˆ=Ý˜‘I”IˆEå�e�SÑ!Ô!ð 	YÝÔ*¨4°°e·l²lÀ7Ñ6KÔ6KÈUÑSÔSˆBˆBàˆJØˆGØð >Ý  ™ZœZ�
Ý!œ<¨*Ñ4°uÐ=�ÝÔ1°$¸¸WÀjÐRWÑXÔXˆBàð 	9ÝÐ7Ñ8Ô8Ð8ð	9ð 	9r,   c                 ó’   — t          j        ¦   «         }t          j        | ||¦  «        }|st          d¦  «        ‚|j        |j        fS )z€
        Returns:
            (float, float): Width and height in PDF canvas units of the page at *index* (zero-based).
        z!Failed to get page size by index.)r   ÚFS_SIZEFÚFPDF_GetPageSizeByIndexFr
   rÕ   rÖ   )r$   rÀ   Úsizerw   s       r+   Úget_page_sizezPdfDocument.get_page_size¼  sM   € õ
 Ô Ñ"Ô"ˆÝÔ.¨t°U¸DÑAÔAˆØð 	CÝÐAÑBÔBÐBØ”
˜DœKÐ(Ð(r,   c                 óÐ   — t          j        | |dd¦  «        }t          j        |¦  «        }t          j        | |||¦  «         |j        d|dz
  …                              d¦  «        S )z»
        Returns:
            str: Label of the page at *index* (zero-based).
            (A page label is essentially an alias that may be displayed instead of the page number.)
        Nr   r[   r    )r   ÚFPDF_GetPageLabelrg   r”   r   r£   )r$   rÀ   r–   rŽ   s       r+   Úget_page_labelzPdfDocument.get_page_labelÈ  sd   € õ Ô,¨T°5¸$ÀÑBÔBˆÝÔ,¨WÑ5Ô5ˆÝÔ" 4¨°¸Ñ@Ô@Ð@ØŒz˜*˜7 1™9˜*Ô%×,Ò,¨[Ñ9Ô9Ð9r,   c                 ó¨   — t          j        || |¦  «        }|€t          d|› d�¦  «        ‚t          ||¬¦  «        }|                      |¦  «         |S )a_  
        Capture a page as XObject and attach it to a document's resources.
        
        Parameters:
            index (int):
                Zero-based index of the page.
            dest_pdf (PdfDocument):
                Target document to which the XObject shall be added.
        Returns:
            PdfXObject: The page as XObject.
        Nz Failed to capture page at index z as FPDF_XOBJECT.©r   rÞ   )r   ÚFPDF_NewXObjectFromPager
   r   rj   )r$   rÀ   Údest_pdfÚraw_xobjectÚxobjects        r+   Úpage_as_xobjectzPdfDocument.page_as_xobjectÔ  sa   € õ Ô6°xÀÀuÑMÔMˆØÐÝÐYÀÐYÐYÐYÑZÔZÐZÝ °(Ð;Ñ;Ô;ˆØ�Š�gÑÔÐØˆr,   c           	      ó|  — t          j        |d d¦  «        }t          j        |¦  «        }t          j        |||¦  «         |j        d |dz
  …                              d¦  «        }t          j        |¦  «        }|dk     rdn	|dk    rd nd}t          |¦  «        }t          j        | |¦  «        }	t          j	        | |	¦  «        }
|
dk    rd }
t          j
        ¦   «         }t          j        dz  ¦   «         }t          j        |	||¦  «        }t          |¦  «        d |j        …         }t          |||||
||¬¦  «        S )	Nr   r[   r    TFr/   é   )ÚlevelÚtitleÚ	is_closedÚn_kidsÚ
page_indexÚ	view_modeÚview_pos)r   ÚFPDFBookmark_GetTitlerg   r”   r   r£   ÚFPDFBookmark_GetCountÚabsÚFPDFBookmark_GetDestÚFPDFDest_GetDestPageIndexÚc_ulongÚFS_FLOATÚFPDFDest_GetViewÚlistr›   r   )r$   Úbookmarkrô   r–   rŽ   rõ   Úcountrö   r÷   r�   rø   Ún_paramsrú   rù   s                 r+   Ú_get_bookmarkzPdfDocument._get_bookmarkê  sA  € åÔ0°¸4ÀÑCÔCˆÝÔ,¨WÑ5Ô5ˆÝÔ& x°¸ÑAÔAÐAØ”
˜:˜G A™I˜:Ô&×-Ò-¨kÑ:Ô:ˆõ Ô.¨xÑ8Ô8ˆØ! AšI˜I�D�D°5¸A²:°:¨4¨4À5ˆ	Ý�U‘”ˆåÔ,¨T°8Ñ<Ô<ˆÝÔ7¸¸dÑCÔCˆ
Ø˜ÒÐØˆJå”>Ñ#Ô#ˆÝÔ%¨Ñ)Ñ,Ô,ˆÝÔ-¨d°H¸hÑGÔGˆ	Ý˜‘>”> / 8¤> /Ô2ˆåØØØ!ØØ#Ø!Øð
ñ 
ô 
ð 	
r,   é   r   c              #   ó¬  K  — |€t          ¦   «         }t          j        | |¦  «        }|rªt          j        |j        ¦  «        }||v rt                               d¦  «         dS |                     |¦  «         |  	                    ||¦  «        V — ||dz
  k     r"|  
                    |||dz   |¬¦  «        E d{V —† t          j        | |¦  «        }|°¨dS dS )a  
        Iterate through the bookmarks in the document's table of contents.
        
        Parameters:
            max_depth (int):
                Maximum recursion depth to consider.
        Yields:
            :class:`.PdfOutlineItem`: Bookmark information.
        NzPA circular bookmark reference was detected whilst parsing the table of contents.é   )Ú	max_depthr9   rô   Úseen)Úsetr   ÚFPDFBookmark_GetFirstChildrg   Ú	addressofÚcontentsro   rp   Úaddr  Úget_tocÚFPDFBookmark_GetNextSibling)r$   r  r9   rô   r  r  Úaddresss          r+   r  zPdfDocument.get_toc  s"  è è € ð" ˆ<Ý‘5”5ˆDåÔ6°t¸VÑDÔDˆàð 	LåÔ& xÔ'8Ñ9Ô9ˆGØ˜$ˆˆÝ—’ÐqÑrÔrÐrØ�à—’˜Ñ!Ô!Ð!à×$Ò$ X¨uÑ5Ô5Ð5Ð5Ð5Ø�y ‘{Ò"Ð"ØŸ<š<Ø )Ø%Ø! A™IØð	 (ñ ô ð ð ð ð ð ð ð õ  Ô;¸DÀ(ÑKÔKˆHð% ð 	Lð 	Lð 	Lð 	Lð 	Lr,   c              +   ó  K  — t          j        dt          ¬¦  «         |s&d„ t          t	          | ¦  «        ¦  «        D ¦   «         }|D ]B} || |         fi |¤Ž}	|r" ||	¦  «        |	                     ¦   «         fV — Œ5 ||	¦  «        V — ŒCdS )a§  
        .. deprecated:: 4.19
           This method will be removed with the next major release due to serious issues rooted in the original API design. Use :meth:`.PdfPage.render()` instead.
           *Note that the CLI provides parallel rendering using a proper caller-side process pool with inline saving in rendering jobs.*
        
        .. versionchanged:: 4.25
           Removed the original process pool implementation and turned this into a wrapper for linear rendering, due to the serious conceptual issues and possible memory load escalation, especially with expensive receiving code (e.g. PNG encoding) or long documents. See the changelog for more info
        z®The document-level pdf.render() API is deprecated and uncored due to serious issues in the original concept. Use page.render() and a caller-side loop or process pool instead.)Úcategoryc                 ó   — g | ]}|‘ŒS r7   r7   )r±   rH   s     r+   ú
<listcomp>z&PdfDocument.render.<locals>.<listcomp>M  s   € Ð8Ð8Ð8 !˜AÐ8Ð8Ð8r,   N)ÚwarningsÚwarnÚDeprecationWarningrE   rF   Úget_info)
r$   Ú	converterÚrendererÚpage_indicesÚ	pass_infoÚn_processesÚmk_formconfigÚkwargsrH   Úbitmaps
             r+   ÚrenderzPdfDocument.render7  sØ   è è € õ& 	Œð  Gõ  Rdð  	eñ  	eô  	eð  	eàð 	9Ø8Ð8¥u­S°©Y¬YÑ'7Ô'7Ð8Ñ8Ô8ˆLØð 	(ð 	(ˆAØ�X˜d 1œgÐ0Ð0¨Ð0Ð0ˆFØð (Ø �y Ñ(Ô(¨&¯/ª/Ñ*;Ô*;Ð<Ð<Ð<Ð<Ð<à�i Ñ'Ô'Ð'Ð'Ð'Ð'ð	(ð 	(r,   )NFr   )F)NN)r  Nr   N)-Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   r4   Úpropertyr9   Ústaticmethodr#   rC   rI   rL   rO   ÚclassmethodrT   ry   r_   r~   r‚   r   ÚFPDF_NO_INCREMENTALr‘   ÚFILEIDTYPE_PERMANENTr—   rœ   r¦   r¶   rº   r½   rÂ   rÊ   rÍ   rK   r×   rN   râ   rç   rê   rñ   r  r  r   r%  Ú__classcell__©r*   s   @r+   r   r      s¹  ø€ € € € € ðð ð<Xð Xð Xð Xð Xð Xð8	<ð 	<ð 	<ð 	<ð 	<ð ðð ñ „Xðð ðð ñ „\ðð0ð 0ð 0ðð ð ð ð  ð  ðð ð ð ðð ñ „[ðð-ð -ð -ð -ðb/ð /ð /ð2ð 2ð 2ð;ð ;ð ;ð "&¨XÔ-Ið ð ð ð ð> #+Ô"?ð &ð &ð &ð &ð"
ð 
ð 
ð
:ð 
:ð 
:ð q€Mðð ð ð ð 9ð 9ð 9ð3ð 3ð 3ð3ð 3ð 3ð$Pð Pð Pðð ð ð.ð ð ð ð0.ð .ð .ð9ð 9ð 9ð 9ð>	)ð 	)ð 	)ð	:ð 	:ð 	:ðð ð ð,
ð 
ð 
ðH ØØØð(Lð (Lð (Lð (Lð\ ”~ØØØØ ð(ð (ð (ð (ð (ð (ð (ð (r,   r   c                   óN   ‡ — e Zd ZdZˆ fd„Zed„ ¦   «         Zed„ ¦   «         Zˆ xZ	S )r   aM  
    Form environment helper class.
    
    Attributes:
        raw (FPDF_FORMHANDLE):
            The underlying PDFium form env handle.
        config (FPDF_FORMFILLINFO):
            Accompanying form configuration interface, to be kept alive.
        pdf (PdfDocument):
            Parent document this form env belongs to.
    c                 ó¢   •— |||c| _         | _        | _        t          ¦   «                              t
          j        | j        | j        ¦  «         d S r   )r   rt   rÞ   r!   r"   r   r#   )r$   r   rt   rÞ   r*   s       €r+   r"   zPdfFormEnv.__init__c  sB   ø€ Ø*-¨v°sÐ'ˆŒ�$”+˜tœxÝ‰Œ×Ò�Ô/°´¸d¼hÑGÔGÐGÐGÐGr,   c                 ó   — | j         S r   ©rÞ   r8   s    r+   r9   zPdfFormEnv.parentg  ó	   € àŒxˆr,   c                 óZ   — t          j        | ¦  «         t          |¦  «         d |_        d S r   )r   ÚFPDFDOC_ExitFormFillEnvironmentr3   r   )r   rt   rÞ   s      r+   r#   zPdfFormEnv._close_implk  s)   € åÔ0°Ñ5Ô5Ð5Ý
ˆ6‰
Œ
ˆ
ØˆŒˆˆr,   )
r&  r'  r(  r)  r"   r*  r9   r+  r#   r/  r0  s   @r+   r   r   V  s}   ø€ € € € € ð
ð 
ðHð Hð Hð Hð Hð ðð ñ „Xðð ðð ñ „\ðð ð ð ð r,   r   c                   ó>   ‡ — e Zd ZdZˆ fd„Zed„ ¦   «         Zd„ Zˆ xZS )r   zÄ
    XObject helper class.
    
    Attributes:
        raw (FPDF_XOBJECT): The underlying PDFium XObject handle.
        pdf (PdfDocument): Reference to the document this XObject belongs to.
    c                 ó|   •— ||c| _         | _        t          ¦   «                              t          j        ¦  «         d S r   )r   rÞ   r!   r"   r   ÚFPDF_CloseXObject)r$   r   rÞ   r*   s      €r+   r"   zPdfXObject.__init__{  s4   ø€ Ø  #ÐˆŒ�$”(Ý‰Œ×Ò�Ô3Ñ4Ô4Ð4Ð4Ð4r,   c                 ó   — | j         S r   r4  r8   s    r+   r9   zPdfXObject.parent  r5  r,   c                 óV   — t          j        | ¦  «        }t          || j        ¬¦  «        S )a  
        Returns:
            PdfObject: An independent page object representation of the XObject.
            If multiple page objects are created from one XObject, they share resources.
            Page objects created from an XObject remain valid after the XObject is closed.
        rì   )r   ÚFPDF_NewFormObjectFromXObjectr   rÞ   )r$   Úraw_pageobjs     r+   Úas_pageobjectzPdfXObject.as_pageobjectƒ  s3   € õ Ô<¸TÑBÔBˆÝØØ”(ð
ñ 
ô 
ð 	
r,   )	r&  r'  r(  r)  r"   r*  r9   r?  r/  r0  s   @r+   r   r   r  sl   ø€ € € € € ðð ð5ð 5ð 5ð 5ð 5ð ðð ñ „Xðð
ð 
ð 
ð 
ð 
ð 
ð 
r,   r   c                 ó  — d\  }}|�|dz                         d¦  «        }t          | t          ¦  «        r9t          j        t          | ¦  «        dz                         d¦  «        |¦  «        }n´t          | t          t          j        f¦  «        r't          j	        | t          | ¦  «        |¦  «        }| f}nlt          j        | d¦  «        r2t          j        | ¦  «        \  }}|r| f}t          j        ||¦  «        }n%t          dt!          | ¦  «        j        › d�¦  «        ‚t          j        |¦  «        dk     rCt          j        ¦   «         }t)          dt          j                             |¦  «        › d	�¦  «        ‚|||fS )
N)r7   r7   rž   rŸ   ÚrzInvalid input type 'r†   r
  z!Failed to load document (PDFium: z).)r¡   r   r   r   ÚFPDF_LoadDocumentr   r1   rg   ÚArrayÚFPDF_LoadMemDocument64rF   rq   rˆ   Úget_bufreaderÚFPDF_LoadCustomDocumentÚ	TypeErrorr•   r&  rB   rn   r
   Ú
ErrorToStrrs   )Ú
input_datar&   r'   r(   r)   rÞ   Ú	bufaccessÚerr_codes           r+   r    r    ‘  sw  € àÑ€GˆXØÐØ˜V‘O×+Ò+¨GÑ4Ô4ˆå�*�dÑ#Ô#ð MÝÔ(­#¨j©/¬/¸&Ñ*@×)HÒ)HÈÑ)QÔ)QÐS[Ñ\Ô\ˆˆÝ	�J¥­¬Ð 5Ñ	6Ô	6ð 	MÝÔ-¨j½#¸j¹/¼/È8ÑTÔTˆØ�.ˆˆÝ	Ô	˜J¨Ñ	,Ô	,ð MÝ%Ô3°JÑ?Ô?Ñˆ	�7Øð 	&Ø"�~ˆHÝÔ.¨y¸(ÑCÔCˆˆåÐK­t°JÑ/?Ô/?Ô/HÐKÐKÐKÑLÔLÐLåÔ! #Ñ&Ô&¨Ò*Ð*ÝÔ-Ñ/Ô/ˆÝÐc½hÔ>Q×>UÒ>UÐV^Ñ>_Ô>_ÐcÐcÐcÑdÔdÐdà�˜Ð!Ð!r,   r   z:level title is_closed n_kids page_index view_mode view_pos)%Ú__all__Úosrg   ÚloggingÚinspectr  Úpathlibr   Úcollectionsr   ÚmultiprocessingÚmpÚpypdfium2.rawr   r   Úpypdfium2.internalÚinternalrq   Úpypdfium2.versionr	   Úpypdfium2._helpers.miscr
   Úpypdfium2._helpers.pager   Úpypdfium2._helpers.pageobjectsr   Úpypdfium2._helpers.attachmentr   Ú	getLoggerr&  ro   ÚAutoCloseabler   r   r   r    r   r7   r,   r+   ú<module>r^     s¸  ðð H€à 	€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø %Ð %Ð %Ð %Ð %Ð %Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø +Ð +Ð +Ð +Ð +Ð +Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7à	ˆÔ	˜8Ñ	$Ô	$€ðy(ð y(ð y(ð y(ð y(�8Ô)ñ y(ô y(ð y(ðxð ð ð ð �(Ô(ñ ô ð ð8
ð 
ð 
ð 
ð 
�(Ô(ñ 
ô 
ð 
ð>"ð "ð "ð6 �Ð,Ð.jÑkÔk€ðð r,   