o
    hْ                     @   s  d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZ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&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZD eEeFZGG dd de-ZHG dd deIZJG dd de&ZKG dd de&ZLG dd de&ZMG dd de&ZNG dd deNZOG dd dePZQG d d! d!ePZRG d"d# d#eNZSe<d$ZTe<d%ZUe<d&ZVG d'd( d(ZWG d)d* d*eWZXG d+d, d,eXZYG d-d. d.eWZZG d/d0 d0Z[G d1d2 d2e[Z\G d3d4 d4e\Z]G d5d6 d6Z^G d7d8 d8e$Z_dS )9    N)md5sha256sha384sha512)AnyCallableDictIterableIteratorKeysViewListOptionalSequenceTupleTypeUnioncast)default_backend)Cipher
algorithmsmodes)settings)Arcfour)safe_int)
NumberTree)PDFExceptionPDFKeyErrorPDFObjectNotFoundPDFTypeError)	PDFParserPDFStreamParserPDFSyntaxError)	DecipherCallable	PDFStreamdecipher_all
dict_value	int_value
list_value	str_valuestream_value
uint_value)PSEOF)KWDLITliteral_name)choplistdecode_textformat_int_alphaformat_int_romannunpack	unpad_aesc                   @      e Zd ZdS )PDFNoValidXRefN__name__
__module____qualname__ r;   r;   M/var/www/html/govbot/env/lib/python3.10/site-packages/pdfminer/pdfdocument.pyr6   =       r6   c                   @      e Zd ZdZdS )PDFNoValidXRefWarningztLegacy warning for missing xref.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr8   r9   r:   __doc__r;   r;   r;   r<   r?   A       r?   c                   @   r5   )PDFNoOutlinesNr7   r;   r;   r;   r<   rC   H   r=   rC   c                   @   r5   )PDFNoPageLabelsNr7   r;   r;   r;   r<   rD   L   r=   rD   c                   @   r5   )PDFDestinationNotFoundNr7   r;   r;   r;   r<   rE   P   r=   rE   c                   @   r5   )PDFEncryptionErrorNr7   r;   r;   r;   r<   rF   T   r=   rF   c                   @   r5   )PDFPasswordIncorrectNr7   r;   r;   r;   r<   rG   X   r=   rG   c                   @   r>   )PDFEncryptionWarningzyLegacy warning for failed decryption.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr@   r;   r;   r;   r<   rH   \   rB   rH   c                   @   r>   )"PDFTextExtractionNotAllowedWarningzLegacy warning for PDF that does not allow extraction.

    Not used anymore because warnings.warn is replaced by logger.Logger.warn.
    Nr@   r;   r;   r;   r<   rI   c   rB   rI   c                   @   r5   )PDFTextExtractionNotAllowedNr7   r;   r;   r;   r<   rJ   j   r=   rJ   ObjStmXRefCatalogc                   @   sf   e Zd Zdeeef fddZdee fddZ	dede
ee eef fddZd	edd
fddZd
S )PDFBaseXRefreturnc                 C      t NNotImplementedErrorselfr;   r;   r<   get_traileru      zPDFBaseXRef.get_trailerc                 C   s   g S rQ   r;   rT   r;   r;   r<   
get_objidsx   rW   zPDFBaseXRef.get_objidsobjidc                 C   s   t |rQ   )r   rU   rY   r;   r;   r<   get_pos~   s   zPDFBaseXRef.get_posparserNc                 C   rP   rQ   rR   )rU   r\   r;   r;   r<   load   rW   zPDFBaseXRef.load)r8   r9   r:   r   strr   rV   r	   intrX   r   r   r[   r   r]   r;   r;   r;   r<   rN   t   s
     rN   c                   @   s   e Zd ZdddZdefddZdeddfdd	Zdeddfd
dZde	ee
f fddZdee fddZdedeee eef fddZdS )PDFXRefrO   Nc                 C   s   i | _ i | _d S rQ   )offsetstrailerrT   r;   r;   r<   __init__   s   
zPDFXRef.__init__c                 C      d| j   S )Nz<PDFXRef: offsets=%r>ra   keysrT   r;   r;   r<   __repr__      zPDFXRef.__repr__r\   c              
   C   s  	 z|  \}}| }|sW q W n ty   tdw |dr(|| n|d}t|dkr?d|d|}t|z	tt	|\}}W n t
y[   d|d|}t|w t||| D ]c}z|  \}	}| }W n ty|   tdw |d}t|d	krd
|d|}t||\}
}}|dkrqct|
}t|}|d ur|d urd ||f| j|< qctd| d|
d|d qcqtd| j | | d S )NTz Unexpected EOF - file corrupted?   trailer       zTrailer not found: z: line=zInvalid line:    zInvalid XRef format: z, line=   nzNot adding object z to xref because position z or generation number z cannot be parsed as an intzxref objects: %r)nextlinestripr+   r6   
startswithseeksplitlenmapr_   
ValueErrorranger   ra   logwarningdebugload_trailer)rU   r\   poslinef	error_msgstartnobjsrY   _pos_bgenno_buse_bpos_igenno_ir;   r;   r<   r]      sb   




,zPDFXRef.loadc                 C   s   z|  \}}|tdu sJ t|| \}}W n ty4   |d}|s,td|d \}}Y nw | jt	| t
d| j d S )Nri      zUnexpected EOF - file corruptedr   z
trailer=%r)	nexttokenr,   r^   
nextobjectr+   popr6   rb   updater%   rw   ry   )rU   r\   r   kwddicxr;   r;   r<   rz      s   
zPDFXRef.load_trailerc                 C      | j S rQ   rb   rT   r;   r;   r<   rV         zPDFXRef.get_trailerc                 C   s
   | j  S rQ   re   rT   r;   r;   r<   rX         
zPDFXRef.get_objidsrY   c                 C   s
   | j | S rQ   )ra   rZ   r;   r;   r<   r[      r   zPDFXRef.get_posrO   N)r8   r9   r:   rc   r^   rg   r   r]   rz   r   r   rV   r   r_   rX   r   r   r[   r;   r;   r;   r<   r`      s    
0$r`   c                   @   s6   e Zd ZdefddZedZdeddfddZ	dS )	PDFXRefFallbackrO   c                 C   rd   )Nz<PDFXRefFallback: offsets=%r>re   rT   r;   r;   r<   rg      rh   zPDFXRefFallback.__repr__z^(\d+)\s+(\d+)\s+obj\br\   Nc                 C   s  | d 	 z| \}}W n
 ty   Y d S w |dr1| | | | td| j d S |d}| j	
|}|s?q| \}}t|}t|}	d ||	f| j|< | | | \}
}t|tr|dtu rt|}z|d }W n ty   tjrtd| d}Y nw t| }g }z	 | \}
}|tt| q ty   Y nw t|t|d	 }t|D ]}||d	  }||df| j|< qq)
Nr   r   ri   trailer: %rzlatin-1r   NN is not defined: %rrk   )rq   rn   r+   rp   rz   rw   ry   rb   decode
PDFOBJ_CUEmatchgroupsr_   ra   r   
isinstancer#   getLITERAL_OBJSTMr)   KeyErrorr   STRICTr!   r    get_dataappendr   minrs   rv   )rU   r\   r{   
line_bytesr|   mobjid_sgenno_srY   gennor   objstreamnparser1objsindexobjid1r;   r;   r<   r]      s\   





zPDFXRefFallback.load)
r8   r9   r:   r^   rg   recompiler   r   r]   r;   r;   r;   r<   r      s    
r   c                   @   s~   e Zd ZdddZdefddZdeddfdd	Zdeee	f fd
dZ
dee fddZdedeee eef fddZdS )PDFXRefStreamrO   Nc                 C   s(   d | _ d | _d | _d | _d | _g | _d S rQ   )dataentlenfl1fl2fl3rangesrT   r;   r;   r<   rc     s   
zPDFXRefStream.__init__c                 C   s
   d| j  S )Nz<PDFXRefStream: ranges=%r>)r   rT   r;   r;   r<   rg     r   zPDFXRefStream.__repr__r\   c           	      C   s*  |  \}}|  \}}|  \}}| \}}t|tr$|dtur(td|d }|dd|f}t|d dkr@td| j	
tttttf  td| |d \| _| _| _| jd urk| jd urk| jd usmJ | | _| j| j | j | _|j| _td	d
tt| j	| j| j| j d S )Nr   zInvalid PDF stream spec.SizeIndexr   rk   zInvalid index numberWz&xref stream: objid=%s, fields=%d,%d,%dz, )r   r   r   r#   r   LITERAL_XREFr6   rs   r!   r   extendr   r
   r   r_   r/   r   r   r   r   r   r   attrsrb   rw   ry   joinrt   repr)	rU   r\   r   rY   r   r   r   sizeindex_arrayr;   r;   r<   r]     s.   $"
zPDFXRefStream.loadc                 C   r   rQ   r   rT   r;   r;   r<   rV   ,  r   zPDFXRefStream.get_trailerc                 c   s    | j D ]?\}}t|D ]6}| jd usJ | jd usJ | j| }| j||| j  }t|d | j d}|dks=|dkrB|| V  qqd S )Nr   rk   )r   rv   r   r   r3   r   )rU   r   r   ioffsetentf1r;   r;   r<   rX   /  s   

zPDFXRefStream.get_objidsrY   c           
      C   s  d}| j D ]\}}||kr||| k r||| 7 } n	||7 }qt|| jd us+J | jd us2J | jd urA| jd urA| jd usCJ | j| }| j||| j  }t|d | j d}t|| j| j| j  }t|| j| j d  }	|dkr~d ||	fS |dkr||	dfS t|)Nr   r   rk   )r   r   r   r   r   r   r   r3   )
rU   rY   r   r   r   r   r   r   f2f3r;   r;   r<   r[   :  s(   
"


zPDFXRefStream.get_posr   )r8   r9   r:   rc   r^   rg   r   r]   r   r   rV   r
   r_   rX   r   r   r[   r;   r;   r;   r<   r     s    
$r   c                   @   sX  e Zd ZU dZdZeedf ed< 	d.dee	 de
eef ded	d
fddZd/ddZd/ddZd/ddZd	efddZd	efddZd	efddZde	d	e	fddZde	d	e	fddZded	ee	 fddZde	d	ee	 fd d!Zde	d	efd"d#Zde	d	ee	 fd$d%Z	
d0d&ed'ed(e	d)ee
eef  d	e	f
d*d+Zd&ed'ed(e	d	e	fd,d-Zd
S )1PDFStandardSecurityHandlers    (N^NuAd NV.. h>/dSiz)rk   rl   .supported_revisions docidparampasswordrO   Nc                 C   s   || _ || _|| _|   d S rQ   )r   r   r   init)rU   r   r   r   r;   r;   r<   rc   \  s   z#PDFStandardSecurityHandler.__init__c                 C   s2   |    | j| jvrd| j }t||   d S )NzUnsupported revision: param=%r)init_paramsrr   r   rF   init_key)rU   r~   r;   r;   r<   r   g  s
   
zPDFStandardSecurityHandler.initc                 C   sn   t | jdd| _t | jd | _t| jd d| _t| jd | _t| jd | _	t | jdd	| _
d S )
NVr   RP    OULength(   )r&   r   r   vr   r*   pr(   oulengthrT   r;   r;   r<   r   n  s   z&PDFStandardSecurityHandler.init_paramsc                 C   s    |  | j| _| jd u rtd S rQ   )authenticater   keyrG   rT   r;   r;   r<   r   v  s   
z#PDFStandardSecurityHandler.init_keyc                 C      t | jd@ S )N   boolr   rT   r;   r;   r<   is_printable{  rh   z'PDFStandardSecurityHandler.is_printablec                 C   r   )N   r   rT   r;   r;   r<   is_modifiable~  rh   z(PDFStandardSecurityHandler.is_modifiablec                 C   r   )N   r   rT   r;   r;   r<   is_extractable  rh   z)PDFStandardSecurityHandler.is_extractabler   c                    s   | j dkrt|| jS t| j}|| jd  t|| }tddD ] d	 fddt
|D }t||}q(||7 }|S )Nrk   r   r          c                 3       | ]
}t | A fV  qd S rQ   bytes.0cr   r;   r<   	<genexpr>      z7PDFStandardSecurityHandler.compute_u.<locals>.<genexpr>)r   r   encryptPASSWORD_PADDINGr   r   r   digestrv   r   iter)rU   r   hashresultkr;   r   r<   	compute_u  s   

z$PDFStandardSecurityHandler.compute_uc                 C   s   || j  d d }t|}|| j |td| j || jd  | jdkr5t	t
| js5|d | }d}| jdkrV| jd }td	D ]}t|d |  }qI|d | S )
Nr   <Lr   r   s      rl   r   2   )r   r   r   r   structpackr   r   r   r   PDFStandardSecurityHandlerV4encrypt_metadatar   r   rv   )rU   r   r   r   r   r   r;   r;   r<   compute_encryption_key  s   



z1PDFStandardSecurityHandler.compute_encryption_keyc                 C   s*   | d}| |}|d u r| |}|S )Nlatin1)encodeauthenticate_user_passwordauthenticate_owner_password)rU   r   password_bytesr   r;   r;   r<   r     s
   


z'PDFStandardSecurityHandler.authenticatec                 C   s   |  |}| |r|S d S rQ   )r  verify_encryption_key)rU   r   r   r;   r;   r<   r    s   

z5PDFStandardSecurityHandler.authenticate_user_passwordc                 C   s8   |  |}| jdkr|| jkS |d d | jd d kS )Nrk   r   )r   r   r   )rU   r   r   r;   r;   r<   r    s   


z0PDFStandardSecurityHandler.verify_encryption_keyc                    s   || j  d d }t|}| jdkrtdD ]}t| }qd}| jdkr+| jd }| d | }| jdkrAt|| j}n!| j}tdddD ] d		 fd
dt
|D }t||}qJ| |S )Nr   rl   r   r   r   rk      r   c                 3   r   rQ   r   r   r   r;   r<   r     r   zIPDFStandardSecurityHandler.authenticate_owner_password.<locals>.<genexpr>)r   r   r   rv   r   r   r   decryptr   r   r   r  )rU   r   r   r   r   r   user_passwordr   r;   r   r<   r	    s    




z6PDFStandardSecurityHandler.authenticate_owner_passwordrY   r   r   r   c                 C   s   |  |||S rQ   )decrypt_rc4)rU   rY   r   r   r   r;   r;   r<   r    s   z"PDFStandardSecurityHandler.decryptc                 C   sl   | j d usJ | j td|d d  td|d d  }t|}| d tt|d }t||S )Nr   rl   rk   r   )	r   r  r  r   r   r   rs   r   r  )rU   rY   r   r   r   r   r;   r;   r<   r    s
   .z&PDFStandardSecurityHandler.decrypt_rc4r   r   rQ   )r8   r9   r:   r   r   r   r_   __annotations__r   r   r   r^   r   rc   r   r   r   r   r   r   r   r   r  r   r   r  r  r	  r  r  r;   r;   r;   r<   r   U  sN   
 





	r   c                       s   e Zd ZU dZeedf ed< d fddZdede	e
eeegef  fd	d
Z		ddededede	eeef  de	e defddZdedededefddZdedededefddZ  ZS )r  )r   .r   rO   Nc                    s   t    d| _t| jd| _t| jd | _t| jd | _	t
| jdd| _| j| j	kr:d| j }t|i | _| j D ]\}}| t|d }|d u r\d	| j }t||| j|< qB| j| jd
< | j	| jvrwd| j }t|d S )N   CFStmFStrFEncryptMetadataTz"Unsupported crypt filter: param=%rCFMz%Unknown crypt filter method: param=%rIdentityz Undefined crypt filter: param=%r)superr   r   r%   r   r   cfr.   stmfstrfr   r  rF   cfmitemsget_cfmdecrypt_identity)rU   r~   r   r   r}   	__class__r;   r<   r     s*   



z(PDFStandardSecurityHandlerV4.init_paramsnamec                 C   s    |dkr| j S |dkr| jS d S )NV2AESV2)r  decrypt_aes128rU   r$  r;   r;   r<   r     s
   z$PDFStandardSecurityHandlerV4.get_cfmrY   r   r   r   c                 C   sP   | j s|d ur|d}|d urt|dkr|S |d u r| j}| j| |||S )Nr   Metadata)r  r   r.   r  r  )rU   rY   r   r   r   r$  tr;   r;   r<   r    s   
z$PDFStandardSecurityHandlerV4.decryptc                 C   s   |S rQ   r;   )rU   rY   r   r   r;   r;   r<   r!    rW   z-PDFStandardSecurityHandlerV4.decrypt_identityc           
      C   s   | j d usJ | j td|d d  td|d d  d }t|}| d tt|d }|d d }|dd  }tt	|t
|t d}| |}	t|	S )Nr   rl   rk   s   sAlTr   backend)r   r  r  r   r   r   rs   r   r   AESr   CBCr   	decryptorr   r4   )
rU   rY   r   r   r   r   initialization_vector
ciphertextcipher	plaintextr;   r;   r<   r'    s(   z+PDFStandardSecurityHandlerV4.decrypt_aes128r   )NN)r8   r9   r:   r   r   r_   r  r   r^   r   r   r   r   r   r   r  r!  r'  __classcell__r;   r;   r"  r<   r    s*   
 $
"r  c                	       s  e Zd ZdZd" fddZdedeeeee	ge	f  fddZ
d	edee	 fd
dZd	ede	fddZ	d#d	e	de	dee	 de	fddZ	d#d	e	de	dee	 de	fddZ	d#d	e	de	dee	 de	fddZede	defddZde	de	de	de	fddZdedede	de	fd d!Z  ZS )$PDFStandardSecurityHandlerV5)r      rO   Nc                    s   t    d| _t| jd | _t| jd | _| jd d | _| jdd | _	| jdd  | _
| jd d | _| jdd | _| jdd  | _d S )N   OEUEr   r   )r  r   r   r(   r   oeuer   o_hasho_validation_salt
o_key_saltr   u_hashu_validation_salt
u_key_saltrT   r"  r;   r<   r   ,  s   
z(PDFStandardSecurityHandlerV5.init_paramsr$  c                 C   s   |dkr| j S d S )NAESV3)decrypt_aes256r(  r;   r;   r<   r   8  s   z$PDFStandardSecurityHandlerV5.get_cfmr   c                 C   s   |  |}| || j| j}|| jkr2| || j| j}tt|t	
dt d}| | jS | || j}|| jkr[| || j}tt|t	
dt d}| | jS d S )Ns                   r+  )_normalize_password_password_hashr=  r   r<  r>  r   r   r-  r   r.  r   r/  r   r:  r@  r?  rA  r;  )rU   r   
password_br   r2  r;   r;   r<   r   >  s(   


z)PDFStandardSecurityHandlerV5.authenticatec                 C   s8   | j dkr|s	dS ddlm} ||}|dd d S )Nr6  r   r   )saslprepzutf-8   )r   pdfminer._saslpreprG  r  )rU   r   rG  r;   r;   r<   rD  T  s   
z0PDFStandardSecurityHandlerV5._normalize_passwordsaltvectorc                 C   s.   | j dkr| |||S | ||dd |S )z2Compute password hash depending on revision numberr   r   r   )r   _r5_password_r6_password)rU   r   rJ  rK  r;   r;   r<   rE  ^  s   
z+PDFStandardSecurityHandlerV5._password_hashc                 C   s,   t |}|| |dur|| | S )z#Compute the password for revision 5N)r   r   r   )rU   r   rJ  rK  r   r;   r;   r<   rL  i  s
   

z)PDFStandardSecurityHandlerV5._r5_passwordc                 C   s   t |}|| |dur|| | }t ttf}d }}|dk s)||d krj|| |p/d d }	| j|dd |dd |	d}
|| |
dd  }||
 }|
t|
d  }|d7 }|dk s)||d ks)|dd S )	z#Compute the password for revision 6Nr   @   r   r   r   )r   ivr   r   )r   r   r   r   r   _aes_cbc_encrypt_bytes_mod_3rs   )rU   r   rJ  rK  initial_hashr   hashesround_nolast_byte_valk1e	next_hashr;   r;   r<   rM  v  s    


 	z)PDFStandardSecurityHandlerV5._r6_passwordinput_bytesc                 C   s   t dd | D d S )Nc                 s   s    | ]}|d  V  qdS )rl   Nr;   )r   br;   r;   r<   r     s    z<PDFStandardSecurityHandlerV5._bytes_mod_3.<locals>.<genexpr>rl   )sum)rY  r;   r;   r<   rQ    s   z)PDFStandardSecurityHandlerV5._bytes_mod_3r   rO  r   c                 C   s0   t t|t|}| }|||  S rQ   )r   r   r-  r   r.  	encryptorr   finalize)rU   r   rO  r   r2  r\  r;   r;   r<   rP    s   z-PDFStandardSecurityHandlerV5._aes_cbc_encryptrY   r   c                 C   sZ   |d d }|dd  }| j d usJ tt| j t|t d}| |}t	|S )Nr   r+  )
r   r   r   r-  r   r.  r   r/  r   r4   )rU   rY   r   r   r0  r1  r2  r3  r;   r;   r<   rC    s   
z+PDFStandardSecurityHandlerV5.decrypt_aes256r   rQ   )r8   r9   r:   r   r   r^   r   r   r_   r   r   r   rD  rE  rL  rM  staticmethodrQ  rP  rC  r4  r;   r;   r"  r<   r5  )  sP    $


"r5  c                   @   st  e Zd ZU dZeeeedZee	e
e f ed< 			d.dededed	ed
df
ddZedZd/ded
dfddZdede	de	d
efddZded
eee e	f fddZde	de	d
efddZde	d
efddZeeeeeef Zd
ee fddZd
ee fdd Zd!ed"e ee!f d
efd#d$Z"d%e ee!f d
efd&d'Z#ded
e	fd(d)Z$ded*e	d+ee% d
dfd,d-Z&dS )0PDFDocumentaP  PDFDocument object represents a PDF document.

    Since a PDF file can be very big, normally it is not loaded at
    once. So PDF document has to cooperate with a PDF parser in order to
    dynamically import the data as processing goes.

    Typical usage:
      doc = PDFDocument(parser, password)
      obj = doc.getobj(objid)

    )r   rk   r   r   security_handler_registryr   Tr\   r   cachingfallbackrO   Nc           
      C   sn  || _ g | _g | _i | _d| _d| _d| _i | _i | _|| _| j	|  d | _
 | _| _z| |}| ||| j W n tyX   |rVd|_t }|| | j| Y nw | jD ]C}| }|seq\d|v rd|v rtt|d }	nd}	|	t|d f| _| | d|v r| jt|d  d|v rt|d | _ nq\td| jd	turtjrtd
dS dS )z1Set the document to use a given PDFParser object.NTEncryptID)r   r   InfoRootz(No /Root object! - Is this really a PDF?r   zCatalog not found!)ra  xrefsinfocatalog
encryptiondecipher_parser_cached_objs_parsed_objsset_documentr   r   r   	find_xrefread_xref_fromr6   rb  r   r]   r   rV   r'   r%   _initialize_passwordr!   r   LITERAL_CATALOGr   r   )
rU   r\   r   ra  rb  r{   newxrefxrefrb   id_valuer;   r;   r<   rc     sZ   



zPDFDocument.__init__   objc                 C   s   | j d usJ | j \}}t|ddkrtd| t|dd}| j|}|d u r3td| ||||}|j| _| | _|	 | _	|
 | _
| jd usSJ d| j_d S )NFilterStandardzUnknown filter: param=%rr   r   zUnknown algorithm: param=%rF)rj  r.   r   rF   r&   r`  r  rk  r   r   r   rl  rb  )rU   r   r   r   r   factoryhandlerr;   r;   r<   rr    s   



z PDFDocument._initialize_passwordr   r   rY   c                 C   s   |j | jv r| j|j  \}}n| |\}}| jr(|j d us J ||f| j|j < |d | }z|| }W |S  tyB   td| w )Nrk   zindex too big: %r)rY   rn  _get_objectsra  
IndexErrorr!   )rU   r   r   rY   r   r   r   r   r;   r;   r<   _getobj_objstm
  s   
zPDFDocument._getobj_objstmc                 C   s   | dturtjrtd| z	tt|d }W n ty-   tjr)td| d}Y nw t|	 }|
|  g }z	 | \}}|| q= tyT   Y ||fS w )Nr   zNot a stream object: %rr   r   r   )r   r   r   r   r!   r   r_   r   r    r   ro  r   r   r+   )rU   r   r   r\   r   r   r   r;   r;   r<   r|    s,   

zPDFDocument._get_objectsr{   c           	      C   s   | j d usJ | j | | j  \}}| j  \}}| j  \}}||krHg }|| jur>| j  \}}|| || jus-t|dkrH|d }||krVtd|d||tdkrbtd| | j  \}}|S )Nrk   zobjid mismatch: =rw  zInvalid object spec: offset=%r)	rl  rq   r   KEYWORD_OBJr   rs   r!   r,   r   )	rU   r{   rY   r   r   r   r   r   r   r;   r;   r<   _getobj_parse.  s&   


zPDFDocument._getobj_parsec              
   C   s  | j stdtd| || jv r| j| \}}|S | j D ]S}z
||\}}}W n	 ty3   Y qw z2|durHt| |}| 	|||}n| 
||}| jrYt| j|||}t|trd||| W  n ttfyq   Y qw t|td|| | jr||f| j|< |S )zGet object from PDF

        :raises PDFException if PDFDocument is not initialized
        :raises PDFObjectNotFound if objid does not exist in PDF
        zPDFDocument is not initializedzgetobj: objid=%rNzregister: objid=%r: %r)rg  r   rw   ry   rm  r[   r   r)   getobjr~  r  rk  r$   r   r#   	set_objidr+   r!   r   ra  )rU   rY   r   r   ru  strmidr   r   r;   r;   r<   r  J  s<   


zPDFDocument.getobjc                    s>   d| j vrtdtdtdttj f fdd  | j d dS )NOutlinesentrylevelrO   c                 3   s    t | } d| v r0d| v sd| v r0tt| d }| d}| d}| d}|||||fV  d| v rDd| v rD | d |d E d H  d| v rT | d |E d H  d S d S )	NTitleADestSEFirstLastr   Next)r%   r0   r(   r   )r  r  titledestactionsesearchr;   r<   r  v  s   


z(PDFDocument.get_outlines.<locals>.searchr   )ri  rC   objectr_   r
   r_  OutlineTyperT   r;   r  r<   get_outlinesr  s   
 zPDFDocument.get_outlinesc              	   C   s<   | j dusJ zt| j d }W |jS  ttfy   tw )zGenerate page label strings for the PDF document.

        If the document includes page labels, generates strings, one per page.
        If not, raises PDFNoPageLabels.

        The resulting iteration is unbounded.
        N
PageLabels)ri  r  r   r   rD   labels)rU   page_labelsr;   r;   r<   get_page_labels  s   zPDFDocument.get_page_labelscatr   c              	      sh   z	t | jd }W n ttfy   t fw t |  }dtttf dtf fdd|S )NNamesdrO   c                    s   d| v rt | d \}}|k s|k rd S d| v r8t | d }tttttttf tf  t	d|}| S d| v rQt | d D ]}t
|}|rP|  S qBt f)NLimitsr  rk   Kids)r'   dictr   r
   r   r   r^   r   r   r/   r%   r   )r  rV  k2r   namesr   r   r  r   lookupr;   r<   r    s"   "z'PDFDocument.lookup_name.<locals>.lookup)r%   ri  r   r   r   r   r^   r   )rU   r  r   r  d0r;   r  r<   lookup_name  s   "zPDFDocument.lookup_namer$  c                 C   s`   z	|  d|}W |S  ty/   d| jvrt|t| jd }||vr(t||| }Y |S w )NDests)r  r   ri  rE   r%   )rU   r$  r   r  r;   r;   r<   get_dest  s   	

zPDFDocument.get_destc                 C   s   d}|  D ]8}| }td| |dkr:td| | s'td|t|}|dks6td| |  S |r>|}qtd)	z0Internal function used to locate the first XRef.r   zfind_xref: %rs	   startxrefzxref found: pos=%rzInvalid xref position: r   z Invalid negative xref position: Unexpected EOF)revreadlinesro   rw   ry   isdigitr6   r_   )rU   r\   prevr|   r   r;   r;   r<   rp    s    zPDFDocument.find_xrefr   rg  c                 C   s  | | |  z| \}}W n ty   tdw td|| t|tr;| | |  t	 }|
| n||ju rD|  t }|
| || | }td| d|v rlt|d }| ||| d|v rt|d }| ||| dS dS )z$Reads XRefs from the given location.r  z"read_xref_from: start=%d, token=%rr   XRefStmPrevN)rq   resetr   r+   r6   rw   ry   r   r_   r   r]   KEYWORD_XREFrn   r`   r   rV   r&   rq  )rU   r\   r   rg  r{   tokenru  rb   r;   r;   r<   rq    s6   





zPDFDocument.read_xref_from)r   TTr  )'r8   r9   r:   rA   r   r  r5  r`  r   r_   r   r  r   r^   r   rc   r,   r  rr  r#   r  r~  r   r   r|  r  r  r   r  r
   r  r  r   r   r  r  rp  rN   rq  r;   r;   r;   r<   r_    sT   
 

;&r_  c                   @   s@   e Zd ZdZedee fddZede	de
defddZd	S )
r  zWPageLabels from the document catalog.

    See Section 8.3.1 in the PDF Reference.
    rO   c                 c   s    | j }t|dks|d d dkr!tjrtd|ddi f t|dD ]N\}\}}t|}|d}t	t
|dd}t|dd}|t|krSt|}	n|| \}
}|
| }t||| }	|	D ]}| ||}|| V  qfq&d S )Nr   z"PageLabels is missing page index 0r   Sr   r   St)valuesrs   r   r   r!   insert	enumerater%   r   r0   r(   r&   	itertoolscountrv   _format_page_label)rU   r   nextr   label_dict_unchecked
label_dictstyleprefixfirst_valuer  endr   range_lengthvaluelabelr;   r;   r<   r    s*   
zPageLabels.labelsr  r  c                 C   s   |du rd}|S |t du rt| }|S |t du r"t|  }|S |t du r.t| }|S |t du r<t|  }|S |t du rHt| }|S td| d}|S )	z+Format page label value in a specific styleNr   Dr   r   r  azUnknown page label style: %r)r-   r^   r2   upperr1   rw   rx   )r  r  r  r;   r;   r<   r  '  s*   
zPageLabels._format_page_labelN)r8   r9   r:   rA   propertyr
   r^   r  r^  r_   r   r  r;   r;   r;   r<   r    s    r  )`r  loggingr   r  hashlibr   r   r   r   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   cryptography.hazmat.backendsr   &cryptography.hazmat.primitives.ciphersr   r   r   pdfminerr   pdfminer.arcfourr   pdfminer.castingr   pdfminer.data_structuresr   pdfminer.pdfexceptionsr   r   r   r   pdfminer.pdfparserr   r    r!   pdfminer.pdftypesr"   r#   r$   r%   r&   r'   r(   r)   r*   pdfminer.psexceptionsr+   pdfminer.psparserr,   r-   r.   pdfminer.utilsr/   r0   r1   r2   r3   r4   	getLoggerr8   rw   r6   SyntaxWarningr?   rC   rD   rE   rF   rG   UserWarningrH   rI   rJ   r   r   rs  rN   r`   r   r   r   r  r5  r_  r  r;   r;   r;   r<   <module>   sX    <, 
	O3N I}  ^