
    hn9                        U d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
mZ ddlmZ ddl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 ej8                  dd dk\  rddlmZ nddlmZ 	 ddlm Z m!Z! ed   Z#ee$d<   dZ%e&e$d<   	 d,dee'e(e   ef   de&de#de&de)e#e*f   f
dZ+de,de)e&e&f   de&de,fdZ-de'de)e&e&f   de,de j@                  fd Z.dede)eeeef   fd!Z/de)e&e&f   de,de#de'd"e&d#e'de)e j@                  e'e'e*f   fd$Z0de)e&e&f   de,de#de'd"e&de)e j@                  e'e'e*f   fd%Z1d&e j@                  d'e2e'ef   d(edee'e(e   ef   d)e*de j@                  fd*Z3d'e2e'ef   d"e&dee'e(e   ef   de)e#e*f   fd+Z4y# e"$ r	  e"d      w xY w)-z9Code in here is only used by pypdf.filters._xobj_to_image    N)BytesIO)AnyLiteralUnioncast   )check_if_whitespace_onlylogger_warning)ColorSpaces)FilterTypes)ImageAttributes)EmptyImageDataErrorPdfReadError)ArrayObjectDecodedStreamObjectEncodedStreamObject
NullObjectTextStringObjectis_null_or_none   )   
   )	TypeAlias)ImageUnidentifiedImageErrorz]pillow is required to do image extraction. It can be installed via 'pip install pypdf[image]')	 1RGB2bits4bitsPLRGBACMYKmode_str_typer   MAX_IMAGE_MODE_NESTING_DEPTHcolor_spacecolor_components	prev_modedepthreturnc                    |t         kD  rt        d      t        |       ryd}t        | t              r| }n]t        | t
              st        d|       | d   j                  d      rd| d   dd	 z   }n | d   d
k(  r9| d   j                         }t        t        |d         }|j                  dd      }n| d   dk(  r1| d   j                         }t        ||||dz         \  }}|dv rd}||fS | d   dk(  r+| d   j                         }t        ||||dz         \  }}|dfS | d   dk(  rk| }t        | d         }| d   j                         }|dk(  r+|dk(  r&|d   d   dk7  rt        d|d   d    dt               yt        ||||dz         \  }}||fS dddddddd }	|	j                  |      xs  t        |	j                               |   xs |}||dk(  fS )!z
    Returns:
        Image mode, not taking into account mask (transparency).
        ColorInversion is required (like for some DeviceCMYK).

    z^Color spaces nested too deeply. If required, consider increasing MAX_IMAGE_MODE_NESTING_DEPTH.)r   Fr   zCannot interpret color spacer   z/Calz/Device   N	/ICCBasedr   z/Nz
/Alternate/Indexed)r   r$   r!   /Separationr   Tz/DeviceN/DeviceCMYKz/BlackzColor z8 converted to Gray. Please share PDF with pypdf dev team)r"   Tr   r"   r   r$   r   r    )1bitz/DeviceGraypalettez
/DeviceRGBr1   2bit4bit)r&   r   r   
isinstancestrlist
startswith
get_objectr   intget_get_imagemodelenr
   __name__values)
r'   r(   r)   r*   color_space_stricc_profilemodeinvert_colororiginal_color_spacemode_maps
             X/var/www/html/aiagenthome/venv/lib/python3.12/site-packages/pypdf/_xobj_image_helpers.pyr=   r=   *   sk    ++l
 	
 {#O+s#%T**K
 	
 
Q	"	"6	*#k!nQR&88	Q;	&!!n//1[%67%//,;	Q:	%%a.335+-y%!)
l ?"D\!!	Q=	(%a.335+-y%!)
l Tz	Q:	%*{1~.%a.335m+0@A0E#A&q)X51!4Q788pq +-y%!)
l \!! *H 	_% 	!"#34	 	     datasizebitsc                 &   d|z  dz
  }t        |d   |d   z        }d}d|z
  }t        |d         D ]S  }|d|z
  k7  r
|dz  }d|z
  }t        |d         D ].  }| |   |z	  |z  ||||d   z  z   <   ||z  }|dk  s%|dz  }d|z
  }0 U t        |      S )Nr   r      )	bytearrayrangebytes)	rI   rJ   rK   maskbyte_buffer
data_indexbityxs	            rG   	bits2byterW   z   s    I?DDGd1g-.KJ
d(C47^!d(?!OJd(CtAwA,0,<,Ct+KKAQK(4KCQwa
$h  	  rH   rC   c                 L   	 t        j                  | ||      }|S # t        $ r~}|d   |d   z  }t        |      }|dk(  rt	        d      |||z  dk7  r||t        |       z  |z  dj                  fd|D              }t        j                  | ||      }Y d }~|S d }~ww xY w)Nr   r   z9Data is 0 bytes, cannot process an image from empty data.rH   c              3   N   K   | ]  }t        |ft              z          y wN)rP   r;   ).0rV   ks     rG   	<genexpr>z,_extended_image_frombytes.<locals>.<genexpr>   s!     ;dqdSVm,ds   "%)r   	frombytes
ValueErrorr>   r   join)rC   rJ   rI   imgexcnb_pixdata_lengthr\   s          @rG   _extended_image_frombytesre      s    0oodD$/ J  0a47"$i!%K 1$ISY,xx;d;;oodD$/J0s    	B#A3BB#c                 b   t        |       }|dk(  rd | D        \  } }}}| |||fS | d   }t        |t              r|n|j                         }|dk(  rOd|v rK| d   j                         | d   j                         }} |j	                  d      \  }}t        |      }| |||fS t        d| d	|        )
Nr-   c              3   <   K   | ]  }|j                           y wrZ   )r:   )r[   values     rG   r]   z*__handle_flate__indexed.<locals>.<genexpr>   s     +XK5E,<,<,>Ks   r   r    r   r   z(Expected color space with 4 values, got z: )r>   r6   r7   r:   splitr;   r   )r'   countbasehivallookupelement1s         rG   __handle_flate__indexedrp      s    Ez+XK+X(T5&D%// 1~H%h4x(:M:M:OHzf()!n779;q>;T;T;VVnnV,eE
D%//
A%;-X
YYrH   colorsobj_as_textc           
      \   d}d}t        |t              r|d   dk(  rt        |      \  }}}	|dk(  rd}t        || d      }n|dk(  rd}t        || d	      }t	        || |      |dk(  rt        t
        t        f      rj                         t        t              rj                  t        t              rj                         	 d
dd
dddt        dd      d      \  }
}}j                  dk(  rd|
z  }t              }||k7  r\||k  r-t        d| d| dt                t#        dg||z
  z        z  n%t%        |d       st        d| d| dt                d| d|
 |
d gdj'                  fdt)        j*                  d         D              }t-        j.                  |j*                  |      n@j1                  |      t              	dz   |
z  k7  rt        d| t                dn|dk(  r.dj'                  D cg c]  }t#        |||g       c}      d}n|dk(  rg }fdt)        dd	t              d	z  z  d	      D        D ]{  \  }}}}t3        dd|dz  z
  z  d|dz  z
  z        }t3        dd|dz  z
  z  d|dz  z
  z        }t3        dd|dz  z
  z  d|dz  z
  z        }|j5                  t#        |||f             } dj'                  |      d}j7                  |       j1                  |t8        j:                  k(  rdnd      nDt        |t>              s4|d   d"k(  r,t        |||      d   }||k7  rt-        j.                  || |      |dk(  rd#}d$}||d%fS c c}w # t<        $ r t        d  d!t                dY 5w xY w)&zh
    Process image encoded in flateEncode
    Returns img, image_format, extension, color inversion
    z.pngPNGr   r/   r   r!   r   r    r-   )r   r   r   )r   r!   r"   )r   r!   r   )r-   r!   r$   )r   r"   r!   r   r$   r   r   z#Not enough lookup values: Expected z, got .Nz!Too many lookup values: Expected rH   c              3      K   | ]6  d j                  fdt        j                  d         D               8 yw)rH   c              3   X   K   | ]!  }j                  |f      d kD  rdnd    # yw)   r   r   N)getpixel)r[   rV   
colors_arrra   rU   s     rG   r]   z*_handle_flate.<locals>.<genexpr>.<genexpr>   s4      !3A #aV(<s(B1J!3s   '*r   N)r`   rO   rJ   )r[   rU   rz   ra   s    @rG   r]   z _handle_flate.<locals>.<genexpr>   s@      
 0	 HH !&sxx{!3  0s   <A r   zInvalid Lookup Table in r"   r   r$   c              3   .   K   | ]  }||d z      yw)r-   N )r[   nrn   s     rG   r]   z _handle_flate.<locals>.<genexpr>	  s!      +3Vaq1q5)3Vs      )rawmodezBase z8 not coded please share the pdf file with pypdf dev teamr.   z.tifTIFFF) r6   r   rp   rW   re   r   r   get_datar   original_bytesr7   encoder=   rC   r>   r
   r?   rP   r	   r`   rO   rJ   r   r^   convertr;   append
putpaletter   DEVICE_GRAYKeyErrorr   )rJ   rI   rC   r'   rq   rr   	extensionimage_formatrl   rm   nbconvexpected_countactual_countarrb_rgb_c_m_y_k_r_g_bmode2rz   ra   rn   s                            @@@rG   _handle_flater      s!    IL +{+A*0L+B;+O(T5&wtQ'	tQ'
#D$
5Cj f24GHI__&Ff./**Ffc"]]_FA	Q " &( T1b)!,.NBd xx3!"R"6{>1#n4&A.AQQWXdWeefg$ %~/L(M"NN5f^_6MN&??OvVbUccde$ $O^4F$Sbk6"#;7
hh 
 #388A;/  oodCHHc:kk$'v;519"22"%=k]#KXV!FS[ XX&HAuaAY'7&HIF D V^D+38AVPQAQ<RTU3V+BB !BH!5R#X!FG BH!5R#X!FG BH!5R#X!FGE2r2,$78+ !XXd^F D%NN64N8++T[-D-D%Dc%PCZ0[^{5R {FD9!<5=//%t4Cv~	i..7 'IQ  	vUV F	s   N	 N	N+*N+c                    d}t        j                  t        |      d      }t        |||      \  }}|dk(  rt	        t
        |j                        }|dv }|j                  dk(  r|dk(  rd}|j                  |k(  s|j                  |hdd	hk(  r|}nT|j                  |hdd
hk(  r0t        j                  ||j                  |j                               }n|j                  |      }|j                  d
k(  r|j                  d      }d}	||	||fS )zb
    Process image encoded in flateEncode
    Returns img, image_format, extension, inversion
    z.jp2)JPEG2000)formatsr   )r$   r#   r   r"   r!   r$   r   )r   openr   r=   r   r%   rC   r^   rJ   tobytesr   )
rJ   rI   rC   r'   rq   r   img1rD   ra   r   s
             rG   _handle_jpxr   !  s     I::gdm];D'VTBD,rzM499-y(yyFtu}yyDTYY-#s;
))T	vv.	. oodDIIt||~>ll4  xx6kk% Li55rH   ra   x_object_objlfiltersrD   c                   	 |j                  t        j                  | j                  dk(  r"|t        j
                  t        j                  fv s|r-| j                  dk(  rddgt        | j                               z  nd       t        |t              r|d   j                         dk(  rd t        |t              r4|d   j                         dk(  rddgt        | j                               z  t        fdt        t                    D              s_g }t        dt              d	      D ]3  }|   	|d
z      |j                  	fdt        d      D               5 | j                  |      } | S )Nr$   r"   g      ?g        r   r/   r0   c              3   4   K   | ]  }|   |d z  k(    yw)r   Nr|   )r[   idecodes     rG   r]   z _apply_decode.<locals>.<genexpr>c  s!     %UBTQfQi1q5&8BTs   r   r   c              3   R   K   | ]  }t        d |d z  z
  z  z   z           yw)g     o@N)round)r[   jdmaxdmins     rG   r]   z _apply_decode.<locals>.<genexpr>h  s1      KUaeq5yD4K84?@A:s   $'   )r<   IADECODErC   FT
DCT_DECODE
JPX_DECODEr>   getbandsr6   r   r:   allrO   extendpoint)
ra   r   r   r'   rD   lutr   r   r   r   s
          @@@rG   _apply_decoder   G  sG    
		 XXH0N$NS sc#,,.)	)
 F 	;,N%%':5;,N%%'=8sc#,,.11#%U%FBT%U"Uq#f+q)A!9D!a%=DJJ KPQT:  * iinJrH   c                 >   t         j                  | v r&| t         j                     t        j                  k(  rd}| j	                  dd      dk  r't        | j	                  dd       ddd      \  }}||fS t        ||dk(  rt        |      sd|vrd	n|d      \  }}||fS )
Nr   z/BitsPerComponentrM   rT   r   r   r   Grayr   )r   COLOR_SPACEr   
DEVICE_RGBr<   r=   r   )r   rq   r'   rC   rD   s        rG   _get_mode_and_invert_colorr   o  s     	,&(K,B,BB $+Q/!3+ 3Q78<a
l"  , !'4k1  
l rH   )r   )5__doc__sysior   typingr   r   r   r   _utilsr	   r
   	constantsr   r   r   r   r   errorsr   r   genericr   r   r   r   r   r   version_infor   typing_extensionsPILr   r   ImportErrorr%   __annotations__r&   r;   r7   r8   tupleboolr=   rP   rW   re   rp   r   r   dictr   r   r|   rH   rG   <module>r      s   ? 
  , , < " ( , 5  BQ7" +1 #>y  %' c & 	M sDIs*+M M  M  	M 
 =$M `E sCx   $
38_,1
[[(Z ZsCc?Q9R Z$l/
S/l/
l/ l/ 	l/
 l/ l/ 5;;S$&'l/^#6
S/#6
#6 #6 	#6
 #6 5;;S$&'#6L%	%sCx.% % sDIs*+	%
 % [[%PsCx.*-<A#tCyRUBU<V
=$e
  
	= s   ,E> >F