o
    h2                     @   sz  d dl Z d dlmZmZ d dlmZmZmZmZm	Z	m
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 ddlmZmZmZmZ ddlmZ er\d dlZ dd	l!m"Z" G d
d dZ#e#j$d Z%e#j&d Z'dZ(dZ)e
e	e*e*e*f e	e*e*e*e*f e+f Z,e
e	edf ee ef Z-	dde
eef dee j. de*de
e*e/f dee+ de0dej1j1fddZ2G dd dZ3dS )    N)BufferedReaderBytesIO)TYPE_CHECKINGAnyListOptionalTupleUnion   )utils)T_bboxT_numT_obj
T_obj_listT_pointT_seq)T_table_settingsTableTableFinderTableSettings)MalformedPDFException)Pagec                   @   s   e Zd ZdZdZdZdZdS )COLORS)   r   r   )r   r   r   )r   r   r   )r   r   r   r   N)__name__
__module____qualname__REDZGREENBLUETRANSPARENT r    r    E/var/www/html/venv/lib/python3.10/site-packages/pdfplumber/display.pyr      s
    r   )2      H   .Fstreampathpage_ix
resolutionpassword	antialiasreturnc              
   C   s   |r|}n|  d | }z	tj||d}W n tjjjy( } zt|d }~ww ||}	|	j|d | | | dd	 }
|
  |
dS )Nr   )r*   r%   T)scaleZno_smoothtextZno_smoothpathZno_smoothimageZprefer_bgrxRGB)seek	pypdfium2ZPdfDocumentZ_helpersmiscZPdfiumErrorr   Zget_pagerenderZto_pilcloseconvert)r&   r'   r(   r)   r*   r+   srcZ
pdfium_doceZpdfium_pageZimgr    r    r!   get_page_image$   s,   


r7   c                   @   s6  e Zd Zdeddfdddeejj deee	f de
de
f
d	d
Zdedeeeeef fddZdedeeef fddZdZddZ				d[deeejef dede
dedededdfddZdZd d!Zeefd"ed#ed$edd fd%d&Zeefd'eee d(f d#ed$edd fd)d*Zeefd+e d#ed$edd fd,d-Z!eefd.ee"e  d/f d#ed$edd fd0d1Z#eefd+e d#ed$edd fd2d3Z$eefd.ee"e  d/f d#ed$edd fd4d5Z%e&eefd6eee'f d7ed#ed$edd f
d8d9Z(e&eefd:ee"e e)d(f d7ed#ed$edd f
d;d<Z*d=e&efd>eee'f d?ed7ed#edd f
d@dAZ+d=e&efdBee"e e)d(f d?ed7ed#edd f
dCdDZ,e&edEfdFe-d7ed#ed$edd f
dGdHZ.	d\dIeee/e0e1f  dd fdJdKZ2ee&ee3j4e3j5fd#ed7ed$edLe dMe dd fdNdOZ6dPdQdRdRedSfefd#ed7ed$edd fdTdUZ7de8fdVdWZ9d]dXdYZ:dS )^	PageImageNFpager   originalr)   r+   force_mediaboxc                 C   s  || _ |jr|n|j| _|| _|d u r(t|jj|jj|j	d |||jj
d| _n|| _| jjd |jd |jd   | _|j|jkrE|jn|rJ|jn|j| _|j|jkr| |j}| | j}| j|d |d  |d |d  |d |d  |d |d  f| _|   d S )Nr
   )r&   r'   r(   r)   r+   r*   r         )r9   Zis_originalZ	root_pagerootr)   r7   Zpdfr&   r'   Zpage_numberr*   r:   sizeZcropboxr-   bboxZmediabox_reproject_bboxcropreset)selfr9   r:   r)   r+   r;   Z	crop_dimsZ	bbox_dimsr    r    r!   __init__P   s:   
	"
	zPageImage.__init__r@   r,   c           
      C   s<   |\}}}}|  ||f\}}|  ||f\}}	||||	fS N)
_reproject)
rD   r@   x0topx1bottom_x0_topZ_x1_bottomr    r    r!   rA      s   zPageImage._reproject_bboxcoordc                 C   s@   |\}}|| j d  | j }|| j d  | j }t|t|fS )z
        Given an (x0, top) tuple from the *root* coordinate system,
        return an (x0, top) tuple in the *image* coordinate system.
        r   r
   )r@   r-   int)rD   rO   rH   rI   rL   rM   r    r    r!   rG      s   zPageImage._reprojectc                 C   s8   t jd| jj| _| j| j t j| jd| _	| S )Nr.   ZRGBA)
PILImagenewr:   r?   	annotatedZpasteZ	ImageDrawZDrawdrawrD   r    r    r!   rC      s   zPageImage.resetPNGT      destformatquantizecolorsbitskwargsc                 K   sL   |r| j j|tjjdd}n| j }|j|f||| j| jfd| d S )N)methodP)r[   r^   Zdpi)rT   r\   rQ   rR   Z
FASTOCTREEr4   saver)   )rD   rZ   r[   r\   r]   r^   r_   outr    r    r!   rb      s   	

zPageImage.savec                 C   s   |  | j| jS rF   )	__class__r9   r:   rV   r    r    r!   copy   s   zPageImage.copypoints_or_objstrokestroke_widthc                 C   s   t |ttfr
|}n%t |trd|v rdd |d D }n|}|d |d f|d |d ff}| jjtt| j|||d | S )	NZptsc                 S   s   g | ]\}}||fqS r    r    ).0xyr    r    r!   
<listcomp>   s    z'PageImage.draw_line.<locals>.<listcomp>rH   rI   rJ   rK   fillwidth)
isinstancetuplelistdictrU   linemaprG   )rD   rf   rg   rh   pointsobjr    r    r!   	draw_line   s    zPageImage.draw_linelist_of_lineszpd.DataFramec                 C   s$   t |D ]
}| j|||d q| S Nrg   rh   )r   to_listrx   )rD   ry   rg   rh   rj   r    r    r!   
draw_lines   s   zPageImage.draw_lineslocationc                 C   s4   || j d || j d f}| jj| |||d | S )Nr
   r=   rm   r@   rU   rt   rA   rD   r~   rg   rh   rv   r    r    r!   
draw_vline      zPageImage.draw_vline	locationszpd.Series[float]c                 C   "   t |D ]
}| j|||d q| S rz   )rr   r   rD   r   rg   rh   rj   r    r    r!   draw_vlines      zPageImage.draw_vlinesc                 C   s4   | j d || j d |f}| jj| |||d | S )Nr   r<   rm   r   r   r    r    r!   
draw_hline   r   zPageImage.draw_hlinec                 C   r   rz   )rr   r   r   r    r    r!   draw_hlines   r   zPageImage.draw_hlinesbbox_or_objrn   c                 C   s  t |ttfr
|}n|}|d |d |d |d f}|\}}}	}
|d }t|| ||	 d }t|| ||
 d }t|	| ||	 d }	t|
| ||
 d }
| |||	|
f}| j||tj	 |dkr||f|	|ff||
f|	|
ff||f||
ff|	|f|	|
ffg}| j
|||d | S )NrH   rI   rJ   rK   r<   r   r{   )rp   rq   rr   minmaxrA   rU   Z	rectangler   r   r}   )rD   r   rn   rg   rh   r@   rw   rH   rI   rJ   rK   ZhalfZ	fill_bboxsegmentsr    r    r!   	draw_rect   s(   zPageImage.draw_rectlist_of_rectsc                 C   &   t |D ]}| j||||d q| S )Nrn   rg   rh   )r   r|   r   )rD   r   rn   rg   rh   rj   r    r    r!   
draw_rects     zPageImage.draw_rects   center_or_objradiusc           
      C   sz   t |tr|}n|}|d |d  d |d |d  d f}|\}}|| || || || f}	| j| |	|| | S )NrH   rJ   r<   rI   rK   )rp   rq   rU   ZellipserA   )
rD   r   r   rn   rg   centerrw   Zcxcyr@   r    r    r!   draw_circle*  s   
(zPageImage.draw_circlelist_of_circlesc                 C   r   )N)r   rn   rg   )r   r|   r   )rD   r   r   rn   rg   rj   r    r    r!   draw_circles;  r   zPageImage.draw_circlesr
   tablec                 C   s   | j |j|||d | S )z+
        Outline all found tables.
        r   )r   cells)rD   r   rn   rg   rh   r    r    r!   debug_tableF  s   

zPageImage.debug_tabletable_settingsc                 C   s   t |tr|}n|d u st |ttfr| j|}ntd|jD ]}| | q!| j	|j
dd | jt|j tjtjd dd | S )NzGArgument must be instance of TableFinderor a TableFinder settings dict.r
   )rh   r#   r=   )rn   rg   r   )rp   r   r   rs   r9   debug_tablefinder
ValueErrorZtablesr   r}   edgesr   rr   Zintersectionskeysr   r   r   )rD   r   finderr   r    r    r!   r   U  s&   


zPageImage.debug_tablefinderx_tolerancey_tolerancec                 C   s&   | j j||d}| j||||d | S )N)r   r   rg   rn   rh   )r9   Zextract_wordsr   )rD   rg   rn   rh   r   r   wordsr    r    r!   outline_wordst  s
   	zPageImage.outline_words)r   r   r   r   r   r   g     O@c                 C   s   | j | jj|||d | S )Nr   )r   r9   chars)rD   rg   rn   rh   r    r    r!   outline_chars  s   zPageImage.outline_charsc                 C   s   t  }| |d | S )NrW   )r   rb   getvalue)rD   br    r    r!   
_repr_png_  s   zPageImage._repr_png_c                 C   s   | j   d S rF   )rT   showrV   r    r    r!   r     s   zPageImage.show)r,   r8   )rW   TrX   rY   rF   )r,   N);r   r   r   DEFAULT_RESOLUTIONr   rQ   rR   r	   rP   floatboolrE   r   r   rA   r   rG   rC   strpathlibPathr   r   rb   re   DEFAULT_STROKEDEFAULT_STROKE_WIDTHT_contains_pointsT_colorrx   r   r}   r   r   r   r   r   r   DEFAULT_FILLr   r   r   r   r   r   r   r   r   r   r   r   r   ZDEFAULT_X_TOLERANCEZDEFAULT_Y_TOLERANCEr   r   bytesr   r   r    r    r    r!   r8   O   s   


4

	









$





!

r8   )F)4r   ior   r   typingr   r   r   r   r   r	   Z	PIL.ImagerQ   ZPIL.ImageDrawr0    r   Z_typingr   r   r   r   r   r   r   r   r   r   r   Zutils.exceptionsr   Zpandaspdr9   r   r   r   r   r   r   r   r   rP   r   r   r   r   r   r   rR   r7   r8   r    r    r    r!   <module>   sJ      

$	


+