
    ,h]                        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mZm	Z	m
Z
mZmZmZ ddlmZ ddl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 ddlmZmZm Z  d	Z!d
Z" G d de      Z# G d de#      Z$ G d de#      Z% G d de#      Z& G d dejN                  e#      Z( G d de)e#      Z* G d de+e#      Z, G d de-e#      Z. G d de-e#      Z/de-de+fdZ0y)     N)	unhexlify)AnyCallableListOptionalTupleUnioncast   )_pdfdoc_encoding_rev)PdfObjectProtocolPdfWriterProtocol)	
StreamTypeb_deprecation_with_replacementhex_str	hexencodelogger_warningread_non_whitespaceread_until_regexstr_)STREAM_TRUNCATED_PREMATURELYPdfReadErrorPdfStreamErrorzMathieu Fenniakzbiziqe@mathieu.fenniak.netc            
           e Zd ZU ej                  Zed   ed<   ed   ed<   de	fdZ
de	fdZ	 	 dded	ed
eeedf   ee   df   dd fdZdededefdZded    fdZded    fdZdededee	f   ddfdZy)	PdfObject).zhashlib._Hash	hash_funcIndirectObjectindirect_referencereturnc                 (    d| z  j                         S )Nz%s)encodeselfs    V/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/PyPDF2/generic/_base.pyhash_value_datazPdfObject.hash_value_data;   s    t##%%    c                     | j                   j                  d| j                  | j                               j	                         j                         S )N:)	__class____name__r   r&   	hexdigestr"   r#   s    r%   
hash_valuezPdfObject.hash_value>   sB     ''t3356@@B
 &(	r'   pdf_destforce_duplicateignore_fields.Nc                     t        d      )a  
        clone object into pdf_dest (PdfWriterProtocol which is an interface for PdfWriter)
        force_duplicate: in standard if the object has been already cloned and reference,
                         the copy is returned; when force_duplicate == True, a new copy is always performed
        ignore_fields : list/tuple of Fields names (for dictionaries that will be ignored during cloning (apply also to childs duplication)
        in standard, clone function call _reference_clone (see _reference)
        zclone PdfObject)	Exceptionr$   r.   r/   r0   s       r%   clonezPdfObject.cloneG   s     )**r'   r4   c                    	 |j                   j                  |k(  r|S 	 t        | d      r7| j                   }t	        |j
                        dz   }|t        |j                        |j                  vr"i |j                  t        |j                        <   |j                  |j                  t        |j                           v rD|j                  |j                  t        |j                           |j                           }|J |S ||j                  t        |j                           |j                  <   |j
                  j                  |       t        |d|      |_         |S # t        $ r Y Rw xY w)z
        reference the object within the _objects of pdf_dest only if
        indirect_reference attribute exists (which means the objects
        was already identified in xref/xobjstm)
        if object has been already referenced do nothing
        r      r   )r   pdfr2   hasattrlen_objectsid_id_translatedidnum
get_objectappendr   )r$   r4   r.   indiobjs         r%   _reference_clonezPdfObject._reference_cloneV   sA   	''++x7 8 4-.))CH%%&*Acgg;h&=&==;=H++BswwK899 7 7377 DD"-- //377<SYYGC ?*JBC''3774SYY?$$U+'5aH'EE$#  		s   E$ $	E10E1c                     | S )zResolve indirect references. r#   s    r%   r>   zPdfObject.get_objectu       r'   c                 <    t        ddd       | j                         S )N	getObjectr>   3.0.0)r   r>   r#   s    r%   rH   zPdfObject.getObjecty   s    $[,H  r'   streamencryption_keyc                     t         N)NotImplementedErrorr$   rJ   rK   s      r%   write_to_streamzPdfObject.write_to_stream}   s
     "!r'   FrE   )r+   
__module____qualname__hashlibsha1r   r   __annotations__r   bytesr&   r-   r   boolr	   r   strr   r4   r   r   rC   r>   rH   r   rP   rE   r'   r%   r   r   6   s    07Ix,-< !122& &E  !&AC	+#+ + U38_d3i=>	+
 
+$5	>H[1 !8K0 !" "27c58H2I"	"r'   r   c            
           e Zd Z	 	 ddededeeedf   ee   df   dd fdZ	de
d	edeef   ddfd
Zede
dd fd       Zde
d	edeef   ddfdZdefdZede
dd fd       Zy)
NullObjectr.   r/   r0   .Nr    c                 J    t        d| j                  t               |            S )clone object into pdf_destr[   )r
   rC   r[   r3   s       r%   r4   zNullObject.clone   s      L$"7"7
h"OPPr'   rJ   rK   c                 &    |j                  d       y )N   null)writerO   s      r%   rP   zNullObject.write_to_stream   s     	Wr'   c                 X    | j                  d      }|dk7  rt        d      t               S )N   r_   zCould not read Null object)readr   r[   )rJ   nulltxts     r%   read_from_streamzNullObject.read_from_stream   s+    ++a.g;<<|r'   c                 B    t        ddd       | j                  ||       y NwriteToStreamrP   rI   r   rP   rO   s      r%   rh   zNullObject.writeToStream   !     	%_6GQV^4r'   c                      y)Nr[   rE   r#   s    r%   __repr__zNullObject.__repr__   s    r'   c                 F    t        ddd       t        j                  |       S NreadFromStreamre   rI   )r   r[   re   rJ   s    r%   ro   zNullObject.readFromStream   s!    $%57I7S**622r'   rQ   )r+   rR   rS   r   rX   r	   r   rY   r   r4   r   rW   rP   staticmethodre   rh   rl   ro   rE   r'   r%   r[   r[      s     !&AC	Q#Q Q U38_d3i=>	Q
 
Q 27c58H2I	
    5 527c58H2I5	5#  3z 3l 3 3r'   r[   c            
           e Zd ZdeddfdZ	 	 ddededeee	df   e
e	   df   dd fd	Zd
edefdZde	fdZdedede	ef   ddfdZdedede	ef   ddfdZededd fd       Zededd fd       Zy)BooleanObjectvaluer    Nc                     || _         y rM   rt   )r$   rt   s     r%   __init__zBooleanObject.__init__   s	    
r'   r.   r/   r0   .c                 `    t        d| j                  t        | j                        |            S )r]   rs   )r
   rC   rs   rt   r3   s       r%   r4   zBooleanObject.clone   s,     T22=3LhW
 	
r'   _BooleanObject__oc                     t        |t              r| j                  |j                  k(  S t        |t              r| j                  |k(  S y)NF)
isinstancers   rt   rX   )r$   ry   s     r%   __eq__zBooleanObject.__eq__   s;    c=)::**T"::$$r'   c                 "    | j                   rdS dS )NTrueFalserv   r#   s    r%   rl   zBooleanObject.__repr__   s    v00r'   rJ   rK   c                 b    | j                   r|j                  d       y |j                  d       y )N   trues   false)rt   r`   rO   s      r%   rP   zBooleanObject.write_to_stream   s#     ::LL!LL"r'   c                 B    t        ddd       | j                  ||       y rg   ri   rO   s      r%   rh   zBooleanObject.writeToStream   rj   r'   c                     | j                  d      }|dk(  rt        d      S |dk(  r| j                  d       t        d      S t        d      )Nrb   r   Ts   falsr6   FzCould not read Boolean object)rc   rs   r   )rJ   words     r%   re   zBooleanObject.read_from_stream   sJ    {{1~7? &&W_KKN ''>??r'   c                 F    t        ddd       t        j                  |       S rn   )r   rs   re   rp   s    r%   ro   zBooleanObject.readFromStream   s!    $%57I7S--f55r'   rQ   )r+   rR   rS   r   rw   r   rX   r	   r   rY   r   r4   objectr|   rl   r   rW   rP   rh   rq   re   ro   rE   r'   r%   rs   rs      s   c d  !&AC		
#	
 	
 U38_d3i=>		

 
	
& T 1# 1# #27c58H2I#	#5 527c58H2I5	5 @ @ @ @ 6z 6o 6 6r'   rs   c            
       *   e Zd ZdedededdfdZ	 	 ddeded	ee	e
d
f   ee
   df   dd fdZedd       Zded   fdZde
fdZdedefdZdedefdZdedede
ef   ddfdZdedede
ef   ddfdZedededd fd       Zedededd fd       Zy)r   r=   
generationr7   r    Nc                 .    || _         || _        || _        y rM   )r=   r   r7   )r$   r=   r   r7   s       r%   rw   zIndirectObject.__init__   s    
$r'   r.   r/   r0   .c                    | j                   |k(  r|s| S t        | j                         |j                  vr"i |j                  t        | j                         <   |sm| j                  |j                  t        | j                            v r?|j	                  |j                  t        | j                            | j                           }n'| j	                         }|J |j                  |||      }|J |j                  J |j                  S )r]   )r7   r;   r<   r=   r>   r4   r   )r$   r.   r/   r0   duprB   s         r%   r4   zIndirectObject.clone   s     88xKdhh<x66646H##BtxxL14::1H1HDHH1V#V%%h&=&=bl&KDJJ&WXC//#C?"))Ho}EC%%11%%%r'   c                     | S rM   rE   r#   s    r%   r   z!IndirectObject.indirect_reference   rF   r'   r   c                 ^    | j                   j                  |       }|y |j                         S rM   )r7   r>   )r$   rB   s     r%   r>   zIndirectObject.get_object  s+    hh!!$';~~r'   c                 h    d| j                   d| j                  dt        | j                         dS )NzIndirectObject(z, ))r=   r   r;   r7   r#   s    r%   rl   zIndirectObject.__repr__  s/     b0C2bl^STUUr'   otherc                     |d uxr` t        |t              xrN | j                  |j                  k(  xr3 | j                  |j                  k(  xr | j                  |j                  u S rM   )r{   r   r=   r   r7   r$   r   s     r%   r|   zIndirectObject.__eq__  sc     &5.1&

ekk)& 5#3#33& EII%	
r'   c                 &    | j                  |       S rM   )r|   r   s     r%   __ne__zIndirectObject.__ne__  s    ;;u%%%r'   rJ   rK   c                 l    |j                  t        | j                   d| j                   d             y )N z R)r`   r   r=   r   rO   s      r%   rP   zIndirectObject.write_to_stream  s+     	R4::,a'8;<=r'   c                 B    t        ddd       | j                  ||       y rg   ri   rO   s      r%   rh   zIndirectObject.writeToStream  rj   r'   c                    d}	 | j                  d      }|st        t              |j                         rn||z  }9d}	 | j                  d      }|st        t              |j                         r|s6n||z  }<t	        |       }|dk7  r%t        dt        | j                                      t        t        |      t        |      |      S )Nr'   r6      Rz0Error reading indirect object reference at byte )
rc   r   r   isspacer   r   r   tellr   int)rJ   r7   r=   tokr   rs         r%   re   zIndirectObject.read_from_stream"  s    ++a.C$%ABB{{}SLE  
++a.C$%ABB{{}!#J   '9B76;;=CYBZ[  c%j#j/3??r'   c                 H    t        ddd       t        j                  | |      S rn   )r   r   re   rJ   r7   s     r%   ro   zIndirectObject.readFromStream=  s%     	%%57I7S..vs;;r'   rQ   )r    r   )r+   rR   rS   r   r   rw   r   rX   r	   r   rY   r   r4   propertyr   r   r>   rl   r|   r   r   rW   rP   rh   rq   re   ro   rE   r'   r%   r   r      st   c s    !&AC	&#& & U38_d3i=>	&
 
&.   H[1  V# V
C 
D 
&C &D &> >27c58H2I>	>
5 527c58H2I5	5 @ @# @:J @ @4 <<!$<	< <r'   r   c            
           e Zd Z	 ddeeef   dee   dd fdZ	 	 ddededee	ed	f   e
e   df   dd fd
ZdefdZdefdZdededeef   ddfdZdededeef   ddfdZy)FloatObjectNrt   contextr    c                     	 t         j                  j                  | t        |      |      S # t        $ r7 t        d| dt               t         j                  j                  | d      cY S w xY w)NzFloatObject (z) invalid; use 0.0 insteadz0.0)decimalDecimal__new__r   r2   r   r+   )clsrt   r   s      r%   r   zFloatObject.__new__F  s`    	7??**3UWEE 	7 ]5'1KLhW??**366		7s   ), =A,+A,r.   r/   r0   .c                 L    t        d| j                  t        |       |            S )r]   r   )r
   rC   r   r3   s       r%   r4   zFloatObject.cloneQ  s#     M4#8#8T9JH#UVVr'   c                     | | j                         k(  r-t        | j                  t        j                  d                  S | dj                  d      S )Nr6   f0)to_integralrY   quantizer   r   rstripr#   s    r%   rl   zFloatObject.__repr__Z  sG    4##%%t}}W__Q%7899 1X%%c**r'   c                 H    t        t        |       j                  d            S Nutf8)floatreprr"   r#   s    r%   
as_numericzFloatObject.as_numericc  s    T$Z&&v.//r'   rJ   rK   c                 V    |j                  t        |       j                  d             y r   r`   r   r"   rO   s      r%   rP   zFloatObject.write_to_streamf       	T$Z&&v./r'   c                 B    t        ddd       | j                  ||       y rg   ri   rO   s      r%   rh   zFloatObject.writeToStreamk  rj   r'   )r   NrQ   )r+   rR   rS   r	   rY   r   r   r   rX   r   r   r4   rl   r   r   r   rW   rP   rh   rE   r'   r%   r   r   E  s    DH	7#s(O	74<SM	7		7 !&AC	WW W U38_d3i=>	W
 
W+# +0E 00 027c58H2I0	0
5 527c58H2I5	5r'   r   c            
          e Zd Z ej                  d      Zdedd fdZ	 	 ddedede	e
edf   ee   d	f   dd fd
ZdefdZdede	d	eef   dd	fdZdede	d	eef   dd	fdZedede	d   fd       Zedede	d   fd       Zy	)NumberObjects	   [^+-.0-9]rt   r    c                     	 t         j                  | t        |            S # t        $ r- t        d| dt               t         j                  | d      cY S w xY w)NzNumberObject(z) invalid; use 0 insteadr   )r   r   
ValueErrorr   r+   )r   rt   s     r%   r   zNumberObject.__new__u  sP    	';;sCJ// 	']5'1IJHU;;sA&&	's   ! 3AAr.   r/   r0   .Nc                 L    t        d| j                  t        |       |            S )r]   r   )r
   rC   r   r3   s       r%   r4   zNumberObject.clone|  s#     ND$9$9,t:Lh$WXXr'   c                 H    t        t        |       j                  d            S r   )r   r   r"   r#   s    r%   r   zNumberObject.as_numeric  s    4:$$V,--r'   rJ   rK   c                 V    |j                  t        |       j                  d             y r   r   rO   s      r%   rP   zNumberObject.write_to_stream  r   r'   c                 B    t        ddd       | j                  ||       y rg   ri   rO   s      r%   rh   zNumberObject.writeToStream  rj   r'   )r   r   c                     t        | t        j                        }|j                  d      dk7  rt	        |      S t        |      S )N   .)r   r   NumberPatternfindr   )rJ   nums     r%   re   zNumberObject.read_from_stream  s:    v|'A'AB88D>Rs##C  r'   c                 F    t        ddd       t        j                  |       S rn   )r   r   re   rp   s    r%   ro   zNumberObject.readFromStream  s#     	%%57I7S,,V44r'   rQ   )r+   rR   rS   recompiler   r   r   rX   r	   r   rY   r   r4   r   r   r   rW   rP   rh   rq   re   ro   rE   r'   r%   r   r   r  s%   BJJ|,M'C 'N ' !&AC	YY Y U38_d3i=>	Y
 
Y.C .0 027c58H2I0	0
5 527c58H2I5	5 ! !6S0T ! ! 55	,	-5 5r'   r   c            
           e Zd ZdZ	 	 ddededeeedf   e	e   df   dd fdZ
edefd	       Zd
ededeef   ddfdZd
ededeef   ddfdZy)ByteStringObjecta=  
    Represents a string object where the text encoding could not be determined.
    This occurs quite often, as the PDF spec doesn't provide an alternate way to
    represent strings -- for example, the encryption data stored in files (like
    /O) is clearly not text, but is still stored in a "String" object.
    r.   r/   r0   .Nr    c           
      ^    t        d| j                  t        t        |             |            S )r]   r   )r
   rC   r   rW   r3   s       r%   r4   zByteStringObject.clone  s.     !!"25;"?J
 	
r'   c                     | S )z7For compatibility with TextStringObject.original_bytes.rE   r#   s    r%   original_byteszByteStringObject.original_bytes  s	     r'   rJ   rK   c                     | }|rddl m}  |||      }|j                  d       |j                  t        |             |j                  d       y )Nr   RC4_encrypt   <   >)	_securityr   r`   r   )r$   rJ   rK   bytearrr   s        r%   rP   z ByteStringObject.write_to_stream  sD     /!.':GTYw'(Tr'   c                 B    t        ddd       | j                  ||       y rg   ri   rO   s      r%   rh   zByteStringObject.writeToStream  rj   r'   rQ   )r+   rR   rS   __doc__r   rX   r	   r   rY   r   r4   r   rW   r   r   rP   rh   rE   r'   r%   r   r     s     !&AC	



 

 U38_d3i=>	


 


   
 
27c58H2I
	
5 527c58H2I5	5r'   r   c            
           e Zd ZdZ	 	 ddededeeedf   e	e   df   dd fd	Z
dZdZedefd
       ZdefdZdededeef   ddfdZdededeef   ddfdZy)TextStringObjectz
    Represents a string object that has been decoded into a real unicode string.
    If read from a PDF document, this string appeared to match the
    PDFDocEncoding, or contained a UTF-16BE BOM mark to cause UTF-16 decoding to
    occur.
    Fr.   r/   r0   .Nr    c                     t        |       }| j                  |_        | j                  |_        t        d| j	                  ||            S )r]   r   )r   autodetect_pdfdocencodingautodetect_utf16r
   rC   )r$   r.   r/   r0   rB   s        r%   r4   zTextStringObject.clone  sE     t$(,(F(F%#44&(=(=c8(LMMr'   c                 "    | j                         S )a-  
        It is occasionally possible that a text string object gets created where
        a byte string object was expected due to the autodetection mechanism --
        if that occurs, this "original_bytes" property can be used to
        back-calculate what the original encoded bytes were.
        )get_original_bytesr#   s    r%   r   zTextStringObject.original_bytes  s     &&((r'   c                     | j                   r"t        j                  | j                  d      z   S | j                  rt        |       S t        d      )Nutf-16bez#no information about original bytes)r   codecsBOM_UTF16_BEr"   r   encode_pdfdocencodingr2   r#   s    r%   r   z#TextStringObject.get_original_bytes  sG       &&Z)@@@++(..ABBr'   rJ   rK   c                    	 t        |       }|r-ddlm}  |||      }t        |      }|j                  |d        y |j                  d       |D ]a  }t        |      j                         s#|dk7  r|j                  t        d|z               ?|j                  t        t        |                   c |j                  d       y # t        $ r% t        j                  | j	                  d      z   }Y w xY w)Nr   r   r      (    z\%03o   ))r   UnicodeEncodeErrorr   r   r"   r   r   r   rP   r`   chrisalnumr   )r$   rJ   rK   r   r   rB   cs          r%   rP   z TextStringObject.write_to_stream  s    	D+D1G /!.':G"7+C-LL -1v~~'AI
 LLHqL!12LLCF,- LL' " 	D))DKK
,CCG	Ds   C +C32C3c                 B    t        ddd       | j                  ||       y rg   ri   rO   s      r%   rh   zTextStringObject.writeToStream  rj   r'   rQ   )r+   rR   rS   r   r   rX   r	   r   rY   r   r4   r   r   r   rW   r   r   r   rP   rh   rE   r'   r%   r   r     s     !&AC	
N
N 
N U38_d3i=>	
N
 

N !&) ) )CE C 27c58H2I	:5 527c58H2I5	5r'   r   c            
          e Zd Z ej                  d      ZdZddddd ed      D  ci c]   }t        |      d	|d
j                         " c}}} Z
	 	 ddededeeedf   ee   df   dd fdZdededeef   ddfdZdededeef   ddfdZdefdZededefd       Zedededd fd       Zedededd fd       Zyc c}}} w )
NameObjects   \s+|[\(\)<>\[\]{}/%]   /s   #23s   #28s   #29s   #2F)#(r   /!   r   02Xr.   r/   r0   .Nr    c                 L    t        d| j                  t        |       |            S )r]   r   )r
   rC   r   r3   s       r%   r4   zNameObject.clone+  s#     L$"7"7
48H("STTr'   rJ   rK   c                 B    |j                  | j                                y rM   )r`   renumberrO   s      r%   rP   zNameObject.write_to_stream4  s     	T]]_%r'   c                 B    t        ddd       | j                  ||       y rg   ri   rO   s      r%   rh   zNameObject.writeToStream9  rj   r'   c                 F   | d   j                  d      }|dk7  rt        d|  dt               | dd  D ]H  }|dkD  r.|j                  d      D ]  }|d|d	j                         z  } 6	 || j                  |   z  }J |S # t        $ r ||j                  d      z  }Y lw xY w)
Nr   utf-8r   z$Incorrect first char in NameObject:(r   r6   ~r   r   )r"   r   r+   renumber_tableKeyError)r$   outr   xs       r%   r   zNameObject.renumber?  s    1gnnW%$;A$qI8Tab 	-A3w'* 0AQqg;--//C0-4..q11C	- 
   -188G,,C-s   *B  B B sinc                     | j                  dd      }|dk\  r?	 | d | t        | |dz   |dz          z   | |dz   d  z   } | j                  d|dz         }|dk\  r?| S # t        $ r |dz   }Y w xY w)N   #r   r6      )r   r   r   )r  rA   s     r%   unnumberzNameObject.unnumberN  s    HHT11f"1g	#a!ea!e*< ==AEGLHHT1q5) 1f 
	   Es   8A A*)A*r7   c                 @   | j                  d      }|t        j                  k7  rt        d      |t	        | t        j
                  d      z  }	 t        j                  |      }dD ]   }	 |j                  |      }t        |      c S  t        d|ddd      # t        $ r Y =w xY w# t        t        f$ rf}|j                  s<t        d	t        |       d
t               t        |j                  d            cY d }~S t        d	t        |       d
      |d }~ww xY w)Nr6   zname read errorT)
ignore_eof)r   gbk r   zCode Not Foundz"Illegal character in Name Object (r   charmap)rc   r   surfixr   r   delimiter_patternr  decoder2   UnicodeDecodeErrorr   strictr   r   r+   )rJ   r7   nameencretes         r%   re   zNameObject.read_from_stream[  s   {{1~:$$$011 )E)ERVWW	 &&t,D' ++c*C%c?* %Rq!5EFF !  #$67 		::8dAF "$++i"899"8dAF		sO   B( +BB( 	B( 	B%"B( $B%%B( (D7AD9D?DDc                 H    t        ddd       t        j                  | |      S rn   )r   r   re   r   s     r%   ro   zNameObject.readFromStreamw  s%     	%%57I7S**6377r'   rQ   )r+   rR   rS   r   r   r  r  ranger   r"   r   r   rX   r	   r   rY   r   r4   r   rW   rP   rh   r   rq   r  re   ro   ).0rA   r   s   000r%   r   r      s   "

#;<F	
 27r
;
;A3q6Qqg;%%''
;N !&AC	UU U U38_d3i=>	U
 
U& &27c58H2I&	&
5 527c58H2I5	5%  
e 
 
 
  # ,  6 88!$8	8 8a <s   %C
r   unicode_stringr    c           	          d}| D ]!  }	 |t        t        t        |               z  }# |S # t        $ r t	        d|ddd      w xY w)Nr'   pdfdocencodingr   z#does not exist in translation table)r   r   r   r   r   )r  retvalr   s      r%   r   r     sf    F 	b1!4566F M	  	$ !R-R 	s	   +A)1r   r   rT   r   binasciir   typingr   r   r   r   r   r	   r
   _codecsr   
_protocolsr   r   _utilsr   r   r   r   r   r   r   r   r   errorsr   r   r   
__author____author_email__r   r[   rs   r   r   r   r   r   rW   r   rY   r   r   r   rE   r'   r%   <module>r$     s   8    	  D D D * =
 
 
 P O
/ J"! J"Z"3 "3J66I 66ra<Y a<H*5'//9 *5Z-53	 -5`)5ui )5XO5sI O5d\8i \8~	# 	% 	r'   