o
    ¬+ Zn>  ã                   @   s  d Z d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 ddlmZ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 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
é    )Ú*)ÚCanvas)ÚstringWidth)Ú
getBytesIO)ÚasciiÚ	rl_config)ÚRendererÚStateTrackerÚgetStateDeltaÚrenderScaledDrawingÚSTATE_DEFAULTSc                 C   s"   t ƒ }|jt| ƒ||||d� dS )z
As it says©ÚshowBoundaryN)Ú_PDFRendererÚdrawr   )ÚdrawingÚcanvasÚxÚyr   ÚR© r   úN/var/www/html/env/lib/python3.10/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   sp   t |tƒr|js| j ¡  t|ƒ}| j |¡ |  |i ¡ |  	|¡ | j 
¡  t |tƒr/|js6| j ¡  dS dS )zEThis is the recursive method called for each node
        in the treeN)Ú
isinstanceÚPathÚ
isClipPathÚ_canvasÚ	saveStater
   Ú_trackerÚpushÚapplyStateChangesÚdrawNodeDispatcherÚpopÚrestoreState)r   ÚnodeÚdeltasr   r   r   ÚdrawNode(   s   


ÿz_PDFRenderer.drawNodec              	   C   sp   |j |j  krdkr"n n| jj|j|j|j|j| j| j	d� d S | jj
|j|j|j|j|j | j	| jd� d S )Nr   ©ÚstrokeÚfill©r.   r-   )ÚrxÚryr!   Úrectr   r   ÚwidthÚheightr   r   Ú	roundRect)r   r2   r   r   r   ÚdrawRect<   s   
ü	
üz_PDFRenderer.drawRectc                 C   sJ   |j }|r!t|dƒstj  |j ¡r#| j ||j|j|j|j	¡ d S d S d S )NÚmode)
ÚpathÚhasattrÚosÚexistsr!   ÚdrawInlineImager   r   r3   r4   )r   Úimager8   r   r   r   Ú	drawImageO   s   ýÿz_PDFRenderer.drawImagec                 C   s(   | j r| j |j|j|j|j¡ d S d S ©N)r   r!   ÚlineÚx1Úy1Úx2Úy2)r   r@   r   r   r   ÚdrawLineY   s   ÿz_PDFRenderer.drawLinec                 C   s$   | j j|j|j|j| j| jd� d S ©Nr/   )r!   ÚcircleÚcxÚcyÚrr   r   )r   rG   r   r   r   Ú
drawCircle]   s
   
ýz_PDFRenderer.drawCirclec                 C   sš   | j rKt|jƒdksJ dƒ‚|jdd… |jdd … }}| j ¡ }| |d |d ¡ tdt|ƒdƒD ]}| || ||d  ¡ q4| j |¡ d S d S )Né   ú#Polyline must have 2 or more pointsr   é   )	r   ÚlenÚpointsr!   Ú	beginPathÚmoveToÚrangeÚlineToÚdrawPath)r   ÚpolylineÚheadÚtailr8   Úir   r   r   ÚdrawPolyLined   s   
ùz_PDFRenderer.drawPolyLinec                 C   s$  |j r|  | ¡ ¡ d S |j|j|j|j|jf\}}}}}| ¡ \}}}	|d u r*|}|| }
| j	 
¡ }|dks;|d u r\|	dksC|	d u r\| ||¡ | || || || || ||
¡ n%| || || || || ||
¡ | || ||	 || ||	 ||
 ¡ | ¡  | j	j|| j| jd� d S )Nr   r/   )ÚannularrU   Ú	asPolygonÚcenterxÚcenteryÚradiusÚstartangledegreesÚendangledegreesÚ
_xtraRadiir!   rQ   rR   ÚarcToÚarcÚcloser   r   )r   Úwedger]   r^   r_   r`   ra   ÚyradiusÚradius1Úyradius1Úangler8   r   r   r   Ú	drawWedgen   s0   ÿ
 ÿÿÿ
þz_PDFRenderer.drawWedgec                 C   sP   |j |j }|j |j }|j|j }|j|j }| jj||||| j| jd� d S rF   )rH   r0   rI   r1   r!   Úellipser   r   )r   rl   rA   rC   rB   rD   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  ¡ q1| ¡  | jj|| j	| j
d� d S )NrL   rM   r   rN   r,   )rO   rP   r!   rQ   rR   rS   rT   re   rU   r   r   )r   ÚpolygonrW   rX   r8   rY   r   r   r   ÚdrawPolygon�   s   

ýz_PDFRenderer.drawPolygonc                 C   sà   | j rn| j ¡ }|d |j|j|j|jf\}}}}}|dvrZ|d |d }}	t|||	|ƒ}
|dkr7||
8 }n#|dkrB||
d 8 }n|dkrR|t|||
||	|ƒ8 }nt	d	t
|ƒ ƒ‚| j ||¡}| |¡ | j |¡ d S d S )
NÚ
textAnchor)ÚstartÚ	inheritedÚfontNameÚfontSizeÚendÚmiddleg      à?Únumericzbad value for textAnchor )r   r#   ÚgetStater   r   ÚtextÚencodingr   ÚnumericXShiftÚ
ValueErrorÚstrr!   Ú	beginTextÚtextLineÚdrawText)r   Ú	stringObjÚSÚtext_anchorr   r   ry   ÚencÚfontÚ	font_sizeÚtextLenÚtr   r   r   Ú
drawString�   s"   
$

ðz_PDFRenderer.drawStringc                 C   s   ddl m} | j ¡ }|j|j|j|jf}t|ddƒ}| j	}| j
}||||o)|dkd�}| jj}	|jr7| jjn|	}
t|dd ƒ}|dkrd|rZ|rZ|sZ|
||dd	� |	||d|d
� d S |
||||d� d S |dkrr|
||||d� d S |svd}|
||||d� d S )Nr   )Ú_renderPathÚ	autocloseÚ Úpdf)Ú
forceCloseÚfillModeÚsvgr/   )r-   r.   r�   )r.   r-   r�   )Úreportlab.graphics.shapesrŠ   r!   rQ   rR   rT   ÚcurveTore   Úgetattrr   r   rU   r    ÚclipPath)r   r8   rŠ   ÚpdfPathÚ	drawFuncsr‹   r.   r-   ÚisClosedÚdPÚcPr�   r   r   r   rU   °   s(   
z_PDFRenderer.drawPathc                 C   ó   | j  |¡ d S r?   )r!   ÚsetStrokeColor©r   Úcr   r   r   r›   É   ó   z_PDFRenderer.setStrokeColorc                 C   rš   r?   )r!   ÚsetFillColorrœ   r   r   r   rŸ   Ì   rž   z_PDFRenderer.setFillColorc              
   C   s,  t jr	t| ¡ ƒn| ¡ D �]\}}|dkr.| j |d |d |d |d |d |d ¡ q|dkrC|d	u r:d| _qd| _|  |¡ q|d
krN| j |¡ q|dkrY| j 	|¡ q|dkrd| j 
|¡ q|dkr™|r“t|ttfƒr‰t|ƒdkr‰t|d ttfƒr‰|d }|d }nd}| j ||¡ q| j ¡  q|dkr®|d	u r¥d| _q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�r
| 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   rN   rL   é   é   é   ÚstrokeColorNÚstrokeWidthÚstrokeLineCapÚstrokeLineJoinÚstrokeDashArrayÚ	fillColor)rt   rs   rs   rt   ÚfillOpacityÚstrokeOpacityÚfillOverprintÚstrokeOverprintÚoverprintMaskr�   )r   Ú	invariantÚsortedÚitemsr!   r    r   r›   ÚsetLineWidthÚ
setLineCapÚsetLineJoinr   ÚlistÚtuplerO   ÚsetDashr   rŸ   ÚgetÚ	_fontnameÚ	_fontsizeÚsetFontÚsetFillAlphaÚsetStrokeAlphaÚsetFillOverprintÚsetStrokeOverprintÚsetOverprintMaskÚ	_fillMode)r   ÚdeltaÚnewStateÚkeyÚvalueÚphaseÚfontnameÚfontsizer   r   r   r%   Ï   sf   $ÿ,
€€

€Äz_PDFRenderer.applyStateChangesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   r6   r>   rE   rK   rZ   rk   rm   ro   r‰   rU   r›   rŸ   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 r?   )r   r3   r4   )r   r   r   r   r   r     s   
zGraphicsFlowable.__init__c                 C   s   t | j| jddƒ d S r   )r   r   Úcanvr   r   r   r   r     s   zGraphicsFlowable.drawN)rÉ   rÊ   rË   rÌ   r   r   r   r   r   r   rÎ     s    rÎ   rŒ   rN   c              
   C   s<  t | ƒ} dD ]}d| }t| || |td|  ¡ƒ||< qt|fi |¤Ž}|r5| tjd¡ | dd|¡ | 	|¡ |rO| 
| j| jf¡ t| |dd|d� n| tjd	¡ d
}	d}
|	| j }	t| |d|	|d� | ¡  | ¡  tjdkršt|dƒsœzddl}ddl}| |¡ dd¡ | |¡ W dS    Y dS dS 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ÚSizeÚinitialFontr…   é$   éP   éî  r   r   é   éä  rN   ÚmacÚwriteNÚCAROzPDF )r   r“   r'   r   r   r»   r   ÚdefaultGraphicsFontNamer‰   ÚsetTitleÚsetPageSizer3   r4   r   ÚshowPageÚsaveÚsysÚplatformr9   ÚmacfsÚ
macostoolsÚFSSpecÚSetCreatorTypeÚtouched)ÚdÚfnÚmsgr   ÚautoSizeÚ
canvasKwdsr   Úar�   r   rY   râ   rã   r   r   r   Ú
drawToFile  s6   "

ú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   ÚdrawToStringA  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rbtd|
 d ƒ}td|
 d ƒ}|	 ||f¡ qA| |d¡ d}d}|	D ]Y\}}|d us}J d| ƒ‚|dk r‡| ¡  d}|d }| |d¡ | d|d| ¡ | |d¡ |d }| d|¡}| |¡ | |¡ | ¡ }||j }t||d|ƒ |d }qo|dkrÑ| ¡  | ¡  |sÛ|dkråtdt|ƒ ƒ d S d S )Nr   )Ú_baseGFontNameÚ_baseGFontNameBI)ÚverbosezrenderPDF.pdfrÓ   rÔ   rÕ   zGraphics Test)Ú
testshapesé
   Ú
getDrawingztestshapes.z()z.__doc__rÖ   r×   rN   zDrawing %d has no docstring!i,  é   z
Drawing %dé   rL   zsaved %s)r‘   rò   ró   Úreportlab.rl_configrô   r:   r8   ÚisdirÚmkdirÚjoinr   r»   r‰   Úreportlab.graphicsrõ   ÚdirÚevalÚappendrÞ   r~   Ú	textLinesr€   ÚgetYr4   r   rß   Úprintr   )ÚoutDirÚshoutrò   ró   rô   r:   rè   r�   rõ   ÚdrawingsÚfuncnamer   Ú	docstringr   rY   ÚtextObjr   r   r   ÚtestM  sT   
€



ÿr  Ú__main__T)r  N)rñ   F) Ú__version__rÌ   r‘   Úreportlab.pdfgen.canvasr   Úreportlab.pdfbase.pdfmetricsr   Úreportlab.lib.utilsr   Ú	reportlabr   r   Úreportlab.graphics.renderbaser   r	   r
   r   r   Ú_unset_r   r   Úreportlab.platypusrÍ   rÎ   rí   rð   r  rÉ   rà   rO   ÚargvÚoutdirr   r   r   r   Ú<module>   s0    r
&
M
ù