
    KwgG                     &   d Z dZddlZ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 dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZ ddlmZ ddlmZmZ  edede      Z G d de      Zd Z G d de      Z G d de      Z  G d de      Z! G d de!      Z" G d de!      Z#	 dd l$m%Z%m&Z&m'Z'm(Z( d!Z)e)r7 G d" d#      Z+ G d$ d%e!e+      Z, G d& d'e,      Z- G d( d)e!      Z. G d* d+e.      Z/d, Z0d- Z1e2d.k(  r e1        yy# e*$ r dZ)Y Vw xY w)/z@This includes some demos of platypus for use in the API proposalz3.3.0    N)colors)Canvas)ParagraphStyle)recursiveImportstrTypes)Frame)Flowable)	Paragraph)inch)TA_LEFTTA_RIGHT	TA_CENTER)isColor)toColor)_baseFontName_baseFontNameICaption
   )fontNamefontSize	alignmentc                   j    e Zd Zdedd ed      ddddddddfdZd	 Zd
 Zd Zd Z	d Z
d Zd Zd Zy)Figure    NblackcentrebottomCENTERc                 J   t        j                  |        || _        || _        || _        || _        || _        || _        || _        |xs d|z  | _	        || _
        || _        d | _        d| _        || _        |	| _        |
| _        || _        || _        | j'                          y )N      ?r   )r	   __init__widthfigureHeightcaptioncaptionFontcaptionSizecaptionTextColorcaptionBackColor
captionGapcaptionAligncaptionPosition_captionDatacaptionHeight
backgroundborderspaceBefore
spaceAfterhAlign_getCaptionPara)selfr#   heightr%   r&   r'   r/   r(   r)   r0   r1   r2   r*   r+   r,   r3   s                   Q/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/platypus/figures.pyr"   zFigure.__init__   s     	$
"&& 0 0$7K(. $&$    c                 <   | j                   }| j                  }| j                  }| j                  }| j                  }| j
                  }| j                  }| j                  |||||||fk7  r|||||||f| _        t        |t              r|| _
        y t        |t              ret        d||d|z  ||| j                  |dk(  rt        n|dk(  rt        nt               | _        t        | j                   | j"                        | _
        y t%        dt'        |      z        y )Nr   g333333?leftright)r   r   leading	textColor	backColorr1   r   z6Figure caption of type %r is not a string or Paragraph)r%   r&   r'   r(   r)   r+   r,   r-   
isinstancer
   captionParar   r   r*   r   r   r   captionStyle
ValueErrortype)r5   r%   r&   r'   r(   r)   r+   r,   s           r7   r4   zFigure._getCaptionPara:   s$   ,,&&&&0000((..w{;?OP`amn}~~!([AQRbcop  !AD'),#* GH-$2((O 0 0 $)5v)=g|]dOd8js
%! $-T\\4;L;L#M  !Y\`ah\i!ijj' r8   c                 D   | j                   r| j                          | j                  j                  | j                  || j
                  z
        \  }}|| j                  z   | _        | j                  | j
                  z   | _        || j                  kD  r|| _        n| j
                  | _        | j                  ddt        fv rd|| j                  z
  z  | _        n0| j                  dt        fv r|| j                  z
  | _        nd| _        | j                  | j                  fS )Nr   CENTREr!   RIGHTr   )r%   r4   r@   wrapr#   r$   r*   r.   r6   r3   r   dxr   )r5   
availWidthavailHeightwhs        r7   rG   zFigure.wrapW   s    <<  "##(([4CTCT5TUDAq!"T__!4D,,t/@/@@DK|!TZ++DK;;8HY77Z$**45DG[[WX.. 4::-DGDG

DKK((r8   c                    | j                   j                  | j                  d       | j                  r5| j                  dk(  r&| j                   j                  d| j
                         | j                  r| j                          | j                  r| j                          | j                   j                          | j                          | j                   j                          | j                  r| j                  dk(  r(| j                   j                  d| j
                          n3| j                   j                  d| j                  | j                  z          | j                          | j!                          y y )Nr   r   )canv	translaterH   r%   r,   r.   r/   drawBackgroundr0   
drawBorder	saveState
drawFigurerestoreStater$   r*   r4   drawCaptionr5   s    r7   drawzFigure.drawi   s   		DGGQ'<<D00(:II4#5#56??!;;OO				 <<##X-		##A(:(:':;		##At'8'8'HI  " r8   c                 ~    | j                   j                  | j                  dd| j                  | j                         y Nr   )rN   drawBoundaryr0   r#   r$   rV   s    r7   rQ   zFigure.drawBorder|   s*    		t{{1Qtzz4;L;LMr8   c                    | j                   j                          | j                   j                  | j                         | j                   j	                  dd| j
                  | j                  d       | j                   j                          y )Nr      )fill)rN   rR   setFillColorr/   rectr#   r$   rT   )r5   colors     r7   _doBackgroundzFigure._doBackground   s\    				t/		q!TZZ):):C		 r8   c                     t        | j                        r| j                  | j                         y	 t        | j                        }| j                  |       y#  Y yxY w)zFor use when using a figure on a differently coloured background.
        Allows you to specify a colour to be used as a background for the figure.N)r   r/   ra   r   )r5   cs     r7   rP   zFigure.drawBackground   sM     4??#t/DOO,""1%s   &A Ac                 R    | j                   j                  | j                  dd       y rY   )r@   drawOnrN   rV   s    r7   rU   zFigure.drawCaption   s    		1a0r8   c                      y N rV   s    r7   rS   zFigure.drawFigure       r8   )__name__
__module____qualname__r   r   r"   r4   rG   rW   rQ   ra   rP   rU   rS   rh   r8   r7   r   r      s]    .0+ ")'"2"& &!) Bk:)$&N!
1r8   r   c                 P   | j                         }d|z  }| j                  ddd       | j                  ||z   ||z
  ||dd       | j                  ddd       | j                  d       | j                  ||||dd       | j                  ddd       | j	                  ddd       y )Ng?r!   r   r\   )stroker]   g?)	beginPathsetFillColorRGBr_   setLineWidthsetStrokeColorRGB)canvasxyr#   r6   pthcorners          r7   drawPagerx      s    



C%ZF 3s3'
KKF
AJvaaKH 1Qs#

KK1eVAAK6 1Qq!
Qq#r8   c                   $    e Zd ZdZddZd Zd Zy)
PageFigurezcShows a blank page in a frame, and draws on that.  Used in
    illustrations of how PLATYPUS works.Nc                     t         j                  | dt        z  dt        z         d| _        t        | _        || _        y )N   zFigure 1 - a blank page)r   r"   r   r%   rA   r/   )r5   r/   s     r7   r"   zPageFigure.__init__   s0    afaf-0($r8   c                      y rg   rh   rV   s    r7   drawVirtualPagezPageFigure.drawVirtualPage   ri   r8   c                    t        | j                  dt        z  dt        z  dt        z  dt        z         | j                  j                  dt        z  dt        z         | j                  j	                  dd       | j                          y )Ng      ?g      ?g      ?g      @gm?g	Q_?)rx   rN   r   rO   scaler~   rV   s    r7   rS   zPageFigure.drawFigure   s`    E$JT	49c$hG		E$JT	2			9-r8   rg   )rj   rk   rl   __doc__r"   r~   rS   rh   r8   r7   rz   rz      s    ,%r8   rz   c                       e Zd ZdZd Zd Zy)PlatPropFigure1z$This shows a page with a frame on itc                 <    t         j                  |        d| _        y )Nz%Figure 1 - a page with a simple frame)rz   r"   r%   rV   s    r7   r"   zPlatPropFigure1.__init__   s    D!>r8   c                 .    t        | j                         y rg   )demo1rN   rV   s    r7   r~   zPlatPropFigure1.drawVirtualPage   s    diir8   N)rj   rk   rl   r   r"   r~   rh   r8   r7   r   r      s    .?r8   r   c                   Z    e Zd ZdZdddej
                  ddddddd	dd
dfdZd Zd Zd Z	y)
FlexFigurezHBase for a figure class with a caption. Can grow or shrink in proportionNzHelvetica-Oblique   r\   r   	   r   topr   c                     t         j                  | |||||d ||
||||||       || _        |	| _        || _        d | _        || _        y )N)r&   r'   r/   r(   r1   r2   r*   r+   r,   r3   r0   )r   r"   shrinkToFit	growToFitscaleFactor_scaleFactorr/   )r5   r#   r6   r%   r/   r&   r'   r(   r   r   r1   r2   r*   r+   r,   r   r3   r0   s                     r7   r"   zFlexFigure.__init__   sf     	eVW$/$/#')9&1%/#-%1(7%% 	 	 '"& $r8   c                    | j                   | j                  |kD  s| j                  |kD  r-t        j	                  | ||      \  }}|| j
                  z
  }| j                  /t        || j                  z  ||z
  | j
                  z        | _         n| j                  | _         | j                   dk  rL| j                  r@| j                  | j                   z  dz
  | _        | j
                  | j                   z  | _        y| j                   dkD  rM| j                  r@| j                  | j                   z  dz
  | _        | j
                  | j                   z  | _        yyyy)z4Rescale to fit according to the rules, but only onceNr\   g-C6?)
r   r#   r6   r   rG   r$   r   minr   r   )r5   rI   rJ   rK   rL   r.   s         r7   _scalezFlexFigure._scale   s.   $

:(=[AX;;tZ=DAq 1 11M'$'
4::(={=?XZ^ZkZk>k$l!$($4$4!  "t'7'7!ZZ$*;*;;fD
$($5$58I8I$I!""1$!ZZ(9(99FB
$($5$58I8I$I! *8$ BYr8   c                 T    | j                  ||       t        j                  | ||      S rg   )r   r   rG   r5   rI   rJ   s      r7   rG   zFlexFigure.wrap   s#    J{+{{4[99r8   c                 T    | j                  ||       t        j                  | ||      S rg   )r   r   splitr   s      r7   r   zFlexFigure.split   s#    J{+||D*k::r8   )
rj   rk   rl   r   r   r   r"   r   rG   r   rh   r8   r7   r   r      sH    R:>$7A)/$%"#$&#%#$%-(-$(' %BJ":;r8   r   c                       e Zd ZdZddZd Zy)ImageFigurezImage with a caption below itNc           
          t         j                  j                  |      s
J d|z         ddlm}  ||      j                         \  }}	|| _        t        j                  | ||	|||||       y )Nzimage file %s not foundr   )ImageReader)r   r3   r0   )	ospathisfilereportlab.lib.utilsr   getSizefilenamer   r"   )
r5   r   r%   r/   r   r3   r0   r   rK   rL   s
             r7   r"   zImageFigure.__init__  se    ww~~h'M)BX)MM'38$,,.1 D!Q[aiopr8   c                 ~    | j                   j                  | j                  dd| j                  | j                         y rY   )rN   	drawImager   r#   r$   rV   s    r7   rS   zImageFigure.drawFigure  s.    		DMM"#Qtzz43D3D	Fr8   )NNr   Nrj   rk   rl   r   r"   rS   rh   r8   r7   r   r      s    'qFr8   r   c                       e Zd ZdZddZd Zy)DrawingFigurez8Drawing with a caption below it.  Clunky, scaling fails.Nc                     t        ||      }t        ||      } |       | _        t        j	                  | | j                  j
                  | j                  j                  ||       d| _        y )Nr\   )r   getattrdrawingr   r"   r#   r6   r   )r5   
modulename	classnamer%   baseDirr/   moduleklasss           r7   r"   zDrawingFigure.__init__  s\     W5	*wD LL.. LL//#&		(
 r8   c                     | j                   j                  | j                  | j                         | j                  j	                  | j                   dd       y rY   )rN   r   r   r   re   rV   s    r7   rS   zDrawingFigure.drawFigure  s:    		))4+<+<=DIIq!,r8   NNr   rh   r8   r7   r   r     s    B	-r8   r   )restoreForms
storeFormsstoreFormsInMemoryrestoreFormsInMemoryr\   c                   "    e Zd ZdZd Zd Zd Zy)PageCatcherCachingMixInz+Helper functions to cache pages for figuresc                     t         j                  j                  |      \  }}t         j                  j                  |      \  }}d||fz  S )Nz	%s_page%d)r   r   r   splitext)r5   pdfFileNamepageNodirnamer   rootexts          r7   getFormNamez#PageCatcherCachingMixIn.getFormName,  s@     "k :GX((2ID#$//r8   c                     | j                  ||      }t        j                  j                  |dz         r8t        j                  |dz         d   }t        j                  |      d   }||kD  S y)z&returns 1 if no forms or form is older.frmr   r\   )r   r   r   existsstat)r5   r   r   formNameformModTime
pdfModTimes         r7   needsProcessingz'PageCatcherCachingMixIn.needsProcessing2  sb    ''V<Hww~~h/0 ggh&78;WW[1!4
"[01r8   c                 \    | j                  ||      }t        ||dz   |dz   |g       |dz   S )Nr   _)prefixpagenumbers)r   r   )r5   r   r   r   s       r7   
processPDFz"PageCatcherCachingMixIn.processPDF<  s>    ''V<H{Hv$5,4sN17: f$$r8   N)rj   rk   rl   r   r   r   r   rh   r8   r7   r   r   )  s    5	0		%r8   r   c                       e Zd ZdZddZd Zy)cachePageCatcherFigureNonA4?PageCatcher page with a caption below it.  Size to be supplied.Nc                 X   t         j                  j                  |      \  | _        | _        | j                  dk(  rt         j
                  | _        || _        | j                  | j                  | j                        dz   t        |      z   | _	        t        j                  | ||||       y )Nr   r   )r   r   r   r   r   curdirr   r   strr   r   r"   r5   r   r   r%   r#   r6   r/   s          r7   r"   z$cachePageCatcherFigureNonA4.__init__H  s~    *,''--*A'DL$-||r!!yy DK ,,T]]DKKH3NQTU[Q\\DMeVWjIr8   c                    | j                   j                          | j                   j                  | j                        s| j                  t
        j                  z   | j                  z   }| j                  || j                        dz   }| j                  || j                        r| j                  || j                         t        || j                         }| j                   j                  | j                  | j                         | j                   j                  | j                         | j                   j!                          y )Nr   )rN   rR   hasFormr   r   r   sepr   r   r   r   r   r   r   r   doFormrT   )r5   restorePathformFileNamenamess       r7   rS   z&cachePageCatcherFigureNonA4.drawFigureP  s    II!99$$T]]3"llRVV3dmmC#//T[[IFR''T[[AOOK=$\499=IIOOD--t/@/@AIIT]]+II""$r8   rg   r   rh   r8   r7   r   r   D  s    M	J	%r8   r   c                       e Zd ZdZddZy)cachePageCatcherFigurePageCatcher page with a caption below it.  Presumes A4, Portrait.
        This needs our commercial PageCatcher product, or you'll get a blank.Nc           	      <    t         j                  | ||||||       y )N)r/   )r   r"   r   s          r7   r"   zcachePageCatcherFigure.__init__a  s"    '00xRWY_lv0wr8   )S  J  Nrj   rk   rl   r   r"   rh   r8   r7   r   r   ^  s    	Q	xr8   r   c                   "    e Zd ZdZi ZddZd Zy)PageCatcherFigureNonA4r   Nc                    |x}| _         || _        |j                  t        j                  d      j                  dd      j                  dd      j                  dd      j                  dd      }|j                  dd      dz   t        |      z   dz   | _        | j                  t        |      z   | _        || _        t        j                  | ||||       y )Nr   /\-:.)r   r   replacer   r   r   r   r   cachingr   r"   )	r5   r   r   r%   r#   r6   r/   r   fns	            r7   r"   zPageCatcherFigureNonA4.__init__i  s    !))B DKBFF3'//C8@@cJRRSVWZ[ccdghklB**S-c1#f+=cADK KK#f+5DM"DLeVWjIr8   c                    | j                   j                  | j                        s| j                  | j                  v r| j                  | j                     \  }}nt        | j                  d      }|j                         }|j                          t        || j                  g| j                        \  }}| j                  dk(  r||f| j                  | j                  <   t        || j                         }| j                   j                          | j                   j                  | j                  | j                         | j                   j!                  | j                         | j                   j#                          y )Nrb)r   r   memory)rN   r   r   r   _cacheopenreadcloser   r   r   r   r   rR   r   r   r   rT   )r5   fdatapdfs       r7   rS   z!PageCatcherFigureNonA4.drawFigurer  s   99$$T]]3==DKK/![[7FAdT]]40A&&(CGGI04;;-X\XcXcdGAt||X-56WDMM2(tyy9II!IIOOD--t/@/@AIIT]]+II""$r8   r   )rj   rk   rl   r   r   r"   rS   rh   r8   r7   r   r   d  s    M 	J	%r8   r   c                       e Zd ZdZddZy)PageCatcherFigurer   Nc           
      >    t         j                  | |||||||       y )N)r/   r   )r   r"   )r5   r   r   r%   r#   r6   r/   r   s           r7   r"   zPageCatcherFigure.__init__  s+    "++D(FGUTZgq  |C+  Dr8   )r   r   NNr   rh   r8   r7   r   r     s    	Q	Dr8   r   c                     t        dt        z  dt        z  dt        z  dt        z  d      }t        dt        ddd	
      }t	        d|      }t	        d|      }||g}|j                  ||        y )N         r\   showBoundaryBody         )r   r   r<   r1   ziSpam spam spam spam. Spam spam spam spam. Spam spam spam spam. Spam spam spam spam. Spam spam spam spam. zPEggs eggs eggs. Eggs eggs eggs. Eggs eggs eggs. Eggs eggs eggs. Eggs eggs eggs. )r   r   r   r   r
   addFromList)rs   frame	bodyStylepara1para2mydatas         r7   r   r     sv    dFdFdFdF#$E vTVdefI19=E,i8EU^F 
fV$r8   c                      t        d      } t        t        t        dt        z  dt        z  d      }t               }t	        d      |_        t	        d      |_        |j                  |g|        | j                          y )Nzfigures.pdfr  r   r\   r   bluelightyellow)	r   r   r   r   r   r(   r)   r  save)rc   r   vs      r7   test1r    s`    		AdD!D&!D&q9AA A /AMM1#aFFHr8   __main__)3r   __version__r   reportlab.libr   reportlab.pdfgen.canvasr   reportlab.lib.stylesr   r   r   r   reportlab.platypusr   r	   r
   reportlab.lib.unitsr   reportlab.lib.enumsr   r   r   reportlab.lib.validatorsr   reportlab.lib.colorsr   r   r   rA   r   rx   rz   r   r   r   r   rlextra.pageCatcher.pageCatcherr   r   r   r   _hasPageCatcherImportErrorr   r   r   r   r   r   r  rj   rh   r8   r7   <module>r     s+   G 	   * / 9 $ ' ( $ < < , ( >i.2Ybc}X }~$$ $j :; :;xF* F-J -"rrO % %6%j2I %4x!< x% %>D2 D%" z	G G  Os   +D DD