o
    vhG                     @   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)rG 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re1  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   X/var/www/html/hyperkenya/venv/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      | j | jdd| j| j d S Nr   )rH   drawBoundaryr-   r    r!   rP   r4   r4   r5   rK   |      zFigure.drawBorderc                 C   s@   | j   | j | j | j jdd| j| jdd | j   d S )Nr      )fill)rH   rL   setFillColorr,   rectr    r!   rN   )r2   colorr4   r4   r5   _doBackground   s   
zFigure._doBackgroundc                 C   sB   t | jr| | j dS zt| j}| | W dS    Y dS )zFor 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,   r[   r   )r2   cr4   r4   r5   rJ      s   

zFigure.drawBackgroundc                 C   s   | j | jdd d S rS   )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   r[   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   rV   )strokerW   g?)	beginPathsetFillColorRGBrY   setLineWidthsetStrokeColorRGB)canvasxyr    r3   pthcornerr4   r4   r5   drawPage   s   
rn   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   r^   r_   r4   rP   r4   r4   r5   drawVirtualPage   r`   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_?)rn   rH   r
   rI   scalerq   rP   r4   r4   r5   rM      s   "zPageFigure.drawFigurer_   )ra   rb   rc   __doc__r   rq   rM   r4   r4   r4   r5   ro      s
    
ro   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)ro   r   r"   rP   r4   r4   r5   r      s   

zPlatPropFigure1.__init__c                 C   s   t | j d S r_   )demo1rH   rP   r4   r4   r5   rq      s   zPlatPropFigure1.drawVirtualPageN)ra   rb   rc   rs   r   rq   r4   r4   r4   r5   rt      s    rt   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   rV   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%   rz   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 onceNrV   g-C6?)
r}   r    r3   r   rB   r!   r|   minrz   r{   )r2   rD   rE   rF   rG   r+   r4   r4   r5   _scale   s   

zFlexFigure._scalec                 C      |  || t| ||S r_   )r   r   rB   r2   rD   rE   r4   r4   r5   rB         zFlexFigure.wrapc                 C   r   r_   )r   r   splitr   r4   r4   r5   r      r   zFlexFigure.split)
ra   rb   rc   rs   r   r   r   r   rB   r   r4   r4   r4   r5   rv      s&    
!rv   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filenamerv   r   )
r2   r   r"   r,   r|   r0   r-   r   rF   rG   r4   r4   r5   r     s
   zImageFigure.__init__c                 C   rR   rS   )rH   	drawImager   r    r!   rP   r4   r4   r5   rM     s   
zImageFigure.drawFigure)NNr   Nra   rb   rc   rs   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 )NrV   )r   getattrdrawingrv   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 rS   )rH   rr   r}   r   r]   rP   r4   r4   r5   rM     s   zDrawingFigure.drawFigureNNr   r4   r4   r4   r5   r     s    
r   )restoreForms
storeFormsstoreFormsInMemoryrestoreFormsInMemoryrV   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   getFormName,  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.frmrw   rV   )r   r   r   existsstat)r2   r   r   formNameformModTime
pdfModTimer4   r4   r5   needsProcessing2  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   
processPDF<  s   
z"PageCatcherCachingMixIn.processPDFN)ra   rb   rc   rs   r   r   r   r4   r4   r4   r5   r   )  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   rv   r   r2   r   r   r"   r    r3   r,   r4   r4   r5   r   H  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   rr   r}   doFormrN   )r2   restorePathformFileNamenamesr4   r4   r5   rM   P  s   
z&cachePageCatcherFigureNonA4.drawFigurer_   r   r4   r4   r4   r5   r   D  s    
r   c                   @      e Zd ZdZdddZdS )cachePageCatcherFigurePageCatcher 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   a  s   zcachePageCatcherFigure.__init__)r   r   Nra   rb   rc   rs   r   r4   r4   r4   r5   r   ^      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   cachingrv   r   )	r2   r   r   r"   r    r3   r,   r   fnr4   r4   r5   r   i  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   rr   r}   r   rN   )r2   fdatapdfr4   r4   r5   rM   r  s   

z!PageCatcherFigureNonA4.drawFigurer   )ra   rb   rc   rs   r   r   rM   r4   r4   r4   r5   r   d  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     rU   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         rV   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)ri   frame	bodyStylepara1para2mydatar4   r4   r5   ru     s   

ru   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   rx   rV   r   bluelightyellow)	r   r   r
   rt   r   r%   r&   r   save)r\   r   vr4   r4   r5   test1  s   

r   __main__)3rs   __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   rn   ro   rt   rv   r   r   rlextra.pageCatcher.pageCatcherr   r   r   r   _hasPageCatcherImportErrorr   r   r   r   r   ru   r   ra   r4   r4   r4   r5   <module>   sP   <	
