a
    ¦¾de4;  ã                   @   s  d Z dZddlmZ ddlT ddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZmZ e
jfd	d
„ZG dd„ deƒZddlmZ G dd„ deƒZde
jdi fdd„Zde
jdi fdd„Zddd„Zedk�r
edd� ddlZeejƒdkrúejd ZndZeedd� dS )z3.3.0z¼Render Drawing objects within others PDFs or standalone

Usage::
    
    import renderpdf
    renderpdf.draw(drawing, canvas, x, y)

Execute the script to see some test drawings.
changed
é    )ÚBytesIO)Ú*)ÚCanvas)ÚstringWidth)Ú	rl_config)ÚRendererÚgetStateDeltaÚrenderScaledDrawingÚSTATE_DEFAULTSc                 C   s"   t ƒ }|jt| ƒ||||d� dS )z
As it says©ÚshowBoundaryN)Ú_PDFRendererÚdrawr	   )ÚdrawingZcanvasÚxÚyr   ÚR© r   úU/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/graphics/renderPDF.pyr      s    r   c                   @   sˆ   e Zd Z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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd S )!r   z±This draws onto a PDF document.  It needs to be a class
    rather than a function, as some PDF-specific state tracking is
    needed outside of the state info in the SVG model.c                 C   s   d| _ d| _d S ©Nr   )Ú_strokeÚ_fill©Úselfr   r   r   Ú__init__%   s    z_PDFRenderer.__init__c                 C   sl   t |tƒr|js| j ¡  t|ƒ}| j |¡ |  |i ¡ |  	|¡ | j 
¡  t |tƒr^|jsh| j ¡  dS )zEThis is the recursive method called for each node
        in the treeN)Ú
isinstanceÚPathÚ
isClipPathÚ_canvasZ	saveStater   Ú_trackerÚpushÚapplyStateChangesZdrawNodeDispatcherÚpopZrestoreState)r   ÚnodeZdeltasr   r   r   ÚdrawNode)   s    


z_PDFRenderer.drawNodec              	   C   sn   |j |j  krdkrBn n&| jj|j|j|j|j| j| j	d� n(| jj
|j|j|j|j|j | j	| jd� d S )Nr   ©ÚstrokeÚfill©r'   r&   )ÚrxÚryr   Úrectr   r   ÚwidthÚheightr   r   Z	roundRect)r   r+   r   r   r   ÚdrawRect=   s    ü	üz_PDFRenderer.drawRectc                 C   sB   |j }|r>t|dƒs"tj  |j ¡r>| j ||j|j|j|j	¡ d S )NÚmode)
ÚpathÚhasattrÚosÚexistsr   ZdrawInlineImager   r   r,   r-   )r   Úimager0   r   r   r   Ú	drawImageP   s    ýz_PDFRenderer.drawImagec                 C   s$   | j r | j |j|j|j|j¡ d S ©N)r   r   ÚlineÚx1Úy1Úx2Úy2)r   r7   r   r   r   ÚdrawLineZ   s    z_PDFRenderer.drawLinec                 C   s$   | j j|j|j|j| j| jd� d S ©Nr(   )r   ÚcircleÚcxÚcyÚrr   r   )r   r>   r   r   r   Ú
drawCircle^   s
    ýz_PDFRenderer.drawCirclec                 C   s–   | j r’t|jƒdksJ dƒ‚|jdd… |jdd …  }}| j ¡ }| |d |d ¡ tdt|ƒdƒD ]}| || ||d  ¡ qh| j |¡ d S )Né   ú#Polyline must have 2 or more pointsr   é   )	r   ÚlenÚpointsr   Ú	beginPathÚmoveToÚrangeÚlineToÚdrawPath)r   ZpolylineÚheadÚtailr0   Úir   r   r   ÚdrawPolyLinee   s    
z_PDFRenderer.drawPolyLinec                 C   s$  |j r|  | ¡ ¡ �n|j|j|j|j|jf\}}}}}| ¡ \}}}	|d u rT|}|| }
| j	 
¡ }|dksv|d u r¸|	dks†|	d u r¸| ||¡ | || || || || ||
¡ nJ| || || || || ||
¡ | || ||	 || ||	 ||
 ¡ | ¡  | j	j|| j| jd� d S )Nr   r(   )ZannularrL   Z	asPolygonÚcenterxÚcenteryÚradiusÚstartangledegreesÚendangledegreesZ
_xtraRadiir   rH   rI   ZarcToZarcÚcloser   r   )r   ZwedgerQ   rR   rS   rT   rU   ZyradiusZradius1Zyradius1Zangler0   r   r   r   Ú	drawWedgeo   s0    ÿ
 ÿÿÿþz_PDFRenderer.drawWedgec                 C   sP   |j |j }|j |j }|j|j }|j|j }| jj||||| j| jd� d S r=   )r?   r)   r@   r*   r   Úellipser   r   )r   rX   r8   r:   r9   r;   r   r   r   ÚdrawEllipseˆ   s
    z_PDFRenderer.drawEllipsec                 C   s¢   t |jƒdksJ dƒ‚|jdd… |jdd …  }}| j ¡ }| |d |d ¡ tdt |ƒdƒD ]}| || ||d  ¡ qb| ¡  | jj|| j	| j
d� d S )NrC   rD   r   rE   r%   )rF   rG   r   rH   rI   rJ   rK   rV   rL   r   r   )r   ZpolygonrM   rN   r0   rO   r   r   r   ÚdrawPolygon�   s    
ýz_PDFRenderer.drawPolygonc                 C   sú   t |ddƒ}|dv }|dv }| jr&|s0| jrö|rö| j ¡ }|d |j|j|j|jf\}}}}	}
|dvrÞ|d |d  }}t	|	|||
ƒ}|d	kr˜||8 }nF|d
kr®||d 8 }n0|dkrÎ|t
||	||||
ƒ8 }ntdt|ƒ ƒ‚| jj|||	|pðd d� d S )NÚtextRenderModer   )r   rC   é   é   )rE   rC   é   r]   Z
textAnchor)ÚstartZ	inheritedÚfontNameÚfontSizeÚendZmiddleg      à?Únumericzbad value for textAnchor )r/   )Úgetattrr   r   r   ZgetStater   r   ÚtextÚencodingr   ZnumericXShiftÚ
ValueErrorÚstrr   Ú
drawString)r   Z	stringObjr[   ZneedFillZ
needStrokeÚSZtext_anchorr   r   re   ÚencÚfontZ	font_sizeZtextLenr   r   r   ri   ž   s"    
$
z_PDFRenderer.drawStringc                 C   sú   ddl m} | j ¡ }|j|j|j|jf}t|ddƒ}| j	}| j
}||||oR|dkd�}| jj}	|jrn| jjn|	}
t|dd ƒ}|dkrÄ|r²|r²|s²|
||dd	� |	||d|d
� qö|
||||d� n2|dkrÞ|
||||d� n|sæd}|
||||d� d S )Nr   )Ú_renderPathÚ	autocloseÚ Zpdf)Z
forceCloseÚfillModeÚsvgr(   )r&   r'   rp   )r'   r&   rp   )Úreportlab.graphics.shapesrm   r   rH   rI   rK   ZcurveTorV   rd   r   r   rL   r   ÚclipPath)r   r0   rm   ZpdfPathZ	drawFuncsrn   r'   r&   ZisClosedZdPZcPrp   r   r   r   rL   ³   s(    
z_PDFRenderer.drawPathc                 C   s   | j  |¡ d S r6   )r   ÚsetStrokeColor©r   Úcr   r   r   rt   Ì   s    z_PDFRenderer.setStrokeColorc                 C   s   | j  |¡ d S r6   )r   ÚsetFillColorru   r   r   r   rw   Ï   s    z_PDFRenderer.setFillColorc              
   C   sF  t jrt| ¡ ƒn| ¡ D �]$\}}|dkr\| j |d |d |d |d |d |d ¡ q|dkr†|d	u rtd| _nd| _|  |¡ q|d
krœ| j |¡ q|dkr²| j 	|¡ q|dkrÈ| j 
|¡ q|dk�r<|�r0t|ttfƒ�rt|ƒdk�rt|d ttfƒ�r|d }|d }nd}| j ||¡ n
| j ¡  q|dk�rj|d	u �rXd| _nd| _|  |¡ q|dv �r¤| d| jj¡}| d| jj¡}| j ||¡ q|dk�rÆ|d	u�r@| j |¡ q|dk�rè|d	u�r@| j |¡ q|dk�r | j |¡ q|dk�r| j |¡ q|dk�r0| j |¡ q|dkr|| j_qd	S )z`This takes a set of states, and outputs the PDF operators
        needed to set those propertiesÚ	transformr   rE   rC   é   r\   r^   ZstrokeColorNZstrokeWidthZstrokeLineCapZstrokeLineJoinZstrokeDashArrayZ	fillColor)ra   r`   r`   ra   ZfillOpacityZstrokeOpacityZfillOverprintZstrokeOverprintZoverprintMaskrp   )r   Z	invariantÚsortedÚitemsr   rx   r   rt   ZsetLineWidthZ
setLineCapZsetLineJoinr   ÚlistÚtuplerF   ZsetDashr   rw   ÚgetZ	_fontnameZ	_fontsizeÚsetFontZsetFillAlphaZsetStrokeAlphaZsetFillOverprintZsetStrokeOverprintZsetOverprintMaskZ	_fillMode)r   ÚdeltaZnewStateÚkeyÚvalueÚphaseZfontnameZfontsizer   r   r   r!   Ò   s^    $ÿ
2










z_PDFRenderer.applyStateChangesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r$   r.   r5   r<   rB   rP   rW   rY   rZ   ri   rL   rt   rw   r!   r   r   r   r   r       s    

r   )ÚFlowablec                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚGraphicsFlowablez'Flowable wrapper around a Pingo drawingc                 C   s   || _ | j j| _| j j| _d S r6   )r   r,   r-   )r   r   r   r   r   r     s    
zGraphicsFlowable.__init__c                 C   s   t | j| jddƒ d S r   )r   r   Zcanvr   r   r   r   r     s    zGraphicsFlowable.drawN)r„   r…   r†   r‡   r   r   r   r   r   r   r‰     s   r‰   ro   rE   c              
   C   s:  t | ƒ} dD ],}d| }t| || |td|  ¡ƒ||< qt|fi |¤Ž}|rj| tjd¡ | dd|¡ | 	|¡ |rž| 
| j| jf¡ t| |dd|d� n2| tjd	¡ d
}	d}
|	| j }	t| |d|	|d� | ¡  | ¡  tjdk�r6t|dƒ�s6z0ddl}ddl}| |¡ dd¡ | |¡ W n   Y n0 dS )zàMakes a one-page PDF with just the drawing.

    If autoSize=1, the PDF will be the same size as
    the drawing; if 0, it will place the drawing on
    an A4 page with a title above it - possibly overflowing
    if too big.)ÚNameÚSizeZinitialFontrl   é$   éP   éî  r   r   é   éä  rE   ÚmacÚwriteNZCAROzPDF )r	   rd   r"   r
   r   r   r   ZdefaultGraphicsFontNameri   ZsetTitleZsetPageSizer,   r-   r   ÚshowPageÚsaveÚsysÚplatformr1   ÚmacfsÚ
macostoolsZFSSpecZSetCreatorTypeZtouched)ÚdÚfnÚmsgr   ÚautoSizeÚ
canvasKwdsr   Úarv   r   rO   r—   r˜   r   r   r   Ú
drawToFile  s4    "

rŸ   c                 C   s"   t ƒ }t| |||||d� | ¡ S )z>Returns a PDF as a string in memory, without touching the disk)r›   r   rœ   r�   )r   rŸ   Úgetvalue)r™   r›   r   rœ   r�   Úsr   r   r   ÚdrawToStringD  s    r¢   ÚpdfoutFc                 C   sÎ  ddl m}m} ddlm} dd l}|j | ¡s:| | ¡ |j 	| d¡}t
|ƒ}| |d¡ | ddd¡ dd	lm} g }	t|ƒD ]>}
|
dd
… dkr‚t||
ƒ}|ƒ }t|ddƒ}|	 ||f¡ q‚| |d¡ d}d}|	D ]´\}}|d usöJ d| ƒ‚|dk �r| ¡  d}|d }| |d¡ | d|d| ¡ | |d¡ |d }| d|¡}| |¡ | |¡ | ¡ }||j }t||d|ƒ |d }qÚ|dk�r¢| ¡  | ¡  |�sº|dk�rÊtdt|ƒ ƒ d S )Nr   )Ú_baseGFontNameÚ_baseGFontNameBI)ÚverbosezrenderPDF.pdfrŒ   r�   rŽ   zGraphics Test)Ú
testshapesé
   Z
getDrawingr‡   ro   r�   r�   rE   zDrawing %d has no docstring!i,  é   z
Drawing %dé   rC   zsaved %s)rr   r¤   r¥   Zreportlab.rl_configr¦   r2   r0   ÚisdirÚmkdirÚjoinr   r   ri   Zreportlab.graphicsr§   Údirrd   Úappendr“   Z	beginTextZ	textLinesZdrawTextZgetYr-   r   r”   ÚprintÚascii)ZoutDirÚshoutr¤   r¥   r¦   r2   rš   rv   r§   ZdrawingsÚfuncnameÚfuncr   Ú	docstringr   rO   ZtextObjr   r   r   ÚtestP  sR    






r¶   Ú__main__T)r²   N)r£   F)Ú__version__r‡   Úior   rr   Zreportlab.pdfgen.canvasr   Zreportlab.pdfbase.pdfmetricsr   Z	reportlabr   Zreportlab.graphics.renderbaser   r   r	   r
   Z_unset_r   r   Zreportlab.platypusrˆ   r‰   rŸ   r¢   r¶   r„   r•   rF   ÚargvZoutdirr   r   r   r   Ú<module>   s,    t
&
4

