
    Kwg4;                        d Z dZddlmZ ddl 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	Z G d
 de      ZddlmZ  G d de      Zde
j                   di fdZde
j                   di fdZddZedk(  r? ed       ddlZ eej8                        dkD  rej8                  d   ZndZ eed       yy)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                 V    t               }|j                  t        |       ||||       y)z
As it saysshowBoundaryN)_PDFRendererdrawr
   )drawingcanvasxyr   Rs         S/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/graphics/renderPDF.pyr   r      s%    AFFw'ALFQ    c                   j    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zy)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                      d| _         d| _        y Nr   )_stroke_fillselfs    r   __init__z_PDFRenderer.__init__%   s    
r   c                    t        |t              r|j                  s| j                  j	                          t        |      }| j                  j                  |       | j                  |i        | j                  |       | j                  j                          t        |t              r|j                  s| j                  j                          yy)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deltass      r   drawNodez_PDFRenderer.drawNode)   s    
 4&4??LL""$ t$6"vr* 	%4&4??LL%%' ,;r   c           	         |j                   |j                  cxk(  rdk(  ran n^| j                  j                  |j                  |j
                  |j                  |j                  | j                  | j                         y | j                  j                  |j                  |j
                  |j                  |j                  |j                   | j                  | j                         y )Nr   strokefillr2   r1   )rxryr$   rectr   r   widthheightr   r   	roundRect)r   r6   s     r   drawRectz_PDFRenderer.drawRect=   s    77dgg""LLFFDFFJJ<<	   LL""FFDFFJJTWW<<	 # r   c                    |j                   }|r~t        |d      s)t        j                   j                  |j                         rH| j                  j                  ||j                  |j                  |j                  |j                         y y y )Nmode)
pathhasattrosexistsr$   drawInlineImager   r   r7   r8   )r   imager=   s      r   	drawImagez_PDFRenderer.drawImageP   sa    zzWT&)RWW^^EJJ-GLL((GGUWWKK .H4r   c                     | j                   rG| j                  j                  |j                  |j                  |j
                  |j                         y y N)r   r$   linex1y1x2y2)r   rF   s     r   drawLinez_PDFRenderer.drawLineZ   s6    <<LLdggtwwA r   c                     | j                   j                  |j                  |j                  |j                  | j
                  | j                         y Nr3   )r$   circlecxcyrr   r   )r   rN   s     r   
drawCirclez_PDFRenderer.drawCircle^   s:    LLIIvyy&((<<   r   c                    | j                   rt        |j                        dk\  sJ d       |j                  dd |j                  dd  }}| j                  j	                         }|j                  |d   |d          t        dt        |      d      D ]  }|j                  ||   ||dz              | j                  j                  |       y y )N   #Polyline must have 2 or more pointsr      )	r   lenpointsr$   	beginPathmoveTorangelineTodrawPath)r   polylineheadtailr=   is         r   drawPolyLinez_PDFRenderer.drawPolyLinee   s    <<x'1,S.SS,!1-xqr/B$D<<))+DKKQa)1c$i+ 0DGT!A#Y/0LL!!$' r   c                    |j                   r | j                  |j                                y |j                  |j                  |j
                  |j                  |j                  f\  }}}}}|j                         \  }}}	||}||z
  }
| j                  j                         }|dk(  s|<|	dk(  s|	5|j                  ||       |j                  ||z
  ||z
  ||z   ||z   ||
       nE|j                  ||z
  ||z
  ||z   ||z   ||
       |j                  ||z
  ||	z
  ||z   ||	z   ||
        |j                          | j                  j                  || j                  | j                          y )Nr   r3   )annularr]   	asPolygoncenterxcenteryradiusstartangledegreesendangledegrees
_xtraRadiir$   rY   rZ   arcToarccloser   r   )r   wedgerf   rg   rh   ri   rj   yradiusradius1yradius1angler=   s               r   	drawWedgez_PDFRenderer.drawWedgeo   si   ==MM%//+, ]]EMM5<<9P9PRWRgRgg IGWf&7).)9)9);&GWh&#$55E<<))+D
goHaK8CSGW-

76>77?GFNGT[O(%1 '&.'RY/(%1

77?GH,<ggowW_O_&0JJLLL!!$!ZZ#|| " r   c                 6   |j                   |j                  z
  }|j                   |j                  z   }|j                  |j                  z
  }|j                  |j                  z   }| j                  j                  ||||| j                  | j                         y rM   )rO   r4   rP   r5   r$   ellipser   r   )r   rv   rG   rI   rH   rJ   s         r   drawEllipsez_PDFRenderer.drawEllipse   sq    ZZ'**$ZZ'**$ZZ'**$ZZ'**$R2bdjjMr   c                    t        |j                        dk\  sJ d       |j                  dd |j                  dd  }}| j                  j                         }|j	                  |d   |d          t        dt        |      d      D ]  }|j                  ||   ||dz              |j                          | j                  j                  || j                  | j                         y )NrT   rU   r   rV   r0   )rW   rX   r$   rY   rZ   r[   r\   rn   r]   r   r   )r   polygonr_   r`   r=   ra   s         r   drawPolygonz_PDFRenderer.drawPolygon   s    7>>"a'N)NN'^^Aa('..*<d||%%'DGT!W%q#d)Q' 	,AKKQac+	,

 #'<<!% 	 	r   c           	         t        |dd      }|dv }|dv }| j                  r|s| j                  r|r| j                  j	                         }|d   |j
                  |j                  |j                  |j                  f\  }}}}	}
|dvra|d   |d   }}t        |	|||
      }|d	k(  r||z  }n>|d
k(  r	||dz  z  }n0|dk(  r|t        ||	||||
      z  }nt        dt        |      z         | j                  j                  |||	|xs d        y y y )NtextRenderModer   )r   rT         )rV   rT      r~   
textAnchor)start	inheritedfontNamefontSizeendmiddleg      ?numericzbad value for textAnchor )r<   )getattrr   r   r&   getStater   r   textencodingr   numericXShift
ValueErrorstrr$   
drawString)r   	stringObjr|   needFill
needStrokeStext_anchorr   r   r   encfont	font_sizetextLens                 r   r   z_PDFRenderer.drawString   s-    +;A>!Y.#y0
JJ8*&&(A+,\?IKK	T]TbTbdmdvdv+v(KAtS"77"#J-:i%dD)SA%LA (*$A )+{4YsSSA$%@[AQ%QRRLL##Aq$^5Kt#L ;Er   c                 @   ddl m} | j                  j                         }|j                  |j
                  |j                  |j                  f}t        |dd      }| j                  }| j                  } ||||xr |dk(        }| j                  j                  }	|j                  r| j                  j                  n|	}
t        |dd       }|dk(  r+|r|r|s |
||d	        |	||d|
       y  |
||||       y |dk(  r |
||||       y |sd} |
||||       y )Nr   )_renderPath	autoclose pdf)
forceClosefillModesvgr3   )r1   r2   r   )r2   r1   r   )reportlab.graphics.shapesr   r$   rY   rZ   r\   curveTorn   r   r   r   r]   r#   clipPath)r   r=   r   pdfPath	drawFuncsr   r2   r1   isCloseddPcPr   s               r   r]   z_PDFRenderer.drawPath   s   9,,((*^^W^^W__gmmT	DR0	zztY4;TIuDTU\\""&*ooT\\""24
40ex7a076HE7fxHwT&8D wT&8Dr   c                 :    | j                   j                  |       y rE   )r$   setStrokeColorr   cs     r   r   z_PDFRenderer.setStrokeColor   s    ##A&r   c                 :    | j                   j                  |       y rE   )r$   setFillColorr   s     r   r   z_PDFRenderer.setFillColor   s    !!!$r   c           
         t         j                  rt        |j                               n|j                         D ]  \  }}|dk(  r3| j                  j                  |d   |d   |d   |d   |d   |d          ?|dk(  r#|d| _        Nd| _        | j                  |       g|d
k(  r| j                  j                  |       |dk(  r| j                  j                  |       |dk(  r| j                  j                  |       |dk(  r|rht        |t        t        f      r2t        |      dk(  r$t        |d   t        t        f      r|d   }|d   }nd}| j                  j                  ||       9| j                  j                          U|dk(  r%|	d| _        ed| _        | j#                  |       |dv rj|j%                  d| j                  j&                        }|j%                  d| j                  j(                        }| j                  j+                  ||       |dk(  r!|| j                  j-                  |       |dk(  r!|| j                  j/                  |       9|dk(  r| j                  j1                  |       [|dk(  r| j                  j3                  |       }|dk(  r| j                  j5                  |       |dk(  s|| j                  _         y	)z`This takes a set of states, and outputs the PDF operators
        needed to set those properties	transformr   rV   rT      r}   r   strokeColorNstrokeWidthstrokeLineCapstrokeLineJoinstrokeDashArray	fillColor)r   r   r   r   fillOpacitystrokeOpacityfillOverprintstrokeOverprintoverprintMaskr   )r   	invariantsorteditemsr$   r   r   r   setLineWidth
setLineCapsetLineJoinr!   listtuplerW   setDashr   r   get	_fontname	_fontsizesetFontsetFillAlphasetStrokeAlphasetFillOverprintsetStrokeOverprintsetOverprintMask	_fillMode)r   deltanewStatekeyvaluephasefontnamefontsizes           r   r(   z_PDFRenderer.applyStateChanges   s    5>4G4G6%++-0U[[] <	/JCk!&&uQxq58!&q58U1X?% =#$DL#$DL''.%))%0'''.((((/ ))!%e5#e*a-JW\]^W_afgk`lLm %a %a !LL((u5LL((*# =!"DJ!"DJ%%e,00 !99Z1G1GH 99Z1G1GH$$Xx8m#$LL--e4o%$LL//6o%--e4''//6o%--e4j).&y<	/r   N)__name__
__module____qualname____doc__r   r.   r:   rC   rK   rR   rb   rt   rw   rz   r   r]   r   r   r(    r   r   r   r       sV    :((&B(2NM*E2'%?/r   r   )Flowablec                       e Zd ZdZd Zd Zy)GraphicsFlowablez'Flowable wrapper around a Pingo drawingc                 ~    || _         | j                   j                  | _        | j                   j                  | _        y rE   )r   r7   r8   )r   r   s     r   r   zGraphicsFlowable.__init__  s+    \\''
ll))r   c                 H    t        | j                  | j                  dd       y r   )r   r   canvr   s    r   r   zGraphicsFlowable.draw  s    T\\499a+r   N)r   r   r   r   r   r   r   r   r   r   r     s    1*
,r   r   r   rV   c                 *   t        |       } dD ]1  }d|z   }t        | ||j                  |t        d|z                  ||<   3 t	        |fi |}|r3|j                  t        j                  d       |j                  dd|       |j                  |       |r8|j                  | j                  | j                  f       t        | |dd|       nC|j                  t        j                  d	       d
}	d}
|	| j                  z
  }	t        | |d|	|       |j                          |j                          t         j"                  dk(  rIt%        |d      s<	 ddl}ddl}|j+                  |      j-                  dd       |j/                  |       yyy#  Y yxY w)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   $   P     r   r        rV   macwriteNCAROzPDF )r
   r   r*   r   r   r   r   defaultGraphicsFontNamer   setTitlesetPageSizer7   r8   r   showPagesavesysplatformr>   macfs
macostoolsFSSpecSetCreatorTypetouched)dfnmsgr   autoSize
canvasKwdsr   ar   r   ra   r   r   s                r   
drawToFiler     sb    	AA P!O!JNN1^F1H5M$NO
1P 	rJA
			)33R8	Rc"JJsO	qww)*Q1al3 	
		)33R8LQ2q|4JJLFFH
||U72w#7	$LL++FF;r"	 $8
	s   :F Fc                 X    t               }t        | |||||       |j                         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   ss         r   drawToStringr  D  s(    	Aq!<V`a::<r   pdfoutc                 "   ddl m}m} ddlm} dd l}|j                  j                  |       s|j                  |        |j                  j                  | d      }t        |      }|j                  |d       |j                  ddd       dd	lm} g }	t        |      D ]>  }
|
dd
 dk(  st!        ||
      } |       }t!        |dd      }|	j#                  ||f       @ |j                  |d       d}d}|	D ]  \  }}|
J d|z         |dk  r|j%                          d}|dz
  }|j                  |d       |j                  d|d|z         |j                  |d       |dz
  }|j'                  d|      }|j)                  |       |j+                  |       |j-                         }||j.                  z
  }t1        ||d|       |dz   } |dk7  r|j%                          |j3                          |s|dkD  rt5        dt7        |      z         y y )Nr   )_baseGFontName_baseGFontNameBI)verbosezrenderPDF.pdfr   r   r   zGraphics Test)
testshapes
   
getDrawingr   r   r   r   rV   zDrawing %d has no docstring!i,     z
Drawing %d   rT   zsaved %s)r   r  r  reportlab.rl_configr	  r?   r=   isdirmkdirjoinr   r   r   reportlab.graphicsr
  dirr   appendr   	beginText	textLinesdrawTextgetYr8   r   r   printascii)outDirshoutr  r  r	  r?   r   r   r
  drawingsfuncnamefuncr   	docstringr   ra   textObjs                    r   testr#  P  s   J+77== 
	f_	-Br
AIInb!LLS/* .H
O 2Ab>\):h/DfGYr2IOOWi012 IInb!A	A ( )%J(F(JJ%s7JJLAF			"2&	RL1,-			.$F++b!$)$	

7LLNWaQE#$ 	#vqzz|FFH	j59$% 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   rW   argvoutdirr   r   r   <module>r/     s    		  ' * 4  f f .7->-> R
q/8 q/f (,x , 9+<+<qUW $L ):):AQS 2&h Zt
388}Q!d r   