o
    à’Ojµ;  ã                   @   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fdd„Zde
jdfdd„Zddd„Zedkr„edd� ddlZeejƒdkrze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
é    )Ú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	   )ÚdrawingÚcanvasÚxÚyr   ÚR© r   úb/var/www/html/pharmsmart-cdr-gen/venv/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   r0   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   r1   r2   )r   Úimager6   r   r   r   Ú	drawImageP   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   Ú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   rE   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Útailr6   Úir   r   r   ÚdrawPolyLinee   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-   )ÚannularrS   Ú	asPolygonÚcenterxÚcenteryÚradiusÚstartangledegreesÚendangledegreesÚ
_xtraRadiir   rO   rP   ÚarcToÚarcÚcloser   r   )r   Úwedger[   r\   r]   r^   r_   ÚyradiusÚradius1Úyradius1Úangler6   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 rD   )rF   r.   rG   r/   r   Úellipser   r   )r   rj   r?   rA   r@   rB   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 )NrJ   rK   r   rL   r*   )rM   rN   r   rO   rP   rQ   rR   rc   rS   r   r   )r   ÚpolygonrU   rV   r6   rW   r   r   r   ÚdrawPolygon�   s   

ýz_PDFRenderer.drawPolygonc                 C   s  t |ddƒ}|dv }|dv }| jr|s| jr}|r| j ¡ }|d |j|j|j|jf\}}}}	}
|dvro|d |d }}t	|	|||
ƒ}|d	krL||8 }n#|d
krW||d 8 }n|dkrg|t
||	||||
ƒ8 }ntdt|ƒ ƒ‚| jj|||	|pxd d� d S d S d S )NÚtextRenderModer   )r   rJ   é   é   )rL   rJ   é   rp   Ú
textAnchor)ÚstartÚ	inheritedÚfontNameÚfontSizeÚendÚmiddleg      à?Únumericzbad value for textAnchor )r5   )Úgetattrr   r   r!   ÚgetStater   r   ÚtextÚencodingr   ÚnumericXShiftÚ
ValueErrorÚstrr   Ú
drawString)r   Ú	stringObjrn   ÚneedFillÚ
needStrokeÚSÚtext_anchorr   r   r|   ÚencÚfontÚ	font_sizeÚtextLenr   r   r   r�   ž   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   rO   rP   rR   ÚcurveTorc   rz   r   r   rS   r   ÚclipPath)r   r6   r‹   ÚpdfPathÚ	drawFuncsrŒ   r,   r+   ÚisClosedÚdPÚcPr�   r   r   r   rS   ³   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   rL   rJ   é   ro   rq   ÚstrokeColorNÚstrokeWidthÚstrokeLineCapÚstrokeLineJoinÚstrokeDashArrayÚ	fillColor)rv   ru   ru   rv   ÚfillOpacityÚstrokeOpacityÚfillOverprintÚstrokeOverprintÚoverprintMaskr�   )r   Ú	invariantÚsortedÚitemsr   r    r   r›   ÚsetLineWidthÚ
setLineCapÚsetLineJoinr   ÚlistÚtuplerM   Ú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)   r4   r<   rC   rI   rX   ri   rk   rm   r�   rS   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   r1   r2   )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�   rL   c              
   K   sh  t | ƒ} dD ]}d| }t| || |td|  ¡ƒ||< q| dd¡}t|fi |¤Ž}	|r;|	 tjd¡ |	 dd|¡ |	 	|¡ |rU|	 
| j| jf¡ t| |	d	d	|d
� n|	 tjd¡ d}
d}|
| j }
t| |	d|
|d
� |r~d	dlm} ||d�|	jj_|	 ¡  |	 ¡  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ˆ   ÚmetadataPathNé$   éP   éî  r   r   é   éä  rL   )ÚXMP)r6   ÚmacÚwriteÚCAROzPDF )r	   rz   r%   r
   r   r¹   r   ÚdefaultGraphicsFontNamer�   ÚsetTitleÚsetPageSizer1   r2   r   Úreportlab.pdfbase.pdfdocr×   Ú_docÚCatalogÚMetadataÚshowPageÚsaveÚsysÚplatformr7   ÚmacfsÚ
macostoolsÚFSSpecÚSetCreatorTypeÚtouched)ÚdÚfnÚmsgr   ÚautoSizeÚkwdsr   ÚarÑ   r�   r   rW   r×   ræ   rç   r   r   r   Ú
drawToFile  s>   "

úrñ   c                 K   s(   t ƒ }t| |f|||dœ|¤Ž | ¡ S )z>Returns a PDF as a string in memory, without touching the disk)rí   r   rî   )r   rñ   Úgetvalue)rë   rí   r   rî   rï   Úsr   r   r   ÚdrawToStringH  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¡ 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 }qm|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é
   Ú
getDrawingrÊ   r�   rÕ   rÖ   rL   zDrawing %d has no docstring!i,  é   z
Drawing %dé   rJ   zsaved %s)r’   rö   r÷   Úreportlab.rl_configrø   r8   r6   ÚisdirÚmkdirÚjoinr   r¹   r�   Úreportlab.graphicsrù   Údirrz   Úappendrâ   Ú	beginTextÚ	textLinesÚdrawTextÚgetYr2   r   rã   ÚprintÚascii)ÚoutDirÚshoutrö   r÷   rø   r8   rì   r�   rù   ÚdrawingsÚfuncnameÚfuncr   Ú	docstringr   rW   ÚtextObjr   r   r   ÚtestT  sV   

€



ÿr  Ú__main__T)r  N)rõ   F)Ú__version__rÊ   Úior   r’   Úreportlab.pdfgen.canvasr   Úreportlab.pdfbase.pdfmetricsr   Ú	reportlabr   Úreportlab.graphics.renderbaser   r   r	   r
   Ú_unset_r   r   Úreportlab.platypusrË   rÌ   rñ   rô   r  rÇ   rä   rM   ÚargvÚoutdirr   r   r   r   Ú<module>   s0    t
*
4
ù