o
    ¬+ Z,I  ã                   @   sÚ  d Z dZddl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 dd	lmZ dd
l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mZ ededed�ZG dd„ deƒZd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"G dd „ d e!ƒZ#zdd!l$m%Z%m&Z&m'Z'm(Z( d"Z)W n e*y¯   dZ)Y nw e)rÚG d#d$„ d$ƒZ+G d%d&„ d&e!e+ƒZ,G d'd(„ d(e,ƒZ-G d)d*„ d*e!ƒZ.G d+d,„ d,e.ƒZ/d-d.„ Z0d/d0„ Z1e2d1krëe1ƒ  dS dS )2z@This includes some demos of platypus for use in the API proposalz3.3.0é    N)Úcolors)ÚCanvas)ÚParagraphStyle)ÚrecursiveImportÚstrTypes)ÚFrame)ÚFlowable)Ú	Paragraph)Úinch)ÚTA_LEFTÚTA_RIGHTÚ	TA_CENTER)ÚisColor)ÚtoColor)Ú_baseFontNameÚ_baseFontNameIÚCaptioné
   )ÚfontNameÚfontSizeÚ	alignmentc                   @   st   e Zd Zdeddedƒddddddddfdd	„Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚFigureÚ é   NÚblackÚcentreÚbottomÚCENTERc                 C   s„   t  | ¡ || _|| _|| _|| _|| _|| _|| _|pd| | _	|| _
|| _d | _d| _|| _|	| _|
| _|| _|| _|  ¡  d S )Nç      à?r   )r   Ú__init__ÚwidthÚfigureHeightÚcaptionÚcaptionFontÚcaptionSizeÚcaptionTextColorÚcaptionBackColorÚ
captionGapÚcaptionAlignÚcaptionPositionÚ_captionDataÚcaptionHeightÚ
backgroundÚborderÚspaceBeforeÚ
spaceAfterÚhAlignÚ_getCaptionPara)Úselfr    Úheightr"   r#   r$   r,   r%   r&   r-   r.   r/   r'   r(   r)   r0   © r4   úL/var/www/html/env/lib/python3.10/site-packages/reportlab/platypus/figures.pyr      s&   
zFigure.__init__c              
   C   sÔ   | j }| j}| j}| j}| j}| j}| j}| j|||||||fkrh|||||||f| _t|t	ƒr5|| _
d S t|tƒr`td||d| ||| j|dkrKtn|dkrQtntd�| _t	| j | jƒ| _
d S tdt|ƒ ƒ‚d S )Nr   g333333ó?ÚleftÚright)r   r   ÚleadingÚ	textColorÚ	backColorr.   r   z6Figure caption of type %r is not a string or Paragraph)r"   r#   r$   r%   r&   r(   r)   r*   Ú
isinstancer	   ÚcaptionParar   r   r'   r   r   r   ÚcaptionStyleÚ
ValueErrorÚtype)r2   r"   r#   r$   r%   r&   r(   r)   r4   r4   r5   r1   :   s2   


÷ízFigure._getCaptionParac                 C   s¬   | j r*|  ¡  | j | j|| j ¡\}}|| j | _| j| j | _|| jkr)|| _n| j| _| j	ddt
fv r?d|| j  | _n| j	dtfv rM|| j | _nd| _| j| jfS )Nr   ÚCENTREr   ÚRIGHTr   )r"   r1   r<   Úwrapr    r!   r'   r+   r3   r0   r   Údxr   )r2   Ú
availWidthÚavailHeightÚwÚhr4   r4   r5   rB   W   s   €zFigure.wrapc                 C   sº   | j  | jd¡ | jr| jdkr| j  d| j¡ | jr|  ¡  | jr&|  	¡  | j  
¡  |  ¡  | j  ¡  | jr[| jdkrF| j  d| j ¡ n| j  d| j| j ¡ |  ¡  |  ¡  d S d S )Nr   r   )ÚcanvÚ	translaterC   r"   r)   r+   r,   ÚdrawBackgroundr-   Ú
drawBorderÚ	saveStateÚ
drawFigureÚrestoreStater!   r'   r1   ÚdrawCaption©r2   r4   r4   r5   Údrawi   s"   


úzFigure.drawc                 C   s    | j }| j}t|dd ƒ}t|dd ƒ}t|dd ƒ}|p|p|}|r9| ¡  |r+| |¡ |r2| |¡ |r9| |¡ |jdd| j| j	ddd� |rN| 
¡  d S d S )NÚcolorr    Ú	dashArrayr   é   )ÚfillÚstroke)rH   r-   ÚgetattrrL   ÚsetStrokeColorÚsetLineWidthÚsetDashÚrectr    r!   rN   )r2   rH   r-   ÚbcÚbwÚbdÚssr4   r4   r5   rK   |   s   ÿzFigure.drawBorderc                 C   s@   | j  ¡  | j  | j¡ | j jdd| j| jdd� | j  ¡  d S )Nr   rT   )rU   )rH   rL   ÚsetFillColorr,   r[   r    r!   rN   )r2   rR   r4   r4   r5   Ú_doBackgroundŒ   s   
zFigure._doBackgroundc                 C   sB   t | jƒr|  | j¡ dS zt| jƒ}|  |¡ W dS    Y dS )z“For use when using a figure on a differently coloured background.
        Allows you to specify a colour to be used as a background for the figure.N)r   r,   ra   r   )r2   Úcr4   r4   r5   rJ   ’   s   

zFigure.drawBackgroundc                 C   s   | j  | jdd¡ d S ©Nr   )r<   ÚdrawOnrH   rP   r4   r4   r5   rO   ž   s   zFigure.drawCaptionc                 C   ó   d S ©Nr4   rP   r4   r4   r5   rM   ¡   ó   zFigure.drawFigure)Ú__name__Ú
__module__Ú__qualname__r   r   r   r1   rB   rQ   rK   ra   rJ   rO   rM   r4   r4   r4   r5   r      s,    
õ!r   c                 C   sŠ   |   ¡ }d| }|  ddd¡ | j|| || ||ddd� |  ddd¡ |  d¡ | j||||ddd� |  ddd¡ |  ddd¡ d S )Ngš™™™™™©?r   r   rT   )rV   rU   gÍÌÌÌÌÌì?)Ú	beginPathÚsetFillColorRGBr[   rY   ÚsetStrokeColorRGB)ÚcanvasÚxÚyr    r3   ÚpthÚcornerr4   r4   r5   ÚdrawPage¤   s   
rs   c                   @   s*   e Zd ZdZd	dd„Zdd„ Zdd„ ZdS )
Ú
PageFigurezcShows a blank page in a frame, and draws on that.  Used in
    illustrations of how PLATYPUS works.Nc                 C   s,   t  | dt dt ¡ d| _t| _|| _d S )Né   zFigure 1 - a blank page)r   r   r
   r"   r=   r,   )r2   r,   r4   r4   r5   r   ¹   s   
zPageFigure.__init__c                 C   re   rf   r4   rP   r4   r4   r5   ÚdrawVirtualPage¿   rg   zPageFigure.drawVirtualPagec                 C   sR   t | jdt dt dt dt ƒ | j dt dt ¡ | j dd¡ |  ¡  d S )Ng      ä?g      Ð?g      ü?g      @gå”múË?g	çQê²_Ë?)rs   rH   r
   rI   Úscalerv   rP   r4   r4   r5   rM   Â   s   "zPageFigure.drawFigurerf   )rh   ri   rj   Ú__doc__r   rv   rM   r4   r4   r4   r5   rt   ¶   s
    
rt   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚPlatPropFigure1z$This shows a page with a frame on itc                 C   s   t  | ¡ d| _d S )Nz%Figure 1 - a page with a simple frame)rt   r   r"   rP   r4   r4   r5   r   Ê   s   

zPlatPropFigure1.__init__c                 C   s   t | jƒ d S rf   )Údemo1rH   rP   r4   r4   r5   rv   Í   s   zPlatPropFigure1.drawVirtualPageN)rh   ri   rj   rx   r   rv   r4   r4   r4   r5   ry   È   s    ry   c                   @   sP   e Zd ZdZdddejddddddd	dd
dfdd„Zdd„ Zdd„ Zdd„ Z	dS )Ú
FlexFigurezHBase for a figure class with a caption. Can grow or shrink in proportionNzHelvetica-Obliqueé   rT   r   é	   r   Útopr   c                 C   sJ   t j| |||||d ||
||||||d� || _|	| _|| _d | _|| _d S )N)r#   r$   r,   r%   r.   r/   r'   r(   r)   r0   r-   )r   r   ÚshrinkToFitÚ	growToFitÚscaleFactorÚ_scaleFactorr,   )r2   r    r3   r"   r,   r#   r$   r%   r   r€   r.   r/   r'   r(   r)   r�   r0   r-   r4   r4   r5   r   Ò   s$   õ
zFlexFigure.__init__c                 C   sÞ   | j du s| j|ks| j|krit | ||¡\}}|| j }| jdu r1t|| j || | j ƒ| _ n| j| _ | j dk rO| jrO| j| j  d | _| j| j  | _dS | j dkrk| j	rm| j| j  d | _| j| j  | _dS dS dS dS )z4Rescale to fit according to the rules, but only onceNrT   g-Cëâ6?)
r‚   r    r3   r   rB   r!   r�   Úminr   r€   )r2   rD   rE   rF   rG   r+   r4   r4   r5   Ú_scaleó   s   

ózFlexFigure._scalec                 C   ó   |   ||¡ t | ||¡S rf   )r„   r   rB   ©r2   rD   rE   r4   r4   r5   rB     ó   zFlexFigure.wrapc                 C   r…   rf   )r„   r   Úsplitr†   r4   r4   r5   rˆ     r‡   zFlexFigure.split)
rh   ri   rj   rx   r   r   r   r„   rB   rˆ   r4   r4   r4   r5   r{   Ð   s&    
ô!r{   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	ÚImageFigurezImage with a caption below itNr   c           
   
   C   sX   t j |¡sJ d| ƒ‚ddlm} ||ƒ ¡ \}}	|| _tj| ||	|||||d� d S )Nzimage file %s not foundr   )ÚImageReader)r�   r0   r-   )	ÚosÚpathÚisfileÚreportlab.lib.utilsrŠ   ÚgetSizeÚfilenamer{   r   )
r2   r�   r"   r,   r�   r0   r-   rŠ   rF   rG   r4   r4   r5   r     s
   zImageFigure.__init__c                 C   s   | j  | jdd| j| j¡ d S rc   )rH   Ú	drawImager�   r    r!   rP   r4   r4   r5   rM     s   
ÿzImageFigure.drawFigure)NNr   N©rh   ri   rj   rx   r   rM   r4   r4   r4   r5   r‰     s    
r‰   c                   @   ó"   e Zd ZdZddd„Zdd„ ZdS )ÚDrawingFigurez8Drawing with a caption below it.  Clunky, scaling fails.Nc                 C   s@   t ||ƒ}t||ƒ}|ƒ | _t | | jj| jj||¡ d| _d S )NrT   )r   rW   Údrawingr{   r   r    r3   r€   )r2   Ú
modulenameÚ	classnamer"   ÚbaseDirr,   ÚmoduleÚklassr4   r4   r5   r     s   

ü
zDrawingFigure.__init__c                 C   s(   | j  | j| j¡ | j | j dd¡ d S rc   )rH   rw   r‚   r•   rd   rP   r4   r4   r5   rM   &  s   zDrawingFigure.drawFigure©NNr’   r4   r4   r4   r5   r”     s    
r”   )ÚrestoreFormsÚ
storeFormsÚstoreFormsInMemoryÚrestoreFormsInMemoryrT   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚPageCatcherCachingMixInz+Helper functions to cache pages for figuresc                 C   s,   t j |¡\}}t j |¡\}}d||f S )Nz	%s_page%d)r‹   rŒ   rˆ   Úsplitext)r2   ÚpdfFileNameÚpageNoÚdirnamer�   ÚrootÚextr4   r4   r5   ÚgetFormName9  s   z#PageCatcherCachingMixIn.getFormNamec                 C   sH   |   ||¡}tj |d ¡r"t |d ¡d }t |¡d }||kS dS )z&returns 1 if no forms or form is olderú.frmr|   rT   )r§   r‹   rŒ   ÚexistsÚstat)r2   r¢   r£   ÚformNameÚformModTimeÚ
pdfModTimer4   r4   r5   ÚneedsProcessing?  s   z'PageCatcherCachingMixIn.needsProcessingc                 C   s.   |   ||¡}t||d |d |gd� |d S )Nr¨   Ú_)ÚprefixÚpagenumbers)r§   r�   )r2   r¢   r£   r«   r4   r4   r5   Ú
processPDFI  s   
þz"PageCatcherCachingMixIn.processPDFN)rh   ri   rj   rx   r§   r®   r²   r4   r4   r4   r5   r    6  s
    
r    c                   @   r“   )ÚcachePageCatcherFigureNonA4ú?PageCatcher page with a caption below it.  Size to be supplied.Nc                 C   s`   t j |¡\| _| _| jdkrt j| _|| _|  | j| j¡d t|ƒ | _	t
 | ||||¡ d S )Nr   r¯   )r‹   rŒ   rˆ   r¤   r�   Úcurdirr£   r§   Ústrr«   r{   r   ©r2   r�   r£   r"   r    r3   r,   r4   r4   r5   r   U  s   
z$cachePageCatcherFigureNonA4.__init__c                 C   s’   | j  ¡  | j  | j¡s2| jtj | j }|  || j	¡d }|  
|| j	¡r,|  || j	¡ t|| j ƒ}| j  | j| j¡ | j  | j¡ | j  ¡  d S )Nr¨   )rH   rL   ÚhasFormr«   r¤   r‹   Úsepr�   r§   r£   r®   r²   rœ   rw   r‚   ÚdoFormrN   )r2   ÚrestorePathÚformFileNameÚnamesr4   r4   r5   rM   ]  s   
z&cachePageCatcherFigureNonA4.drawFigurerf   r’   r4   r4   r4   r5   r³   Q  s    
r³   c                   @   ó   e Zd ZdZddd„ZdS )ÚcachePageCatcherFigureú�PageCatcher page with a caption below it.  Presumes A4, Portrait.
        This needs our commercial PageCatcher product, or you'll get a blank.éS  éJ  Nc              	   C   s   t j| ||||||d� d S )N)r,   )r³   r   r·   r4   r4   r5   r   n  s   zcachePageCatcherFigure.__init__)rÁ   rÂ   N©rh   ri   rj   rx   r   r4   r4   r4   r5   r¿   k  ó    r¿   c                   @   s&   e Zd ZdZi Zddd„Zdd„ ZdS )ÚPageCatcherFigureNonA4r´   Nc           	      C   sˆ   | }| _ || _| tjd¡ dd¡ dd¡ dd¡ dd¡}| dd¡d t|ƒ d | _| jt|ƒ | _|| _t	 
| ||||¡ d S )Nr¯   ú/ú\ú-ú:Ú.)r�   r£   Úreplacer‹   r¹   r¶   r°   r«   Úcachingr{   r   )	r2   r�   r£   r"   r    r3   r,   rÌ   Úfnr4   r4   r5   r   v  s   
.zPageCatcherFigureNonA4.__init__c                 C   s¾   | j  | j¡sC| j| jv r| j| j \}}n't| jdƒ}| ¡ }| ¡  t|| j	g| j
d�\}}| jdkr=||f| j| j< t|| j ƒ}| j  ¡  | j  | j| j¡ | j  | j¡ | j  ¡  d S )NÚrb)r±   r°   Úmemory)rH   r¸   r«   r�   Ú_cacheÚopenÚreadÚcloserž   r£   r°   rÌ   rŸ   rL   rw   r‚   rº   rN   )r2   ÚfÚdataÚpdfr4   r4   r5   rM     s   

z!PageCatcherFigureNonA4.drawFigurer›   )rh   ri   rj   rx   rÐ   r   rM   r4   r4   r4   r5   rÅ   q  s
    
	rÅ   c                   @   r¾   )ÚPageCatcherFigurerÀ   rÁ   rÂ   Nc              
   C   s   t j| |||||||d� d S )N)r,   rÌ   )rÅ   r   )r2   r�   r£   r"   r    r3   r,   rÌ   r4   r4   r5   r   “  s   zPageCatcherFigure.__init__)rÁ   rÂ   NNrÃ   r4   r4   r4   r5   r×   �  rÄ   r×   c                 C   s`   t dt dt dt dt dd�}tdtddd	d
�}td|ƒ}td|ƒ}||g}| || ¡ d S )Né   é   é   rT   ©ÚshowBoundaryÚBodyé   é   é   )r   r   r8   r.   ziSpam spam spam spam. Spam spam spam spam. Spam spam spam spam. Spam spam spam spam. Spam spam spam spam. zPEggs eggs eggs. Eggs eggs eggs. Eggs eggs eggs. Eggs eggs eggs. Eggs eggs eggs. )r   r
   r   r   r	   ÚaddFromList)rn   ÚframeÚ	bodyStyleÚpara1Úpara2Úmydatar4   r4   r5   rz   –  s   û

rz   c                  C   sV   t dƒ} tttdt dt dd�}tƒ }tdƒ|_tdƒ|_| |g| ¡ |  ¡  d S )Nzfigures.pdfrà   r}   rT   rÛ   ÚblueÚlightyellow)	r   r   r
   ry   r   r%   r&   rá   Úsave)rb   rÔ   Úvr4   r4   r5   Útest1§  s   

rë   Ú__main__)3rx   Ú__version__r‹   Úreportlab.libr   Úreportlab.pdfgen.canvasr   Úreportlab.lib.stylesr   rŽ   r   r   Úreportlab.platypusr   r   r	   Úreportlab.lib.unitsr
   Úreportlab.lib.enumsr   r   r   Úreportlab.lib.validatorsr   Úreportlab.lib.colorsr   r   r   r=   r   rs   rt   ry   r{   r‰   r”   Úrlextra.pageCatcher.pageCatcherrœ   r�   rž   rŸ   Ú_hasPageCatcherÚImportErrorr    r³   r¿   rÅ   r×   rz   rë   rh   r4   r4   r4   r5   Ú<module>   sR    <ÿ	
ÿ