o
    >eZ                     @   sp  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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 ddl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 deZ#G dd de#Z$G dd de#Z%G dd de#Z&dZ'G dd de(e#Z)G dd de*e#Z+G dd de,e#Z-G dd de.e#Z/G dd de.e#Z0de.d e,fd!d"Z1dS )#    N)	unhexlify)log10)AnyCallableClassVarDictOptionalSequenceUnioncast   )_pdfdoc_encoding_rev)PdfObjectProtocolPdfWriterProtocol)
StreamTypeb_deprecate_no_replacementlogger_warningread_non_whitespaceread_until_regexstr_)STREAM_TRUNCATED_PREMATURELYPdfReadErrorPdfStreamErrorzMathieu Fenniakzbiziqe@mathieu.fenniak.netc                   @   s   e Zd ZU ejZed ed< ed ed< de	fddZ
de	fdd	Z	
	ddededeeeeef   dd fddZ	
ddedededefddZded  fddZ	ddededee	f ddfddZdS )	PdfObject).zhashlib._Hash	hash_funcIndirectObjectindirect_referencereturnc                 C   s   d|    S )Nz%s)encodeself r"   T/var/www/html/humari/django-venv/lib/python3.10/site-packages/pypdf/generic/_base.pyhash_value_data9      zPdfObject.hash_value_datac                 C   s"   d| j j| |   f  S )Nz%s:%s)	__class____name__r   r$   	hexdigestr   r    r"   r"   r#   
hash_value<   s   zPdfObject.hash_valueFr"   pdf_destforce_duplicateignore_fieldsc                 C   s   t | jj d)a  
        Clone object into pdf_dest (PdfWriterProtocol which is an interface for PdfWriter).

        By default, this method will call ``_reference_clone`` (see ``_reference``).


        Args:
          pdf_dest: Target to clone to.
          force_duplicate: By default, if the object has already been cloned and referenced,
            the copy will be returned; when ``True``, a new copy will be created.
            (Default value = ``False``)
          ignore_fields: List/tuple of field names (for dictionaries) that will be ignored
            during cloning (applies to children duplication as well). If fields are to be
            considered for a limited number of levels, you have to add it as integer, for
            example ``[1,"/B","/TOTO"]`` means that ``"/B"`` will be ignored at the first
            level only but ``"/TOTO"`` on all levels.

        Returns:
          The cloned PdfObject
        z! does not implement .clone so far)NotImplementedErrorr&   r'   r!   r*   r+   r,   r"   r"   r#   cloneE   s   zPdfObject.cloner/   c                 C   s  z|s|j j|kr|W S W n	 ty   Y nw z| j }W n ty'   | Y S w t|jd }|dur|t|j|jvrNi |jt|j< |j|jt|j d< |sq|j|jt|j v rq|	|jt|j |j }|dusoJ |S ||jt|j |j< |j
| t|d||_ |S )aW  
        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.

        Args:
          clone:
          pdf_dest:

        Returns:
          The clone
           N	PreventGCr   )r   pdf	ExceptionAttributeErrorlen_objectsid_id_translatedidnum
get_objectappendr   )r!   r/   r*   r+   indiobjr"   r"   r#   _reference_clonec   s:   
zPdfObject._reference_clonec                 C      | S )zResolve indirect references.r"   r    r"   r"   r#   r:         zPdfObject.get_objectNstreamencryption_keyc                 C   s   t N)r-   r!   rB   rC   r"   r"   r#   write_to_stream      zPdfObject.write_to_streamFr"   )FrD   )r'   
__module____qualname__hashlibsha1r   r   __annotations__r   bytesr$   r)   r   boolr	   r
   strintr/   r   r   r?   r:   r   rF   r"   r"   r"   r#   r   4   sF   
 

-r   c                   @   s   e Zd Z		ddededeeeee	f   dd fddZ
		dd
eded	eef dd	fddZed
edd fddZdefddZd	S )
NullObjectFr"   r*   r+   r,   r   c                 C   s   t d| t ||S )Clone object into pdf_dest.rR   )r   r?   rR   r.   r"   r"   r#   r/      s   zNullObject.cloneNrB   rC   c                 C   s    |d ur	t dd |d d S )N/the encryption_key parameter of write_to_stream5.0.0   null)r   writerE   r"   r"   r#   rF      s
   zNullObject.write_to_streamc                 C   s    |  d}|dkrtdt S )N   rV   zCould not read Null object)readr   rR   )rB   nulltxtr"   r"   r#   read_from_stream   s   
zNullObject.read_from_streamc                 C   s   dS )NrR   r"   r    r"   r"   r#   __repr__   s   zNullObject.__repr__rH   rD   )r'   rI   rJ   r   rO   r   r	   r
   rP   rQ   r/   r   rN   rF   staticmethodr[   r\   r"   r"   r"   r#   rR      s.    

	rR   c                   @   s   e Zd ZdeddfddZ		dded	ed
eee	e
ef   dd fddZdedefddZde
fddZ	ddede	de
ef ddfddZededd fddZdS )BooleanObjectvaluer   Nc                 C   s
   || _ d S rD   r_   )r!   r_   r"   r"   r#   __init__   s   
zBooleanObject.__init__Fr"   r*   r+   r,   c                 C   s   t d| t| j||S )rS   r^   )r   r?   r^   r_   r.   r"   r"   r#   r/      s   zBooleanObject.clone_BooleanObject__oc                 C   s.   t |tr| j|jkS t |tr| j|kS dS )NF)
isinstancer^   r_   rO   )r!   rb   r"   r"   r#   __eq__   s
   


zBooleanObject.__eq__c                 C   s   | j rdS dS )NTrueFalser`   r    r"   r"   r#   r\      s   zBooleanObject.__repr__rB   rC   c                 C   s4   |d ur	t dd | jr|d d S |d d S )NrT   rU      trues   false)r   r_   rW   rE   r"   r"   r#   rF      s   zBooleanObject.write_to_streamc                 C   s<   |  d}|dkrtdS |dkr|  d tdS td)NrX   rg   Ts   falsr0   FzCould not read Boolean object)rY   r^   r   )rB   wordr"   r"   r#   r[      s   

zBooleanObject.read_from_streamrH   rD   )r'   rI   rJ   r   ra   r   rO   r   r	   r
   rP   rQ   r/   objectrd   r\   r   rN   rF   r]   r[   r"   r"   r"   r#   r^      s2    

r^   c                   @   s   e Zd ZdedededdfddZ			d!d
ededee	e
eef   dd fddZed"ddZded 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#dede
deef ddfddZedededd fdd ZdS )$r   r9   
generationr2   r   Nc                 C   s   || _ || _|| _d S rD   )r9   rj   r2   )r!   r9   rj   r2   r"   r"   r#   ra      s   
zIndirectObject.__init__Fr"   r*   r+   r,   c                 C   s   | j |kr	|s	| S t| j |jvri |jt| j < | j|jt| j  v rN||jt| j  | j }|rM|dus:J |jdusAJ |j}t|j|j|j S n |  }|du rdt }t	| tfsaJ | |_|
||||}|dustJ |jdus{J |jS )rS   N)r2   r7   r8   r9   r:   r   r   rj   rR   rc   _add_objectr/   )r!   r*   r+   r,   dupidrefr>   r"   r"   r#   r/      s.   zIndirectObject.clonec                 C   r@   rD   r"   r    r"   r"   r#   r     rA   z!IndirectObject.indirect_referencer   c                 C   s    | j | }|d u rd S | S rD   )r2   r:   )r!   r>   r"   r"   r#   r:     s   zIndirectObject.get_objectc                 C   s"   d| j d| jdt| j dS )NzIndirectObject(z, ))r9   rj   r7   r2   r    r"   r"   r#   r\   !  s   "zIndirectObject.__repr__otherc                 C   s6   |d uot |to| j|jko| j|jko| j|ju S rD   )rc   r   r9   rj   r2   r!   ro   r"   r"   r#   rd   $  s   


zIndirectObject.__eq__c                 C   s   |  | S rD   )rd   rp   r"   r"   r#   __ne__-  r%   zIndirectObject.__ne__rB   rC   c                 C   s4   |d ur	t dd || j d| j d  d S )NrT   rU    z R)r   rW   r9   rj   r   rE   r"   r"   r#   rF   0  s
   "zIndirectObject.write_to_streamc                 C   s   d}	 |  d}|stt| rn||7 }qd}	 |  d}|s&tt| r.|s-qn||7 }qt| }|dkrFtdt|   tt	|t	||S )N    Tr0      Rz0Error reading indirect object reference at byte )
rY   r   r   isspacer   r   hextellr   rQ   )rB   r2   r9   tokrj   rr"   r"   r#   r[   9  s4   

	zIndirectObject.read_from_streamrH   )r   r   rD   )r'   rI   rJ   rQ   r   ra   r   rO   r   r	   r
   rP   r/   propertyr   r:   r\   ri   rd   rq   r   rN   rF   r]   r[   r"   r"   r"   r#   r      s:    
$	
	r      c                   @   s   e Zd Z	ddeeef dee dd fddZ			dd
ededee	eee
f   dd fddZdefddZdefddZdefddZ	ddededeef ddfddZdS )FloatObject0.0Nr_   contextr   c              
   C   sb   zt t|}t | |W S  ty0 } zt| d| dt t | dW  Y d }~S d }~ww )Nz : FloatObject (z) invalid; use 0.0 insteadg        )floatr   __new__r3   r   r'   )clsr_   r~   er"   r"   r#   r   Y  s   zFloatObject.__new__Fr"   r*   r+   r,   c                 C      t d| t| ||S )rS   r|   )r   r?   r|   r.   r"   r"   r#   r/   g     zFloatObject.clonec                 C   sF   | dkrdS t ttt|  }| dtd| ddd}|S )Nr   r}   .r0   f0)FLOAT_WRITE_PRECISIONrQ   r   absmaxrstrip)r!   nbsr"   r"   r#   myreprs  s
   "zFloatObject.myreprc                 C      |   S rD   )r   r    r"   r"   r#   r\   z     zFloatObject.__repr__c                 C   s   t | S rD   )r   r    r"   r"   r#   
as_numeric}  r   zFloatObject.as_numericrB   rC   c                 C   s*   |d ur	t dd ||  d d S NrT   rU   utf8)r   rW   r   r   rE   r"   r"   r#   rF     
   zFloatObject.write_to_stream)r}   NrH   rD   )r'   rI   rJ   r
   rP   r   r   r   rO   r	   rQ   r/   r   r\   r   r   r   rN   rF   r"   r"   r"   r#   r|   X  s>    


r|   c                   @   s   e Zd ZedZdedd fddZ		dded	ed
e	e
eeef   dd fddZdefddZ	ddededeef ddfddZededed fddZdS )NumberObjects	   [^+-.0-9]r_   r   c                 C   sD   z	t | t |W S  ty!   td| dt t | d Y S w )NzNumberObject(z) invalid; use 0 insteadr   )rQ   r   
ValueErrorr   r'   )r   r_   r"   r"   r#   r     s   zNumberObject.__new__Fr"   r*   r+   r,   c                 C   r   )rS   r   )r   r?   r   r.   r"   r"   r#   r/     r   zNumberObject.clonec                 C   s   t t| dS )Nr   )rQ   reprr   r    r"   r"   r#   r     s   zNumberObject.as_numericNrB   rC   c                 C   s*   |d ur	t dd |t| d d S r   )r   rW   r   r   rE   r"   r"   r#   rF     r   zNumberObject.write_to_stream)r   r|   c                 C   s*   t | tj}|ddkrt|S t|S )N   .)r   r   NumberPatternfindr|   )rB   numr"   r"   r#   r[     s   zNumberObject.read_from_streamrH   rD   )r'   rI   rJ   recompiler   r   r   rO   r   r	   r
   rP   rQ   r/   r   r   rN   rF   r]   r[   r"   r"   r"   r#   r     s2    



	r   c                   @   sv   e Zd ZdZ		ddededeeee	e
f   dd fdd	Zedefd
dZ	ddedede	ef ddfddZdS )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.
    Fr"   r*   r+   r,   r   c                 C   s   t d| tt| ||S )rS   r   )r   r?   r   rN   r.   r"   r"   r#   r/     s   zByteStringObject.clonec                 C   r@   )z7For compatibility with TextStringObject.original_bytes.r"   r    r"   r"   r#   original_bytes  rG   zByteStringObject.original_bytesNrB   rC   c                 C   s:   |d ur	t dd |d |t|  |d d S )NrT   rU      <   >)r   rW   binasciihexlifyrE   r"   r"   r#   rF     s   
z ByteStringObject.write_to_streamrH   rD   )r'   rI   rJ   __doc__r   rO   r   r	   r
   rP   rQ   r/   rz   rN   r   r   rF   r"   r"   r"   r#   r     s.    
r   c                   @   s   e Zd ZdZ		ddededeeee	e
f   dd fdd	ZdZdZedefd
dZdefddZdefddZ	ddedede	ef ddfddZdS )TextStringObjectz
    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*   r+   r,   r   c                 C   s,   t | }| j|_| j|_td| |||S )rS   r   )r   autodetect_pdfdocencodingautodetect_utf16r   r?   )r!   r*   r+   r,   r>   r"   r"   r#   r/     s   zTextStringObject.clonec                 C   r   )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    r"   r"   r#   r     s   zTextStringObject.original_bytesc                 C   s,   | j rtj| d S | jrt| S td)Nutf-16bez#no information about original bytes)r   codecsBOM_UTF16_BEr   r   encode_pdfdocencodingr3   r    r"   r"   r#   r      s
   z#TextStringObject.get_original_bytesc                 C   s4   zt | }W |S  ty   tj| d }Y |S w )Nr   )r   UnicodeEncodeErrorr   r   r   )r!   bytearrr"   r"   r#   get_encoded_bytes  s   
z"TextStringObject.get_encoded_bytesNrB   rC   c                 C   sv   |d ur	t dd |  }|d |D ]}t| s*|dkr*|d|   q|tt| q|d d S )NrT   rU      (    z\%03o   ))r   r   rW   chrisalnumr   r   )r!   rB   rC   r   cr"   r"   r#   rF     s   
z TextStringObject.write_to_streamrH   rD   )r'   rI   rJ   r   r   rO   r   r	   r
   rP   rQ   r/   r   r   rz   rN   r   r   r   r   rF   r"   r"   r"   r#   r     s6    
	r   c                   @   s   e Zd ZU edZdZddddddd	d
 edD Ze	e
eef  ed< 		d"dededeeeeef   dd fddZ	d#dededeef ddfddZdefddZededefddZedededd fd d!ZdS )$
NameObjects   \s+|[\(\)<>\[\]{}/%]   /s   #23s   #28s   #29s   #2Fs   #25)#(rn   /%c                 C   s"   i | ]}t |d |d qS )r   02X)r   r   ).0r=   r"   r"   r#   
<dictcomp>5  s   " zNameObject.<dictcomp>!   renumber_tableFr"   r*   r+   r,   r   c                 C   r   )rS   r   )r   r?   r   r.   r"   r"   r#   r/   8  r   zNameObject.cloneNrB   rC   c                 C   s$   |d ur	t dd ||   d S )NrT   rU   )r   rW   renumberrE   r"   r"   r#   rF   D  s
   zNameObject.write_to_streamc              	   C   s   | d  d}|dkrtd|  dt | dd  D ]2}|dkr3| dD ]}|d|d	  7 }q%qz	|| j| 7 }W q tyL   || d7 }Y qw |S )
Nr   utf-8r   z$Incorrect first char in NameObject:(rn   r0   ~r   r   )r   r   r'   r   KeyError)r!   outr   xr"   r"   r#   r   M  s   zNameObject.renumbersinc                 C   s   |  dd}|dkr@z$| d | t| |d |d   | |d d   } |  d|d }W n ty;   |d }Y nw |dks
| S )N   #r   r0      )r   r   r   )r   r=   r"   r"   r#   unnumber\  s   4zNameObject.unnumberr2   c              
   C   s   |  d}|tjkrtd|t| tj7 }z(t|}dD ]}z||}t|W   W S  ty6   Y qw t	d|ddd t
t	fyn } z"|jsatd|dt t|d	W  Y d }~S td|d|d }~ww )
Nr0   zname read error)r   gbk r   zCode Not Foundz"Illegal character in Name Object (rn   charmap)rY   r   surfixr   r   delimiter_patternr   decoder3   UnicodeDecodeErrorr   strictr   r'   )rB   r2   nameencretr   r"   r"   r#   r[   i  s2   




zNameObject.read_from_streamrH   rD   )r'   rI   rJ   r   r   r   r   ranger   r   r   rP   rN   rM   r   rO   r   r	   r
   rQ   r/   r   rF   r   r]   r   r[   r"   r"   r"   r#   r   ,  sF   
 


	r   unicode_stringr   c              
   C   sJ   t  }| D ]}z|ttt| 7 }W q ty"   td|dddw |S )Npdfdocencodingr   z#does not exist in translation table)	bytearrayr   r   r   r   r   )r   retvalr   r"   r"   r#   r     s   
r   )2r   r   rK   r   r   mathr   typingr   r   r   r   r   r	   r
   r   _codecsr   
_protocolsr   r   _utilsr   r   r   r   r   r   r   errorsr   r   r   
__author____author_email__r   rR   r^   r   r   r   r|   rQ   r   rN   r   rP   r   r   r   r"   r"   r"   r#   <module>   s0   ($	f 3h2*(PX