
    Q?h;                        S r SrSSKJr  SSK7  SSKJr  SSKJr  SSK	J
r
  SSKJrJrJrJr  \
R                   4S	 jr " S
 S\5      rSSKJr   " S S\5      rS\
R                   S4S jrS\
R                   S4S jrSS jr\S:X  a:  \" SS9  SSKr\" \R8                  5      S:  a  \R8                  S   rOSr\" \SS9  gg)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                 L    [        5       nUR                  [        U 5      XX4S9  g)z
As it saysshowBoundaryN)_PDFRendererdrawr
   )drawingcanvasxyr   Rs         N/var/www/html/env/lib/python3.13/site-packages/reportlab/graphics/renderPDF.pyr   r      s!    AFFw'AFQ    c                   r    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)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                      SU l         SU l        g Nr   )_stroke_fillselfs    r   __init___PDFRenderer.__init__%   s    
r   c                    [        U[        5      (       a  UR                  (       d  U R                  R	                  5         [        U5      nU R                  R                  U5        U R                  U0 5        U R                  U5        U R                  R                  5         [        U[        5      (       a  UR                  (       d  U R                  R                  5         gg)z=This 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   drawNode_PDFRenderer.drawNode)   s    
 4&&4??LL""$ t$6"vr* 	%4&&4??LL%%' ,;r   c           
         UR                   UR                  s=:X  a  S:X  a^  O  O[U R                  R                  UR                  UR
                  UR                  UR                  U R                  U R                  S9  g U R                  R                  UR                  UR
                  UR                  UR                  UR                   U R                  U R                  S9  g )Nr   strokefillr5   r4   )rxryr&   rectr   r   widthheightr   r   	roundRect)r   r9   s     r   drawRect_PDFRenderer.drawRect=   s    77dgg""LLFFDFFJJ<<	   LL""FFDFFJJTWW<<	 # r   c                 :   UR                   nU(       a  [        US5      (       d.  [        R                   R                  UR                   5      (       aH  U R                  R                  UUR                  UR                  UR                  UR                  5        g g g )Nmode)
pathhasattrosexistsr&   drawInlineImager   r   r:   r;   )r   imagerA   s      r   	drawImage_PDFRenderer.drawImageP   sg    zzWT&))RWW^^EJJ-G-GLL((GGUWWKK .H4r   c                     U R                   (       aG  U R                  R                  UR                  UR                  UR
                  UR                  5        g g N)r   r&   linex1y1x2y2)r   rK   s     r   drawLine_PDFRenderer.drawLineZ   s6    <<LLdggtwwA r   c                     U R                   R                  UR                  UR                  UR                  U R
                  U R                  S9  g Nr6   )r&   circlecxcyrr   r   )r   rT   s     r   
drawCircle_PDFRenderer.drawCircle^   s:    LLIIvyy&((<<   r   c                    U R                   (       a  [        UR                  5      S:  d   S5       eUR                  SS UR                  SS  p2U R                  R	                  5       nUR                  US   US   5        [        S[        U5      S5       H  nUR                  X5   X5S-      5        M     U R                  R                  U5        g g )N   #Polyline must have 2 or more pointsr      )	r   lenpointsr&   	beginPathmoveTorangelineTodrawPath)r   polylineheadtailrA   is         r   drawPolyLine_PDFRenderer.drawPolyLinee   s    <<x'1,S.SS,!1-xqr/B$<<))+DKKQa)1c$i+DGTA#Y/ ,LL!!$' r   c                    UR                   (       a   U R                  UR                  5       5        g UR                  UR                  UR
                  UR                  UR                  4u  p#pEnUR                  5       u  pxn	Uc  UnXe-
  n
U R                  R                  5       nUS:X  d  Uc8  U	S:X  d  U	c/  UR                  X#5        UR                  X$-
  X7-
  X$-   X7-   XZ5        O;UR                  X$-
  X7-
  X$-   X7-   XZ5        UR                  X(-
  X9-
  X(-   X9-   Xj* 5        UR                  5         U R                  R                  UU R                  U R                   S9  g )Nr   r6   )annularrd   	asPolygoncenterxcenteryradiusstartangledegreesendangledegrees
_xtraRadiir&   r`   ra   arcToarccloser   r   )r   wedgern   ro   rp   rq   rr   yradiusradius1yradius1anglerA   s               r   	drawWedge_PDFRenderer.drawWedgeo   s<   ==MM%//+, ]]EMM5<<9P9PRWRgRgg IGf).)9)9);&Gh&#5E<<))+D
goHaK8CSG-

7>7?GNGO(1 '.'/(1

7?G,<gowO_&0JJLLL!!$!ZZ#|| " r   c           	      ,   UR                   UR                  -
  nUR                   UR                  -   nUR                  UR                  -
  nUR                  UR                  -   nU R                  R                  X$X5U R                  U R                  S9  g rS   )rU   r7   rV   r8   r&   ellipser   r   )r   r   rL   rN   rM   rO   s         r   drawEllipse_PDFRenderer.drawEllipse   sm    ZZ'**$ZZ'**$ZZ'**$ZZ'**$R2djjMr   c                    [        UR                  5      S:  d   S5       eUR                  SS UR                  SS  p2U R                  R                  5       nUR	                  US   US   5        [        S[        U5      S5       H  nUR                  X5   X5S-      5        M     UR                  5         U R                  R                  UU R                  U R                  S9  g )Nr[   r\   r   r]   r3   )r^   r_   r&   r`   ra   rb   rc   rv   rd   r   r   )r   polygonrf   rg   rA   rh   s         r   drawPolygon_PDFRenderer.drawPolygon   s    7>>"a'N)NN'^^Aa('..*<d||%%'DGT!W%q#d)Q'AKKc+ (

 #'<<!% 	 	r   c           	      @   [        USS5      nUS;   nUS;   nU R                  (       a  U(       d  U R                  (       a  U(       a  U R                  R	                  5       nUS   UR
                  UR                  UR                  UR                  4u  pgpn
US;  a\  US   US   p[        XX5      nUS	:X  a  X}-  nO<US
:X  a  X}S-  -  nO.US:X  a  U[        XiXX5      -  nO[        S[        U5      -   5      eU R                  R                  XxX=(       d    S S9  g g g )NtextRenderModer   )r   r[         )r]   r[      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   _PDFRenderer.drawString   s    +;A>!Y.#y0
JJ8*&&(A+,\?IKK	T]TbTbdmdvdv+v(KAS"77"#J-:i%d)A%LA (*$A )+{YSSA$%@[AQ%QRRLL##A$5Kt#L ;Er   c                 J   SSK Jn  U R                  R                  5       nUR                  UR
                  UR                  UR                  4n[        USS5      nU R                  nU R                  nU" XU=(       a    US:H  S9nU R                  R                  n	UR                  (       a  U R                  R                  OU	n
[        USS 5      nUS:X  a-  U(       a  U(       a  U(       d  U
" X6SS	9  U	" X7SUS
9  g U
" X6X{S9  g US:X  a  U
" X6X{S9  g U(       d  SnU
" X6X{S9  g )Nr   )_renderPath	autoclose pdf)
forceClosefillModesvgr6   )r4   r5   r   )r5   r4   r   )reportlab.graphics.shapesr   r&   r`   ra   rc   curveTorv   r   r   r   rd   r%   clipPath)r   rA   r   pdfPath	drawFuncsr   r5   r4   isCloseddPcPr   s               r   rd   _PDFRenderer.drawPath   s    9,,((*^^W^^W__gmmT	DR0	zzt4;TIuDTU\\""&*ooT\\""24
40ex7a07HE7fHw&D w&Dr   c                 :    U R                   R                  U5        g rJ   )r&   setStrokeColorr   cs     r   r   _PDFRenderer.setStrokeColor   s    ##A&r   c                 :    U R                   R                  U5        g rJ   )r&   setFillColorr   s     r   r   _PDFRenderer.setFillColor   s    !!!$r   c           
      \   [         R                  (       a  [        UR                  5       5      OUR                  5        GH  u  p4US:X  a4  U R                  R                  US   US   US   US   US   US   5        M@  US:X  a&  Uc	  SU l        MR  SU l        U R                  U5        Ml  US
:X  a  U R                  R                  U5        M  US:X  a  U R                  R                  U5        M  US:X  a  U R                  R                  U5        M  US:X  a  U(       as  [        U[        [        45      (       a8  [        U5      S:X  a)  [        US   [        [        45      (       a  US   nUS   nOSnU R                  R                  XE5        GMU  U R                  R                  5         GMr  US:X  a(  Uc
  SU l        GM  SU l        U R#                  U5        GM  US;   aj  UR%                  SU R                  R&                  5      nUR%                  SU R                  R(                  5      nU R                  R+                  Xg5        GM  US:X  a$  Ub  U R                  R-                  U5        GM7  GM:  US:X  a$  Ub  U R                  R/                  U5        GMa  GMd  US:X  a  U R                  R1                  U5        GM  US:X  a  U R                  R3                  U5        GM  US:X  a  U R                  R5                  U5        GM  US:X  d  GM  X@R                  l        GM     g	)zXThis takes a set of states, and outputs the PDF operators
needed to set those properties	transformr   r]   r[      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tupler^   setDashr   r   get	_fontname	_fontsizesetFontsetFillAlphasetStrokeAlphasetFillOverprintsetStrokeOverprintsetOverprintMask	_fillMode)r   deltanewStatekeyvaluephasefontnamefontsizes           r   r*   _PDFRenderer.applyStateChanges   s    5>4G4G6%++-0U[[]ZJCk!&&uQxq58!&q58U1X?% =#$DL#$DL''.%))%0'''.((((/ ))!%e55#e*a-JW\]^W_afgk`lLmLm %a %a !LL((5LL((*# =!"DJ!"DJ%%e,00 !99Z1G1GH 99Z1G1GH$$X8m#$LL--e4 %o%$LL//6 %o%--e4''//6o%--e4j).&y [r   )r   r   N)__name__
__module____qualname____firstlineno____doc__r    r0   r=   rG   rP   rX   ri   r|   r   r   r   rd   r   r   r*   __static_attributes__ r   r   r   r       sV    :((&B(2NM*E2'%?/r   r   )Flowablec                   $    \ rS rSrSrS rS rSrg)GraphicsFlowablei  z'Flowable wrapper around a Pingo drawingc                 |    Xl         U R                   R                  U l        U R                   R                  U l        g rJ   )r   r:   r;   )r   r   s     r   r    GraphicsFlowable.__init__  s)    \\''
ll))r   c                 H    [        U R                  U R                  SS5        g r   )r   r   canvr   s    r   r   GraphicsFlowable.draw  s    T\\499a+r   )r   r;   r:   N)r   r   r   r   r   r    r   r   r   r   r   r   r     s    1*
,r   r   r   r]   c                    [        U 5      n S H0  nSU-   n[        XUR                  U[        SU-      5      5      XW'   M2     UR                  SS5      n[	        U40 UD6n	U(       a3  U	R                  [        R                  S5        U	R                  SSU5        U	R                  U5        U(       a4  U	R                  U R                  U R                  45        [        X	S	S	US
9  O=U	R                  [        R                  S5        Sn
SnXR                  -
  n
[        X	SXS
9  U(       a%  S	SKJn  U" US9U	R                   R"                  l        U	R'                  5         U	R)                  5         [*        R,                  S:X  aN  [/        US5      (       d<   S	SKnS	SKnUR5                  U5      R7                  SS5        UR9                  U5        ggg!    g= f)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        r]   )XMP)rA   macwriteCAROzPDF )r
   r   r,   r   r   r   r   defaultGraphicsFontNamer   setTitlesetPageSizer:   r;   r   reportlab.pdfbase.pdfdocr   _docCatalogMetadatashowPagesavesysplatformrB   macfs
macostoolsFSSpecSetCreatorTypetouched)dfnmsgr   autoSizekwdsr   ar   r   r   rh   r   r  r  s                  r   
drawToFiler    s}    	AA!O!dhhqq)ABC  88N40LrDA
			)33R8	Rc"JJsO	qww)*Q1al3 	
		)33R8LQ2q40"%<"8JJLFFH
||U72w#7#7	$LL++FF;r"	 $8
	s   :G Gc                 T    [        5       n[        X4XUS.UD6  UR                  5       $ )z>Returns a PDF as a string in memory, without touching the disk)r  r   r  )r   r  getvalue)r  r  r   r  r  ss         r   drawToStringr  H  s)    	AqRRTR::<r   pdfoutc                 @   SSK JnJn  SSKJn  SS KnUR                  R                  U 5      (       d  UR                  U 5        UR                  R                  U S5      n[        U5      nUR                  US5        UR                  SSS5        SS	KJn  / n	[        U5       H?  n
U
SS
 S:X  d  M  [!        X5      nU" 5       n[!        USS5      nU	R#                  X45        MA     UR                  US5        SnSnU	 H  u  pUc
   SU-  5       eUS:  a  UR%                  5         SnUS-
  nUR                  US5        UR                  SUSU-  5        UR                  US5        US-
  nUR'                  SU5      nUR)                  U5        UR+                  U5        UR-                  5       nXR.                  -
  n[1        XSU5        US-   nM     US:w  a  UR%                  5         UR3                  5         U(       d  US:  a  [5        S[7        U5      -  5        g g )Nr   )_baseGFontName_baseGFontNameBI)verbosezrenderPDF.pdfr   r   r   zGraphics Test)
testshapes
   
getDrawingr   r   r   r   r]   zDrawing %d has no docstring!i,     z
Drawing %d   r[   zsaved %s)r   r!  r"  reportlab.rl_configr#  rC   rA   isdirmkdirjoinr   r   r   reportlab.graphicsr$  dirr   appendr  	beginText	textLinesdrawTextgetYr;   r   r  printascii)outDirshoutr!  r"  r#  rC   r  r   r$  drawingsfuncnamefuncr   	docstringr   rh   textObjs                    r   testr=  T  s   J+77==  
	f_	-Br
AIInb!LLS/* .H
OAb>\):/DfGYr2IOOW01 $ IInb!A	A (%J(F(JJ%s7JJLAF			"2&	RL1,-			.$F++b!$)$	

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