o
    vh;                     @   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re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.0zRender 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   Z/var/www/html/hyperkenya/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   zThis 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|rt|ttfrt|dkrt|d ttfr|d }|d }nd}| j|| q| j  q|dkr|d	u rd| _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rt|dszd	dl}d	dl}||dd || W dS    Y dS dS dS )zMakes 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rt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
