U
    '1eG                     @   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*k
rb   dZ)Y nX 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 )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   >/tmp/pip-unpacked-wheel-109iniqw/reportlab/platypus/figures.pyr      s&    
zFigure.__init__c              
   C   s   | j }| j}| j}| j}| j}| j}| j}| j|||||||fkr|||||||f| _t|t	rh|| _
ndt|trtd||d| ||| j|dkrtn|dkrtntd| _t	| j | j| _
ntdt| d S )Nr   g333333?leftright)r   r   leadingZ	textColorZ	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   :   s0    

zFigure._getCaptionParac                 C   s   | j rT|   | j| j|| j \}}|| j | _| j| j | _|| jkr\|| _n| j| _| j	ddt
fkr~d|| j  | _n"| j	dtfkr|| j | _nd| _| j| jfS )Nr   ZCENTREr   RIGHTr   )r"   r1   r:   wrapr    r!   r'   r+   r3   r0   r   dxr   )r2   
availWidthavailHeightwhr4   r4   r5   r?   W   s    
 zFigure.wrapc                 C   s   | j | jd | jr0| jdkr0| j d| j | jr>|   | jrL| 	  | j 
  |   | j   | jr| jdkr| j d| j  n| j d| j| j  |   |   d S )Nr   r   )canv	translater@   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dd| j| j d S Nr   )rE   ZdrawBoundaryr-   r    r!   rM   r4   r4   r5   rH   |   s    zFigure.drawBorderc                 C   s@   | j   | j | j | j jdd| j| jdd | j   d S )Nr      )fill)rE   rI   ZsetFillColorr,   rectr    r!   rK   )r2   colorr4   r4   r5   _doBackground   s    
zFigure._doBackgroundc                 C   sB   t | jr| | j n&zt| j}| | W n   Y nX 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,   rT   r   )r2   cr4   r4   r5   rG      s    

zFigure.drawBackgroundc                 C   s   | j | jdd d S rO   )r:   drawOnrE   rM   r4   r4   r5   rL      s    zFigure.drawCaptionc                 C   s   d S Nr4   rM   r4   r4   r5   rJ      s    zFigure.drawFigure)__name__
__module____qualname__r   r   r   r1   r?   rN   rH   rT   rG   rL   rJ   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   rP   )ZstrokerQ   g?)Z	beginPathZsetFillColorRGBrR   ZsetLineWidthZsetStrokeColorRGB)canvasxyr    r3   pthZcornerr4   r4   r5   drawPage   s    
r_   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   s   d S rW   r4   rM   r4   r4   r5   drawVirtualPage   s    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_?)r_   rE   r
   rF   scalerb   rM   r4   r4   r5   rJ      s    "zPageFigure.drawFigure)N)rX   rY   rZ   __doc__r   rb   rJ   r4   r4   r4   r5   r`      s   
r`   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)r`   r   r"   rM   r4   r4   r5   r      s    
zPlatPropFigure1.__init__c                 C   s   t | j d S rW   )demo1rE   rM   r4   r4   r5   rb      s    zPlatPropFigure1.drawVirtualPageN)rX   rY   rZ   rd   r   rb   r4   r4   r4   r5   re      s   re   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   rP   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%   rk   rl   r.   r/   r'   r(   r)   rm   r0   r-   r4   r4   r5   r      s$    zFlexFigure.__init__c                 C   s   | j dks| j|ks| j|krt| ||\}}|| j }| jdkrbt|| j || | j | _ n| j| _ | j dk r| jr| j| j  d | _| j| j  | _n0| j dkr| j	r| j| j  d | _| j| j  | _dS )z4Rescale to fit according to the rules, but only onceNrP   g-C6?)
rn   r    r3   r   r?   r!   rm   minrk   rl   )r2   rA   rB   rC   rD   r+   r4   r4   r5   _scale   s    

zFlexFigure._scalec                 C   s   |  || t| ||S rW   )rp   r   r?   r2   rA   rB   r4   r4   r5   r?      s    zFlexFigure.wrapc                 C   s   |  || t| ||S rW   )rp   r   splitrq   r4   r4   r5   rr      s    zFlexFigure.split)
rX   rY   rZ   rd   r   r   r   rp   r?   rr   r4   r4   r4   r5   rg      s&    
!rg   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td| ddlm} || \}}	|| _tj	| ||	|||||d d S )Nzimage file %s not foundr   )ImageReader)rm   r0   r-   )
ospathisfileAssertionErrorreportlab.lib.utilsrt   ZgetSizefilenamerg   r   )
r2   rz   r"   r,   rm   r0   r-   rt   rC   rD   r4   r4   r5   r     s
    zImageFigure.__init__c                 C   s   | j | jdd| j| j d S rO   )rE   Z	drawImagerz   r    r!   rM   r4   r4   r5   rJ     s    
   zImageFigure.drawFigure)NNr   NrX   rY   rZ   rd   r   rJ   r4   r4   r4   r5   rs      s   
rs   c                   @   s"   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 )NrP   )r   getattrdrawingrg   r   r    r3   rl   )r2   
modulename	classnamer"   ZbaseDirr,   moduleklassr4   r4   r5   r     s    

zDrawingFigure.__init__c                 C   s(   | j | j| j | j| j dd d S rO   )rE   rc   rn   r~   rV   rM   r4   r4   r5   rJ     s    zDrawingFigure.drawFigure)NNr{   r4   r4   r4   r5   r|     s   
r|   )restoreForms
storeFormsstoreFormsInMemoryrestoreFormsInMemoryrP   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)ru   rv   rr   splitext)r2   pdfFileNamepageNodirnamerz   rootextr4   r4   r5   getFormName,  s    z#PageCatcherCachingMixIn.getFormNamec                 C   sL   |  ||}tj|d rDt|d d }t|d }||kS dS dS )z&returns 1 if no forms or form is older.frmrh   rP   N)r   ru   rv   existsstat)r2   r   r   formNameZformModTimeZ
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)rX   rY   rZ   rd   r   r   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 )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   )ru   rv   rr   r   rz   curdirr   r   strr   rg   r   r2   rz   r   r"   r    r3   r,   r4   r4   r5   r   H  s    
z$cachePageCatcherFigureNonA4.__init__c                 C   s   | j   | j | jsd| jtj | j }| || j	d }| 
|| j	rX| || j	 t|| j }| j | j| j | j | j | j   d S )Nr   )rE   rI   hasFormr   r   ru   seprz   r   r   r   r   r   rc   rn   doFormrK   )r2   ZrestorePathZformFileNamenamesr4   r4   r5   rJ   P  s    
z&cachePageCatcherFigureNonA4.drawFigure)Nr{   r4   r4   r4   r5   r   D  s   
r   c                   @   s   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rX   rY   rZ   rd   r   r4   r4   r4   r5   r   ^  s   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   /\-:.)rz   r   replaceru   r   r   r   r   cachingrg   r   )	r2   rz   r   r"   r    r3   r,   r   fnr4   r4   r5   r   i  s    
.zPageCatcherFigureNonA4.__init__c                 C   s   | j | js| j| jkr,| j| j \}}nNt| jd}| }|  t|| j	g| j
d\}}| jdkrz||f| j| j< t|| j }| j   | j | j| j | j | j | j   d S )Nrb)r   r   Zmemory)rE   r   r   rz   _cacheopenreadcloser   r   r   r   r   rI   rc   rn   r   rK   )r2   fdataZpdfr4   r4   r5   rJ   r  s    

z!PageCatcherFigureNonA4.drawFigure)NN)rX   rY   rZ   rd   r   r   rJ   r4   r4   r4   r5   r   d  s   
	r   c                   @   s   e Zd ZdZdddZdS )PageCatcherFigurer   r   r   Nc              
   C   s   t j| |||||||d d S )N)r,   r   )r   r   )r2   rz   r   r"   r    r3   r,   r   r4   r4   r5   r     s    zPageCatcherFigure.__init__)r   r   NNr   r4   r4   r4   r5   r     s   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         rP   ZshowBoundaryZ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)r[   frameZ	bodyStyleZpara1Zpara2Zmydatar4   r4   r5   rf     s    

rf   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   ri   rP   r   ZblueZlightyellow)	r   r   r
   re   r   r%   r&   r   save)rU   r   vr4   r4   r5   test1  s    

r   __main__)3rd   __version__ru   Zreportlab.libr   Zreportlab.pdfgen.canvasr   Zreportlab.lib.stylesr   ry   r   r   Zreportlab.platypusr   r   r	   Zreportlab.lib.unitsr
   Zreportlab.lib.enumsr   r   r   Zreportlab.lib.validatorsr   Zreportlab.lib.colorsr   r   r   r;   r   r_   r`   re   rg   rs   r|   Zrlextra.pageCatcher.pageCatcherr   r   r   r   Z_hasPageCatcherImportErrorr   r   r   r   r   rf   r   rX   r4   r4   r4   r5   <module>   sJ   <
	
