
    Q?hZd                    :   S r SrSSKrSSKrSSKr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JrJrJrJrJrJr  SSKJrJrJrJr  SS	KJr  SS
KJr  SSKJr   " S S\ 5      r!Sr"Sr#Sr$Sr%Sr&Sr'\(" SS9r)S r*SS jr+S r,\,r- " S S5      r. " S S5      r/ " S S\/5      r0 " S S \/5      r1S!r2S"r3S#r4 " S$ S%\/5      r5S& r6SSK7r7\7Rp                  " S'5      r9C7S( r:S) r; " S* S+\/5      r<\=" S,5      \=" S-5      4S. jr> " S/ S0\/5      r? " S1 S25      r@S3 rA " S4 S5\?5      rB " S6 S7\B5      rC " S8 S95      rD\D" 5       rE " S: S;5      rF\F" 5       rG " S< S=\/5      rHSS> jrIS?rJ " S@ SA\/5      rK " SB SC\K5      rL " SD SE\/5      rM " SF SG\/5      rN " SH SI\/5      rO " SJ SK\/5      rP " SL SM\/5      rQ " SN SO\/5      rR " SP SQ\H5      rS " SR SS\/5      rT " ST SU\T5      rU " SV SW\T5      rV " SX SY\ 5      rW " SZ S[\T5      rX " S\ S]\T5      rYS^ rZS_r[ " S` Sa\/5      r\ " Sb Sc\/5      r] " Sd Se\/5      r^SSf jr_Sgr` " Sh Si\/5      ra " Sj Sk\/5      rb " Sl Sm\b5      rc " Sn So\b5      rd " Sp Sq\b5      re " Sr Ss\e5      rfSt rg " Su Sv\/5      rh " Sw Sx\/5      ri " Sy Sz\/5      rj " S{ S|\/5      rk " S} S~\/5      rl " S S\l5      rm " S S\/5      rn " S S\n5      ro " S S\/5      rp " S S\p5      rq " S S\/5      rr " S S\/5      rs " S S\/5      rt " S S\t5      ru " S S\/5      rv " S S\/5      rwSSSS.rx " S S\/5      ry " S S5      rz " S S\/5      r{ " S S\{5      r| " S S\{5      r} " S S\/5      r~ " S S\~5      r " S S\~5      r " S S\~5      r\S:X  a	  \" S5        gg)z4.2.0a_  
The module pdfdoc.py handles the 'outer structure' of PDF documents, ensuring that
all objects are properly cross-referenced and indexed to the nearest byte.  The
'inner structure' - the page descriptions - are presumed to be generated before
each page is saved.
pdfgen.py calls this and provides a 'canvas' object to handle page marking operators.
piddlePDF calls pdfgen and offers a high-level interface.

The classes within this generally mirror structures in the PDF file
and are not part of any public interface.  Instead, canvas and font
classes are made available elsewhere for users to manipulate.
    N)OrderedDict)pdfutils)	rl_config)
open_for_readmakeFileNameisSeqisBytes	isUnicode	_digesterisStrbytestrannotateException	TimeStamp)	escapePDFfp_strasciiBase85EncodeasciiBase85Decode)
pdfmetrics)md5)stderrc                       \ rS rSrSrg)PDFError    N__name__
__module____qualname____firstlineno____static_attributes__r       J/var/www/html/env/lib/python3.13/site-packages/reportlab/pdfbase/pdfdoc.pyr   r          r!   r   __InternalName____RefOnly____Comment__
BasicFontsPages)      )r)      )transparencyc                 R    [        U [        5      (       a  U R                  S5      $ U $ )N	extpdfdoc)
isinstancestrencode)xs    r"   	pdfdocEncr3   5   s"    $.q$5$5188K <1<r!   c                 Z   [        U [        5      (       a  U(       d5  [        U [        5      (       a   UR	                  U 5      R                  U5      $ U R                  U5      n[        R                  (       dE  [        R                  (       a0  [        U [        5      (       a  [        SU R                  -  5      U-   nU$ [        U 5      [        [        4;   a  [        [        U 5      5      $ [        U 5      (       a  U $ [!        U 5      (       a  [        U 5      $ [        [#        U 5      5      $ )zrIndirection step for formatting.
Ensures that document parameters alter behaviour
of formatting for all elements.
z%% %s
)r/   	PDFObjecthasattrr%   	Referenceformatr   	invariantpdfCommentsr&   r3   typefloatintr   r	   r
   r0   )elementdocumenttoplevelfs       r"   r8   r8   8   s    
 ')$$GG[99 %%g.55h??x(A&&9+@+@WWVaEbEbi'*=*==>q@H	g5#,	& ))				7		!!W&&r!   c                     SU -  $ )Nz
FormXob.%sr   )externalnames    r"   xObjectNamerD   R   s    ,&&r!   c                   ,    \ rS rSrS rS rS rS rSrg)NoEncryptionY   c                     U$ )zencode a string, stream, textr   )selfts     r"   r1   NoEncryption.encodeZ   s    r!   c                     g Nr   rI   r?   s     r"   prepareNoEncryption.prepare]       r!   c                     g rM   r   )rI   objnumversions      r"   registerNoEncryption.register`   rQ   r!   c                     g rM   r   rI   s    r"   infoNoEncryption.infoc   s    r!   r   N)	r   r   r   r   r1   rO   rU   rY   r    r   r!   r"   rF   rF   Y   s    r!   rF   c                       \ rS rSrSrg)r5   g   r   Nr   r   r!   r"   r5   r5   g   r#   r!   r5   c                   &    \ rS rSrSr\" 5       rSrg)DummyDocj   z'used to bypass encryption when requiredr   N)r   r   r   r   __doc__rF   encryptr    r   r!   r"   r^   r^   j   s    -nGr!   r^   c                   ,   \ rS rSrSr\" 5       rS\R                  \R                  S\
S4S j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S rS r S r!S r"S r#S r$S r%S r&S  r'S&S! jr(S" r)S# r*S'S$ jr+S%r,g)(PDFDocumento   Nr   c                 |   S U l         SU l        SU l        S U l        SU l        Uc  [
        R                  U l        OX0l        U R                  U5        XPl        [        5       =opl
        UR                  S5        [        U R                  5      U l        U R                  R                  n[        U5      nUR                  [!        U5      5        0 U l        0 U l        0 U l        0 U l        [+        5       =n=U l        U l        [1        5       =ol        Xl        U(       a  UO[
        R4                  nU(       a  [7        U5      Ul        U(       a
  [;        5       O	[=        5       =U l        =U l         Ul         [C        5       U l"        0 U l#        [I        0 5      n
SU
l%        U RM                  U
[N        5        / U l(        g )Nr   r)   s   a reportlab documentzThe standard fonts dictionary))_IDobjectcountershadingCounterinObjectpageCounterr   r9   setCompression_pdfVersionr   	signatureupdater   
_timeStamprJ   asciir   idToObjectNumberAndVersion
idToObject
idToOffset
numberToId
PDFCatalogCatalog_catalogPDFPagesr(   documentLang	PDFStringLangPDFOutlines0PDFOutlinesoutlineOutlinesPDFInforY   fontMappingPDFDictionaryr&   r7   r'   delayedFonts)rI   dummyoutlinecompressionr9   filename
pdfVersionlangsigcatpagesDDs              r"   __init__PDFDocument.__init__s   sb     &00DN&NK(%"u$n

*+#DNN3ooCj

73< *,'-7\99dlT]%Z'
	t!7!7 CHHTlnZeZgggt}s|I	 28r:&r!   c                     Xl         g rM   r   rI   onoffs     r"   rk   PDFDocument.setCompression   s     r!   c                 Z    U H%  n[        U R                  [        U   5      U l        M'     g)zREnsure that the pdf version is greater than or equal to that specified by the keysN)maxrl   PDF_SUPPORT_VERSION)rI   keysks      r"   ensureMinPdfVersionPDFDocument.ensureMinPdfVersion   s'    A"4#3#35H5KLD r!   c                 p    U R                   (       a  gU R                  R                  [        U5      5        g)z add information to the signatureN)rf   rm   rn   r   )rI   things     r"   updateSignaturePDFDocument.updateSignature   s!    88Vgen-r!   c                     U R                   (       a  U R                   $ U R                  R                  5       n[        5       n[	        USS9R                  U5      nSU-   U-   S-   U l         U R                   $ )z<A unique fingerprint for the file (unless in invariant mode)raw)encs   
[sJ   ]
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
)rf   rm   digestr^   PDFTextr8   )rI   r   docIDss       r"   IDPDFDocument.ID   s`    8888O&&(jf'..s33JsN#rrxxr!   c                 H   [        U SS5      (       a"  [        SU R                  R                  -  5      eSU l        [        [        USS 5      S5      (       al  SnUn[        USS 5      n[        U[        5      (       a  S	U-  nO4[        U5      (       d$  S
UR                  R                  [        U5      4-  n[        U5      nOA[        U5      (       a  Sn[        U5      n[        US5      nO[        S[        U5      -  5      eU R                  U5      n[        U5      (       a  UR!                  S5      nUR#                  U5        U(       a2  UR%                  5         SS KnUR(                  S:X  a  SSKJn  U" U5        [        USS 5      (       a  [/        SU< 35        g g )N_savedToFileFz)class %s instances can only be saved onceTwrite__call__r   namez
<os fd:%d>z<%s@0X%8.8X>r)   wbz#Cannot use %s as a filename or filelatin1mac)markfilename
_verbosityzsaved )getattrRuntimeError	__class__r   r   r6   r/   r=   r   idr   open	TypeErrorrepr
GetPDFDatar
   r1   r   closeosr   reportlab.lib.utilsr   print)rI   r   canvasmyfilerA   datar   r   s           r"   
SaveToFilePDFDocument.SaveToFile   sS   4u--JT^^MdMddee 78WT2:>>FAq-H(3'''18__)Q[[-A-A"Q%,HH#H-H8__F#H-HXt$AADNRSSv&T??;;x(D	GGIww~<X&6,t,,e(4L.M,r!   c                    U R                    H  nUR                  U 5        M     U R                  U R                  l        U R                  R	                  U R
                  5        U R                  U R                  5        U R                  U R                  5        U R                  R                  X5        U R                  R                  S:  a  S U R                  l        U R                  5       $ Nr   )r   
addObjectsr9   rY   r   rm   r7   rv   r   rO   readyr8   )rI   r   fnts      r"   r   PDFDocument.GetPDFData   s    $$CNN4  % #nn				( 	t||$tyy!d+==q $(DLL!{{}r!   c                 ~    U R                   b)  U R                   S:X  a  g[        SU R                   -  5      eSU l         g)zXspecify the current object as a page (enables reference binding and other page features)Npagez%can't go in page already in object %s)ri   
ValueErrorrX   s    r"   inPagePDFDocument.inPage   s6    ==$}}f$fDt}}TUUr!   c                     SU l         g)zBspecify that we are in a form xobject (disable page features, etc)formN)ri   rX   s    r"   inFormPDFDocument.inForm   s    
 r!   c                    U R                   nX;   a  X!   $  [        R                  " U5      nUR                  (       a  [	        S[        U5      -  5      eUR                  U 5        X!   $ ! [         a    [	        S[        U5      -  5      ef = f)Nz1getInternalFontName(%s) called for a dynamic fontzFont %s not known!)r   r   getFont_dynamicFontr   r   r   KeyError)rI   
psfontnamefmfontObjs       r"   getInternalFontNamePDFDocument.getInternalFontName   s    >!H$,,Z8''"#VY]^hYi#ijj""4(~% H3d:6FFGGHs   AA* *"Bc                 2    S[        U R                  5      -   $ )NPage)r   rj   rX   s    r"   thisPageNamePDFDocument.thisPageName  s    d4++,,,r!   c                 4    [        U R                  5       5      $ rM   )PDFObjectReferencer   rX   s    r"   thisPageRefPDFDocument.thisPageRef  s    !$"3"3"566r!   c                     U R                  5       nU R                  X5        U R                  R                  U5        U =R                  S-  sl        S U l        g )Nr)   )r   r7   r(   addPagerj   ri   )rI   r   r   s      r"   r   PDFDocument.addPage  sF      "t"

4 Ar!   c                     U R                   S:w  a  U R                  5         U R                  U[        U5      5        SU l         g)zadd a Form XObject.r   N)ri   r   r7   rD   )rI   r   r   s      r"   addFormPDFDocument.addForm  s3     ==F"KKMt[./r!   c                     SU-  $ )NzAnnot.%sr   )rI   rC   s     r"   annotationNamePDFDocument.annotationName#  s    ,&&r!   c                 D    U R                  X R                  U5      5        g rM   )r7   r   )rI   r   
annotations      r"   addAnnotationPDFDocument.addAnnotation&  s    z#6#6t#<=r!   c                 :    U R                  U5      n[        U5      $ rM   )r   r   rI   r   internalnames      r"   refAnnotationPDFDocument.refAnnotation)  s    **40!,//r!   c                 p    SU R                   -  nU R                  X5        U =R                   S-  sl         U$ )NzSh%dr)   )rh   r7   )rI   shadingr   s      r"   
addShadingPDFDocument.addShading-  s4    ,,,		&				!	r!   c                    UR                   nU(       d  UR                  S:X  a#  UR                  S:X  a  UR                  S:X  a  SnOUR                  S:X  a#  UR                  S:X  a  UR                  S:X  a  SnOeUR                  S:X  a#  UR                  S:X  a  UR                  S:X  a  SnO2UR                  S:X  a"  UR                  S:X  a  UR                  S:X  a  SnU(       d  [        SU-  5      eUR                  US9n[        U5      SS  nX0R                  ;  a*  [        U5      R                  5       nU R                  XC5        X24$ )	Nr   BLACKCYANMAGENTAYELLOWz&CMYK colour %r used without a spotName)spotNamer)   )r   cyanmagentayellowblackr   clonePDFNamerr   PDFSeparationCMYKColorvaluer7   )rI   cmyksnamer   seps        r"   addColorPDFDocument.addColor3  s   yy!|aDKKNQ4<<?t{{A~A$**a-DKKN!A$,,/djj!m  !ID!PQQzzUz3u~ab!&(.446CNN3$zr!   c                 N    Uc  SU R                   l        gXR                   l        g)embeds in PDF fileN(anonymous))rY   title)rI   r  s     r"   setTitlePDFDocument.setTitleH  s    =+DIIO#IIOr!   c                 N    Uc  SU R                   l        gXR                   l        g)zembedded in PDF fileNr  )rY   author)rI   r  s     r"   	setAuthorPDFDocument.setAuthorO  s     >,DII%IIr!   c                 N    Uc  SU R                   l        gXR                   l        gr  Nz(unspecified))rY   subject)rI   r  s     r"   
setSubjectPDFDocument.setSubjectW  s     ? /DII 'IIr!   c                 N    Uc  SU R                   l        gXR                   l        gr  )rY   creator)rI   r  s     r"   
setCreatorPDFDocument.setCreator`  s    ? /DII 'IIr!   c                 V    Uc  [         U R                  l        gXR                  l        g)r  N)_default_producerrY   producer)rI   r!  s     r"   setProducerPDFDocument.setProducerg  s    !2DII!)IIr!   c                 N    Uc  SU R                   l        gXR                   l        g)z/embeds a string containing keywords in PDF fileN )rY   keywords)rI   r&  s     r"   setKeywordsPDFDocument.setKeywordsn  s      !#DII!)IIr!   c                 $    XR                   l        g rM   )rY   _dateFormatter)rI   dateFormatters     r"   setDateFormatterPDFDocument.setDateFormatterw  s    #0		 r!   c                     [        U R                  R                  5       5      nSSKJn  UR
                   H  nX1;  d  M
  UR                  U5        M     UR                  5         U$ )Nr   )	_fontdata)listr   r   reportlab.pdfbaser/  standardFontsappendsort)rI   	fontnamesr/  r   s       r"   getAvailableFontsPDFDocument.getAvailableFontsz  sT    ))..01	/++D$  & , 	r!   c           	      P   U R                   R                  U 5        U R                  nU R                  nU R	                  U5        U R	                  U5        S nU R                   R                  5       nU(       a  U R	                  U5      nSn/ nU R
                  nU R                  nU R                  n	U R                  n
[        U R                  5      =U l        n US-  nXW;  a  OXu   nX   n[        X5      nUR                  U 5      n[        R                  (       dR  [        R                   (       a=   UR"                  R$                  nUR)                  S['        U5      < SUS S < S35        UR)                  U5      nUX'   UR+                  U5        M  U ?[-        U5      nUS-
  U:w  a  [/        SU< SU< 35      e[1        5       nUR3                  SU5        UR                  U 5      nUR)                  U5      n[5        UUS-   U R	                  U5      U R	                  U5      UU R7                  5       S	9nUR                  U 5      nUR)                  U5        [9        U S
/ 5       H  nUR;                  U5        M     UR                  U 5      $ !   ['        U5      n GNZ= f)Nr   r)   z% z: class 2   z 
zcounter z' doesn't match number to id dictionary )	startxrefSizeRootInfoEncryptr   	_digiSigs)ra   rO   rv   rY   r7   rt   rq   rr   rs   PDFFilerl   	__accum__PDFIndirectObjectr8   r   r9   r:   r   r   rp   addr3  lenr   PDFCrossReferenceTable
addsection
PDFTrailerr   r   sign)rI   r   rY   
encryptrefencryptinfocounterids
numbertoididToNVidToObidToOfFileoidobjIOIOf	classnameoffsetlnoxrefxreff
xrefoffsettrailertrailerfdss                            r"   r8   PDFDocument.format  sB    	T"llyyst
ll'')4J__
00 !((8(8 99qLG(%%C+C"3,B))D/C&&9+@+@+ # 6 6I sYs^LMXXc]F FKJJsO% & N*o19c>U\^abcc%'3D!XXe_
"q5>>#&>>$'  >>$'${2.BGGDM / {{4  =+ %c
Is   5J J%c                 4    [        U5      nX R                  ;   $ )z test for existence of named form)rD   rr   r   s      r"   hasFormPDFDocument.hasForm  s    "4(..r!   c                    [        U5      nX0R                  ;   a  U R                  U   n[        US5      (       a  UR                  U   $ [	        U[
        5      (       a  UR                  5       $ [	        U[        5      (       a,  [        UR                  R                  U   R                  5      $ [        S[        U5      -  5      eg)zget the declared bounding box of the form as a list.
If you specify a different PDF box definition (e.g. the
ArtBox) and it has one, that's what you'll get._extra_pageCatcher_infoz'I don't understand the form instance %sN)rD   rr   r6   rd  r/   PDFFormXObjectBBoxList	PDFStreamr0  
dictionarydictsequencer   r   )rI   r   boxTyper   theforms        r"   getFormBBoxPDFDocument.getFormBBox  s     #4(??*ool3Gw89966w??'>22''))GY//G..33G<EEFF !JTRVZ!WXX +r!   c                     [        U5      $ )zaLets canvas find out what form is called internally.
Never mind whether it is defined yet or not.)rD   rI   r   s     r"   getXObjectNamePDFDocument.getXObjectName  s     4  r!   c                 b    0 nU H  n[        U5      n[        U5      nXRU'   M     [        U5      $ )zzconstruct an xobject dict (for inclusion in a resource dict, usually)
from a list of form names (images not yet supported))rD   r   r   )rI   	formnamesDr   r   	references         r"   xobjDictPDFDocument.xobjDict  s;     D&t,L*<8I'lO 
 Qr!   c                    [        U[        5      nU R                  nUc  U(       a  UR                  [        L a  U$ [        U[        5      (       ao  UR                  nUb*  X%:w  a%  [        S[        U5      < S[        U5      < 35      eXT;  a&  [        S[        U5      < S[        U5      < S35      e[	        U5      $ U R                  S-   =o`l        Uc  S[        U5      -   nX$;   a+  XB   nXq:w  a  [        S[        U5      -   5      e[	        U5      $ U(       a  X!l        US	4U R                  U'   X R                  U'   XU'   [	        U5      $ )
Nzattempt to reregister object z with new name zobject of type z
 named as z, but not registeredr)   Rzredefining named object: r   )r/   r5   rr   r   r   r6   r$   r   r   r;   rp   rg   rq   rt   )rI   rS  r   iobrr   intnamerg   others           r"   r7   PDFDocument.Reference  s<    Y'__
<9K(KJ3())**GDM M4:"/ 0 0( X\]`Xabghobp!qrr%g..-1-?-?-AA*<tM**D$Ez !<T$Z!GHH%d++#' 1>0B''-)-&4!$''r!   )rv   r   r(   rf   rA  rw   rl   r   ro   r   r   r   rr   rq   rs   ri   rY   r9   rt   rg   r~   rj   rh   rm   )MediaBoxrM   )-r   r   r   r   defaultStreamFiltersrF   ra   r   pageCompressionr9   PDF_VERSION_DEFAULTr   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r  r  r"  r'  r,  r6  r8   ra  rm  rq  rw  r7   r    r   r!   r"   rc   rc   o   s    nG&66$../3j!M
.
N@ H-7'>0*$&((**1C!J/
Y$!
	 (r!   rc   truefalsenullc                   *    \ rS rSrSS jrS rS rSrg)r   i  c                     Xl         X l        g rM   )rJ   r   )rI   rJ   r   s      r"   r   PDFText.__init__  s    r!   c                     U R                   n[        U5      (       a  UR                  U R                  5      n[        R
                  " UR                  R                  U5      5      nSU-   S-   $ )N   <   >)rJ   r
   r1   r   binasciihexlifyra   )rI   r?   rJ   results       r"   r8   PDFText.format  sV    FFQ<<"A!!("2"2"9"9!"<=f}t##r!   c                 8    [        5       nU R                  U5      $ rM   )r^   r8   )rI   dummydocs     r"   __str__PDFText.__str__   s    :{{8$$r!   )r   rJ   N)zutf-8)r   r   r   r   r   r8   r  r    r   r!   r"   r   r     s    $%r!   r   c                     U $ rM   r   )ns    r"   	PDFnumberr  $  s    Hr!   z[^()]c                     [         R                  SU 5      n SnU  H  nUS:X  a  US-  nM  US-  nUS:  d  M    g   U(       + =(       a    S=(       d    S$ )z+test whether a string is balanced in parensr%  r   (r)   )_re_cleanparenssub)sr  cs      r"   _isbalancedr  *  sW    Bq!A	Ac61a41FAs1	 
 5;Q!r!   c                 V     U R                  S5        g! [         a
  n SnAgSnAff = f)z(return true if no Pdfdoc encoding errorspdfdocr)   Nr   )r1   UnicodeEncodeError)utextes     r"   _checkPdfdocr  5  s)    X s    
((c                   .    \ rS rSrSrSS jrS rS rSrg)	rz   i=  Fc                     [        U[        5      (       a4  UR                  U l        UR                  U l        UR                  U l        gXl        X l        X0l        g)aJ  s can be unicode/utf8 or a PDFString
if escape is true then the output will be passed through escape
if enc is raw then bytes will be left alone
if enc is auto we'll try and automatically adapt to utf_16_be/utf_16_le if the
effective string is not entirely in pdfdoc
if self.unicodeEncValid unicode will use the specifed encoding
N)r/   rz   r  escaper   )rI   r  r  r   s       r"   r   PDFString.__init__?  sA     a	""SSDF((DKuuDHF KHr!   c           	         U R                   n[        U SS5      n[        U5      (       a  US:X  a   UR                  [        R
                  5      (       a  UR                  S5      nOGUR                  [        R                  5      (       a  UR                  S5      nOUR                  S5      n[        U5      (       a  UR                  S5      nO[        R
                  UR                  S5      -   nOO[        U5      (       a  US:X  aE  [        U5      (       a  UR                  S5      nO[        R
                  UR                  S5      -   nOgU R                  (       a  UR                  U R                  5      nO:[        R
                  UR                  S5      -   nO[!        S[#        U5      -  5      e[        U S	S
5      n[%        UR&                  [(        5      (       d  UR&                  R                  U5      nS
nU(       ar   S[+        U5      -  nUS-  (       a  UR-                  SS5      nUS-  (       a2  [/        U5      (       a"  UR-                  SS5      R-                  SS5      n[1        U5      $ SU-   S-   $ !    UR                  S5         N!   [        R                  " S[        U5      < 35        e = f= f!   [!        SU< S[        U5      < 35      e= f)Nr   auto	utf_16_be	utf_16_leutf8r  z	Error in z-PDFString argument must be str/unicode not %sr  r)   (%s)zcannot escape     z\012
r+   z\(r  z\))   (   ))r  r   r	   
startswithcodecsBOM_UTF16_BEdecodeBOM_UTF16_LEr  r1   r   r   r   r
   unicodeEncValidr   r   r;   r/   ra   rF   r   replacer  r3   )rI   r?   r  r   ur  ess          r"   r8   PDFString.formatO  sC   FFd5(1::f}||F$7$788HH[1f&9&9::HH[1HHV,#AHHX."//0EE $ q\\f}??*A++AHH[,AAA%%HHTXX&''(==LtTUwVWWhq)(**<88  ''*AFGil* axZZ-axKOOZZc*225=R= !8d?"E*d1g%?@*G !T!W!EFFs0   BJ  "J  K  J?J&J<<J?K c                 2    S[        U R                  5      -  $ )Nr  )r   r  rX   s    r"   r  PDFString.__str__  s    	$&&)))r!   )r   r  r  N)r)   r  )	r   r   r   r   r  r   r8   r  r    r   r!   r"   rz   rz   =  s    O 2#h*r!   rz   !   ~   c                     [        U 5      n[        U5       H3  u  pEXQ:  d  XR:  d  US;   d  M  S[        [        U5      5      SS  -   X4'   M5     SSR	                  U5      -   $ )Nz
%()<>{}[]##r  /r%  )r0  	enumeratehexordjoin)r   lohiLir  s         r"   r  r    s\     	T
A|4141,s3q6{12&AD  
r!   c                   P    \ rS rSrSrSS jrS rS rS rS r	SS	 jr
S
 rS rSrg)r   i  TNc                 D    Uc  0 U l         gUR                  5       U l         g)zPdict should be namestring to value eg "a": 122 NOT pdfname to value NOT "/a":122N)ri  copy)rI   ri  s     r"   r   PDFDictionary.__init__  s    <DI		DIr!   c                      X R                   U'   g rM   ri  )rI   r   r  s      r"   __setitem__PDFDictionary.__setitem__  s    		$r!   c                      U R                   U   $ rM   r  rI   as     r"   __getitem__PDFDictionary.__getitem__  s    yy|r!   c                     XR                   ;   $ rM   r  r  s     r"   __contains__PDFDictionary.__contains__  s    II~r!   c                 Z    UR                  U R                  U   5      U R                  U'   g rM   )r7   ri  )rI   r   r?   s      r"   r7   PDFDictionary.Reference  s"    ",,TYYt_=		$r!   c                 |   U R                   n [        UR                  5       5      n[        U[        5      (       d  UR                  5         U Vs/ s H*  n[        [        U5      U5      S-   [        X5   U5      -   PM,     nnU R                  (       a  [        R                  (       d  U R                  S:X  a  UR                  U5      nOLUR                  n[        [!        S[#        U5      S5      5       H  nU" US5        M     SR                  U5      nSU-   S-   $ !   [        [	        U5      5        e = fs  snf )N    forced      
 s   <<
s   
>>)ri  r0  r   r   rp   r/   r   r4  r8   r  	multiliner   pdfMultiLiner  insertreversedrangerD  )	rI   r?   INDri  r   r   r  rJ   r  s	            r"   r8   PDFDictionary.format  s    yy			$D ${++TYY[RVWRVQfWQZ)$.vdgh/GGRVWNNy55$..(:RA hhAeAs1vq12!F 3		!Aqy  	%+Ws   D 1D9D6c                 ,    [        U R                  5      $ rM   )r   ri  rX   s    r"   r  PDFDictionary.copy  s    TYY''r!   c                     U R                   nUR                  5        Vs/ s H  o"R                  S5      (       d  M  UPM     nnU H  nUR                  U5      XSS  '   M     g s  snf )Nr  r)   )ri  r   r  pop)rI   ru  r   Ks       r"   	normalizePDFDictionary.normalize  sR    II61LL$5Q6AuuQxAeH  7s
   A$A$r  rM   r  )r   r   r   r   r  r   r  r  r  r7   r8   r  r  r    r   r!   r"   r   r     s/    I$ >!&( r!   r   c                        \ rS rSrS rS rSrg)checkPDFNamesi  c                 @    [        [        [        U5      5      U l        g rM   )r0  mapr  names)rI   r  s     r"   r   checkPDFNames.__init__  s    #ge,-
r!   c                 h    UR                  S5      (       d  [        U5      nXR                  ;   a  U$ g )Nr  )r  r  r  )rI   r  s     r"   r   checkPDFNames.__call__  s0    $$%.EJJL r!   )r  N)r   r   r   r   r   r   r    r   r!   r"   r  r    s    .r!   r  c                     U S;   a  U $ g )N)r  r  r   )r  s    r"   checkPDFBooleanr    s      , r!   c                   (    \ rS rSr0 rSS jrS rSrg)CheckedPDFDictionaryi  Nc                 J    [         R                  X5        U(       a  X l        g g rM   )r   r   validate)rI   ri  r   s      r"   r   CheckedPDFDictionary.__init__  s    t)X]8r!   c                     XR                   ;  a  [        SU-  5      eU R                   U   " U5      nUc  [        SU< SU< 35      e[        R                  XU5        g )Nzinvalid key, %rz
Bad value z	 for key )r   r   r   r  )rI   r   r  cvalues       r"   r   CheckedPDFDictionary.__setitem__  sU    }}$.566t$U+>%EFF!!$F3r!   )r   NN)r   r   r   r   r   r   r  r    r   r!   r"   r  r    s    H.4r!   r  c                   J   \ rS rSr\" \\\\\\\" SR                  5       6 \" SR                  5       6 \" SR                  5       6 \" SR                  5       6 \" SR                  5       6 \" SR                  5       6 \" SR                  5       6 \" SR                  5       6 S9rSr	g	)
ViewerPreferencesPDFDictionaryi  z#UseNone UseOutlines UseThumbs UseOCzL2R R2Lz(MediaBox CropBox BleedBox TrimBox ArtBoxzNone AppDefaultz.Simplex DuplexFlipShortEdge DuplexFlipLongEdge)HideToolbarHideMenubarHideWindowUI	FitWindowCenterWindowDisplayDocTitleNonFullScreenPageMode	DirectionViewAreaViewClip	PrintArea	PrintClipPrintScalingDuplexr   N)
r   r   r   r   ri  r  r  splitr   r    r   r!   r"   r  r    s    ++,), /&35Z5`5`5b&c'):;&(R(X(X(Z[&(R(X(X(Z[')S)Y)Y)[\')S)Y)Y)[\*,=,C,C,EF$&V&\&\&^_Hr!   r  c                   $    \ rS rSrSrS rS rSrg)PDFStreamFilterZCompressi  FlateDecodec                 p    [        U5      (       a  UR                  S5      n[        R                  " U5      $ )Nr  )r
   r1   zlibcompressrI   texts     r"   r1   PDFStreamFilterZCompress.encode  s(    T??;;v&D}}T""r!   c                 .    [         R                  " U5      $ rM   )r  
decompress)rI   encodeds     r"   r  PDFStreamFilterZCompress.decode  s    w''r!   r   Nr   r   r   r   pdfnamer1   r  r    r   r!   r"   r  r    s    G#(r!   r  c                   $    \ rS rSrSrS rS rSrg)PDFStreamFilterBase85Encodei  ASCII85Decodec                 b    SSK Jn  [        U5      n[        R                  (       a  U" U5      nU$ )Nr   )_wrap)reportlab.pdfbase.pdfutilsr*  r   r   wrapA85)rI   r  r*  s      r"   r1   "PDFStreamFilterBase85Encode.encode  s&    4 &;Dr!   c                     [        U5      $ rM   )r   r  s     r"   r  "PDFStreamFilterBase85Encode.decode  s     &&r!   r   Nr$  r   r!   r"   r'  r'    s    G'r!   r'  c                   ,    \ rS rSrSrSrSS jrS rSrg)	rg  i  z@set dictionary elements explicitly stream.dictionary[name]=valuer)   Nc                 B    Uc
  [        5       nXl        X l        X0l        g rM   )r   rh  contentfilters)rI   rh  r2  r3  s       r"   r   PDFStream.__init__	  s    &J$r!   c                 l   U R                   n[        UR                  R                  5       5      nU R                  nU R
                  nU R                  c  [        S5      eUc  UR                  nUbz  SUR                  ;  aj  [        U5      nUR                  5         / nU H9  nUR                  U5      nUR                  S[        UR                  5      5        M;     [        U5      US'   UR                  R                  U5      n[!        X15      n[#        U5      US'   [!        X!5      n	U	S-   U-   S-   $ )Nzstream content not setFilterr   Lengths   
stream
s
   endstream
)rh  r   ri  r  r2  r3  r   r  r0  reverser1   r  r  r%  PDFArrayra   r8   rD  )
rI   r?   rh  r2  r3  rffnamesrA   fcfds
             r"   r8   PDFStream.format  s   __
":??#7#7#9:
,,,,<<566?33G8:??#BgBJJLF ((7+a!34	  $,F#3Jx ""))'2G&"7|
8J)-">11r!   )r2  rh  r3  NNN)	r   r   r   r   r`   r%   r   r8   r    r   r!   r"   rg  rg    s    JK2r!   rg  c                     U c  [         n U R                  5       S-   n [        U [        R                  =(       a    [
        [        /=(       d    [        /S9nSUl        U$ )Nr  )r2  r3  ztest stream)teststreamcontentstriprg  r   useA85PDFBase85EncodePDFZCompressr&   )r2  Ss     r"   
teststreamrG  /  sS    #mmo$GG%,,O/,1OaT`Sa	cA "AMHr!   z\
1 0 0 1 0 0 cm BT /F9 12 Tf 14.4 TL ET
1.00 0.00 1.00 rg
n 72.00 72.00 432.00 648.00 re B*
c                   .    \ rS rSrSrS rS rSS jrSrg)	r9  i?  Tc                 $    [        U5      U l        g rM   )r0  rj  )rI   rj  s     r"   r   PDFArray.__init__A  s    Xr!   c                 `    [        [        UR                  U R                  5      5      U l        g)z'make all objects in sequence referencesN)r0  r  r7   rj  rN   s     r"   
ReferencesPDFArray.ReferencesC  s    S!3!3T]]CDr!   c                    U R                    Vs/ s H  n[        X15      PM     nnU R                  (       a  [        R                  (       d  U R                  S:X  a  UR                  U5      nOf[        U5      nUS:  aD  UR                  n[        [        SUS5      5       H  nU" US5        M     SR                  U5      nOSR                  U5      nSU-   S-   $ s  snf )Nr  
   r  r  s   [ s    ])
rj  r8   r  r   r  r  rD  r  r  r  )rI   r?   r  r  r  r  rJ   r  s           r"   r8   PDFArray.formatF  s    *.--8-QVA -8NNy55$..(:RA!fAt((!%Ar"23AaK 4IIaLIIaLqy5   9s   C)rj  Nr  )	r   r   r   r   r  r   rL  r8   r    r   r!   r"   r9  r9  ?  s    I'E!r!   r9  c                       \ rS rSrSrSrg)PDFArrayCompactiV  Fr   N)r   r   r   r   r  r    r   r!   r"   rR  rR  V  s    Ir!   rR  c                   $    \ rS rSrSrS rS rSrg)rB  iY  r)   c                     Xl         X l        g rM   )r   r2  )rI   r   r2  s      r"   r   PDFIndirectObject.__init__[  s    	r!   c                    U R                   nUR                  U   u  p4UR                  R                  X45        [	        U R
                  USS9n[        U< SU< S35      U-   UR                  S5      (       a  S-   S-   $ S-   S-   $ )Nr)   r@   r  z obj
   
r!   s   endobj
)r   rq   ra   rU   r8   r2  r3   endswith)rI   r?   r   r  vfcontents         r"   r8   PDFIndirectObject.format^  s    yy2248!!!'$,,1=1-.'0077D 	=BD 	r!   )r2  r   N)r   r   r   r   r%   r   r8   r    r   r!   r"   rB  rB  Y  s    Kr!   rB  c                        \ rS rSrS rS rSrg)r   ih  c                     Xl         g rM   r   rp  s     r"   r   PDFObjectReference.__init__i      	r!   c                      [        SUR                  U R                     -  5      $ !   [        S[	        U R                  5      -  5      e= f)Nz%s %s Rz:forward reference to %s not resolved upon final formatting)r3   rq   r   r   r   rN   s     r"   r8   PDFObjectReference.formatk  sM    	kY)L)LTYY)WWXX	kWZ^_c_h_hZiijjs	   $' #A
r_  Nr   r   r   r   r   r8   r    r   r!   r"   r   r   h  s    kr!   r   c                   2    \ rS rSr\4S jrS rS rS rSr	g)r@  iq  c                     / U l         U R                   R                  U l        SU l        U R	                  [        SU-  5      S-   5        g )Nr   z%%PDF-%s.%ssA   
% ReportLab Generated PDF document http://www.reportlab.com
)stringsr3  r   rW  rC  r3   )rI   r   s     r"   r   PDFFile.__init__s  sD    \\((
 	)MJ67^_ 	r!   c                     g rM   r   rX   s    r"   closeOrResetPDFFile.closeOrReset  s    r!   c                 |    [        U5      nU R                  nU[        U5      -   U l        U R                  U5        U$ )zGshould be constructed as late as possible, return position where placed)r3   rW  rD  r   )rI   r  r  s      r"   rC  PDFFile.add  s3    aLSVm

1r!   c                 8    SR                  U R                  5      $ )Nr!   )r  rg  rN   s     r"   r8   PDFFile.format  s    xx%%r!   )rW  rg  r   N)
r   r   r   r   r  r   rj  rC  r8   r    r   r!   r"   r@  r@  q  s    !4 &r!   r@  c                        \ rS rSrS rS rSrg)PDFCrossReferenceSubsectioni  c                     Xl         X l        g rM   firstentrynumber
idsequence)rI   rt  ru  s      r"   r   $PDFCrossReferenceSubsection.__init__  s     0$r!   c                 X   U R                   nU R                  n[        U5      n[        U5      n0 nUS:X  a  SUS'   US-   nUR	                  SS5        UR
                  nUR                  nX%-   S-
  n	U Hn  n
Xz   u  pX;   a+  [        SU< S[        U
5      < S[        Xj   5      < 35      eX:  d  X:  a  [        SU< SU< S	U	< 35      eX-
  nXU'   X   nS
X4-  XK'   Mp     U< SU< 3nUR	                  SU5        UR                  S5        [        SR                  U5      5      $ )z`id sequence should represent contiguous object nums else error. free numbers not supported (yet)r   zstandard free entryr)   z0000000000 65535 f zobject number collision r  zobject number z not in range z..z%0.10d %0.5d n r%  r  )rt  ru  r0  rD  r  rq   rs   r   r   r3  r3   r  )rI   r?   rt  ru  entriesnentriestakenrN  rs   lastentrynumberr   numrT   rnumrW  	firstlines                   r"   r8   "PDFCrossReferenceSubsection.format  s2   00__
z"z?Q,E!HzHNN13444((
*3A5B#ZNS| sDQSHVZ[`[dVe!fgg"c&: 3P`bq!rss'D#J^F,/@@GL   0:	q)$r7+,,r!   rs  Nrd  r   r!   r"   rq  rq    s    %-r!   rq  c                   &    \ rS rSrS rS rS rSrg)rE  i  c                     / U l         g rM   sectionsrX   s    r"   r   PDFCrossReferenceTable.__init__  s	    r!   c                 P    [        X5      nU R                  R                  U5        g rM   )rq  r  r3  )rI   
firstentryrL  sections       r"   rF  !PDFCrossReferenceTable.addsection  s    -j>W%r!   c                     U R                   nU(       d  [        S5      eS/nU R                    H  n[        XA5      nUR                  U5        M!     [	        SR                  U5      5      $ )Nzno crossref sectionss   xref
r!   )r  r   r8   r3  r3   r  )rI   r?   r  r  r  fss         r"   r8   PDFCrossReferenceTable.format  sY    ==344KA$BHHRL  !%%r!   r  N)r   r   r   r   r   rF  r8   r    r   r!   r"   rE  rE    s    &&r!   rE  c                   $    \ rS rSrSS jrS rSrg)rG  i  Nc                     Xl         Ub  Uc  [        S5      e[        5       =ol        SU4SU4SU4SU4SU4SU44 H  u  pU
c  M
  XU	'   M     SUl        g )	NzSize and Root keys requiredr;  Prevr<  r=  r   r>  r  )r:  r   r   ri  r  )rI   r:  r;  r  r<  r=  r   r>  ri  r  rZ  s              r"   r   PDFTrailer.__init__  st    "<4<:;;(?*ytnvtnvtntntRj9g2FHEQ}QH  r!   c           
          U R                   R                  USS9nSR                  SUS[        [	        U R
                  5      5      S/5      $ )NrX  r  r!   s   trailer
s   
startxref
s   
%%EOF
)ri  r8   r  r3   r0   r:  )rI   r?   fdicts      r"   r8   PDFTrailer.format  sN    		  e 4xx #dnn-.  	r!   )ri  r:  )NNNNNNrd  r   r!   r"   rG  rG    s    	 	r!   rG  c                   >   ^  \ rS rSrSU 4S jjrU 4S jrS rSrU =r$ )XMPi  c           
         > U(       a  U(       a  [        S5      eU(       d  U(       d  [        S5      e[        TU ]	  [        [	        [        S5      [        S5      S95      S9  Xl        S U l        X l        g )Nz5XMP is ambiguous with both path and creator argumentsz-XMP needs at least a path or creator argumentMetadataXML)TypeSubtype)rh  )	r   superr   r   ri  r  
_XMP__path_XMP__pathContent_XMP__creator)rI   pathr  r   s      r"   r   XMP.__init__  si    GTUU'LMM$TZ(&  	 	
 ! r!   c                 V   > U R                  U5      U l        [        [        U ]  U5      $ rM   )makeContentr2  r  r  r8   )rI   r   r   s     r"   r8   
XMP.format  s'    '',S%c**r!   c                 H   U R                   (       ae  U R                  cL  SSKJn  [	        U R                   S5       nU" UR                  5       5      U l        S S S 5        U R                  $ U R                  $ U R                  U5      $ ! , (       d  f       U R                  $ = f)Nr   )smartDecoderb)r  r  reportlab.lib.rparsexmlr  r   readr  )rI   r   r  _s       r"   r  XMP.makeContent  s{    ;;!!)?$++d+q)4QVVX)>D& ,%%%4%%%>>#&&	 ,+%%%s   B
B!)	__creator__path__pathContentr2  r  )	r   r   r   r   r   r8   r  r    __classcell__)r   s   @r"   r  r    s    !+' 'r!   r  c                       \ rS rSrSrSr\" S5      \" S5      SS.rSR                  5       r	\	r
S	 rS
 rS rS rS rS rSrg)ru   i  zDocument Rootr)   rv   UseNoneN)r  PageModer{   z
        Dests Outlines Pages Threads AcroForm Names OpenAction PageMode URI
        ViewerPreferences PageLabels PageLayout JavaScript StructTreeRoot SpiderInfo
        MarkInfo Metadata Tabsc                 z   U R                  U5        U R                  nU R                  n0 nUR                  5        H  u  pV[	        XU5      nUc  M  XdU'   M     U R
                   H  n[	        XS 5      nUc  M  XdU'   M     U H  nXT;   d  M
  UR                  XE   5      XE'   M!     [        U5      n[        Xq5      $ rM   )	check_format__Defaults____Refs__itemsr   __NoDefault__r7   r   r8   )rI   r?   defaultsRefsru  r   rZ  ri  s           r"   r8   PDFCatalog.format
  s    (#$$}}>>#CAq!A}! $ ##At$A}! $
 Av))!$/  Qd%%r!   c                 &    U R                  S5        g )NUseOutlinessetPageModerX   s    r"   showOutlinePDFCatalog.showOutline  s    'r!   c                 &    U R                  S5        g )N
FullScreenr  rX   s    r"   showFullScreenPDFCatalog.showFullScreen"  s    &r!   c                 4    U(       a  [        U5      U l        g g rM   )r  
PageLayout)rI   layouts     r"   setPageLayoutPDFCatalog.setPageLayout%  s    %foDO r!   c                 4    U(       a  [        U5      U l        g g rM   )r  r  )rI   modes     r"   r  PDFCatalog.setPageMode)  s    #DMDM r!   c                     g)zfor use in subclassesNr   rN   s     r"   r  PDFCatalog.check_format-  rQ   r!   )r  r  )r   r   r   r   r&   r%   r  r  r  r  r  r8   r  r  r  r  r  r    r   r!   r"   ru   ru     s^    !KK#I.#I.L" #(%'  H&*('.*r!   ru   c                   r    \ rS rSrSrSrSrS\" S5      0rSR                  5       r
S/rS	 rS
 rS rS rSrg)rx   i1  zHPAGES TREE WITH ONE INTERNAL NODE, FOR "BALANCING" CHANGE IMPLEMENTATIONz	page treer)   r  r(   zKids Count ParentParentc                     / U l         g rM   r   rX   s    r"   r   PDFPages.__init__:  s	    
r!   c                      U R                   U   $ rM   r  )rI   items     r"   r  PDFPages.__getitem__<  s    zz$r!   c                 :    U R                   R                  U5        g rM   )r   r3  rI   r   s     r"   r   PDFPages.addPage>  s    

$r!   c                     U R                   n[        U5      nUR                  U5        X0l        [	        U5      U l        g rM   )r   r9  rL  KidsrD  Count)rI   r?   r   kidss       r"   r  PDFPages.check_format@  s0    

!	Z
r!   )r  r  r   N)r   r   r   r   r`   r&   r%   r  r  r  r  r  r   r  r   r  r    r   r!   r"   rx   rx   1  sI    RKKGG, L'--/MzH   r!   rx   c                       \ rS rSrSrSrSrS\" S5      0rSR                  5       r
SR                  5       rS	rS
rSrSrSrSr0 r0 rSrS rS rS rS rS rSrg)PDFPageiI  zPage dictionaryr   r)   r  r   zParent
        MediaBox Resources Contents CropBox Rotate Thumb Annots B Dur Hid Trans AA
        PieceInfo LastModified SeparationInfo ArtBox TrimBox BleedBox ID PZ
        TranszContents Parent IDS  iJ  Nc                 B    U R                    H  n[        XS 5        M     g rM   )r  setattrrp  s     r"   r   PDFPage.__init__c  s    &&DD% 'r!   c                     Xl         g rM   r   r   s     r"   rk   PDFPage.setCompressiong  s     r!   c                     U R                   (       a  [        S5      e[        U5      (       a  SR                  U5      S-   nXl        g )Nz&overridden! must set stream explicitlyr  )Override_default_compilationr   r   r  stream)rI   codes     r"   	setStreamPDFPage.setStreami  s7    ,,EFF;;99T?4'Dr!   c                 $    [        U5      U l        g rM   )r   Trans)rI   tranDicts     r"   setPageTransitionPDFPage.setPageTransitionp  s    "8,
r!   c                    U R                   (       a  g U R                  =(       dZ    [        U R                  S;   =(       a    SSU R                  U R
                  /=(       d    SSU R
                  U R                  /5      U l        U R                  (       d  S U l        O9[        U R                  [        5      (       d  [        U R                  5      U l        U R                  (       d  U R                  nU(       d  [        5       U l	        Od[        5       nU R                  (       a6  [        R                  =(       a    [         ["        /=(       d    ["        /Ul        X#l        SUl        X0l	        U R*                  (       d  [-        5       nUR/                  5         U R0                  (       a  UR3                  5         OUR5                  5         U R6                  (       a  U R6                  Ul        U R:                  (       a  U R:                  Ul        UR=                  U R>                  5        URA                  U RB                  5        X@l        U RD                  (       d#  URF                  nURI                  U5      U l"        g g )N)Z   i  r   zpage stream)%r  r  r9  Rotate
pageheight	pagewidthAnnotsr/   r5   Contentsr  rG  rg  r   r   rC  rD  rE  r3  r2  r&   	ResourcesPDFResourceDictionary
basicFonts	hasImagesallProcs
basicProcsXObjectsXObject	ExtGState
setShading_shadingUsedsetColorSpace_colorsUsedr  r(   r7   )rI   r?   r  rF  	resourcesr   s         r"   r  PDFPage.check_formats  s   ,,  _$++2I2rqQRSWSbSbcgcqcqNr  3^wxz{  ~B  ~L  ~L  NR  N]  N]  w^  *_{{DK dkk)44&t{{3}}[[F *K## ) 0 0 To|5T fYeXfAI"	 - !~~-/I  "~~""$$$&}}$(MM	!~~&*nn	#  !2!23##D$4$45&N{{NNE",,U3DK r!   )r  r  r  r  r  r  r   r  )r   r   r   r   r&   r  r%   r  r  r  r  r  r  r  r  r  r   r  r  _shadingsUsedr  r   rk   r  r  r  r    r   r!   r"   r  r  I  s    #K $% KGFO L   (--/HIJFIKHKME&!-*4r!   r  c                       \ rS rSrSrg)DuplicatePageLabelPagei  r   Nr   r   r!   r"   r
  r
    r#   r!   r
  c                   <    \ rS rSrSrSr0 rS/r/ rS r	S r
S rSrg)	PDFPageLabelsi  Nr   Numsc                     / U l         g rM   )labelsrX   s    r"   r   PDFPageLabels.__init__  s	    r!   c                 <    U R                   R                  X45        g)aW  Adds a new PDFPageLabel to this catalog.
The 'page' argument, an integer, is the page number in the PDF document
with which the 'label' should be associated. Page numbering in the PDF
starts at zero! Thus, to change the label on the first page, '0' should be
provided as an argument, and to change the 6th page, '5' should be provided
as the argument.

The 'label' argument should be a PDFPageLabel instance, which describes the
format of the labels starting on page 'page' in the PDF and continuing
until the next encounter of a PDFPageLabel.

The order in which labels are added is not important.
N)r  r3  )rI   r   labels      r"   addPageLabelPDFPageLabels.addPageLabel  s     	D=)r!   c                 
    U R                   R                  5         / nU R                    H'  u  pVUR                  U5        UR                  U5        M)     [        U5      U l
        [        R                  X5      $ ! [         a~    [        U R                    Vs/ s H  o"S   PM	     Os  snf sn5      n[	        S[        [        U Vs/ s H  o#R                  U5      S:  d  M  UPM     Os  snf sn5      5      -  5         Nf = f)Nr   z-

!!!!! Duplicate PageLabel seen for pages %rr)   )r  r4  r
  sortedr   r0  setcountr3  r9  r  ru   r8   )rI   r?   r2   tmpr  r   r  s          r"   r8   PDFPageLabels.format  s    	AKK ;;KDMM$MM%  ' V$	  00 & 	A41A$45CORVWZgj[}gjbcnwnwxynz{|n|\]gj[}W~R  A	As/   A: :DB&
%!DC)"C)(DD)r  r  )r   r   r   r   __comment__r%   r  r  r  r   r  r8   r    r   r!   r"   r  r    s,    KKLHMH* 1r!   r  c                   h    \ rS rSrSrSr0 rSR                  5       rSr	Sr
SrSrS	rS
rSS jrS rSrg)PDFPageLabeli  Nr   zType S P Stz:ARABIC ROMAN_UPPER ROMAN_LOWER LETTERS_UPPER LETTERS_LOWERru  rz  rAr  c                     U(       aG  UR                  5       U R                  ;   a  [        XR                  5       5      n[        U5      U l        U(       a  [        U5      U l        U(       a  [        U5      U l        gg)a	  
A PDFPageLabel changes the style of page numbering as displayed in a PDF
viewer. PDF page labels have nothing to do with 'physical' page numbers
printed on a canvas, but instead influence the 'logical' page numbers
displayed by PDF viewers. However, when using roman numerals (i, ii,
iii...) or page prefixes for appendecies (A.1, A.2...) on the physical
pages PDF page labels are necessary to change the logical page numbers
displayed by the PDF viewer to match up with the physical numbers. A
PDFPageLabel changes the properties of numbering at the page on which it
appears (see the class 'PDFPageLabels' for specifying where a PDFPageLabel
is associated) and all subsequent pages, until a new PDFPageLabel is
encountered.

The arguments to this initialiser determine the properties of all
subsequent page labels. 'style' determines the numberings style, arabic,
roman, letters; 'start' specifies the starting number; and 'prefix' any
prefix to be applied to the page numbers. All these arguments can be left
out or set to None.

* style:

    - None:                       No numbering, can be used to display the prefix only.
    - PDFPageLabel.ARABIC:        Use arabic numbers: 1, 2, 3, 4...
    - PDFPageLabel.ROMAN_UPPER:   Use upper case roman numerals: I, II, III...
    - PDFPageLabel.ROMAN_LOWER:   Use lower case roman numerals: i, ii, iii...
    - PDFPageLabel.LETTERS_UPPER: Use upper case letters: A, B, C, D...
    - PDFPageLabel.LETTERS_LOWER: Use lower case letters: a, b, c, d...

* start:

    -   An integer specifying the starting number for this PDFPageLabel. This
        can be used when numbering style changes to reset the page number back
        to one, ie from roman to arabic, or from arabic to appendecies. Can be
        any positive integer or None. I'm not sure what the effect of
        specifying None is, probably that page numbering continues with the
        current sequence, I'd have to check the spec to clarify though.

* prefix:

    -   A string which is prefixed to the page numbers. Can be used to display
        appendecies in the format: A.1, A.2, ..., B.1, B.2, ... where a
        PDFPageLabel is used to set the properties for the first page of each
        appendix to restart the page numbering at one and set the prefix to the
        appropriate letter for current appendix. The prefix can also be used to
        display text only, if the 'style' is set to None. This can be used to
        display strings such as 'Front', 'Back', or 'Cover' for the covers on
        books.

N)	upper__convertible__r   r  rF  r  Strz   P)rI   stylestartprefixs       r"   r   PDFPageLabel.__init__  sT    d {{} 4 44gd;;=>YeU^DFIe,$'If-466r!   c                 B    [         R                  (       a
  [        5       eg)NF)r   errorOnDuplicatePageLabelPager
  )rI   oths     r"   __lt__PDFPageLabel.__lt__  s    22(**r!   )r$  rF  r#  r?  )r   r   r   r   r&   r%   r  r  r  r"  ARABICROMAN_UPPERROMAN_LOWERLETTERS_UPPERLETTERS_LOWERr   r,  r    r   r!   r"   r  r    sH    KKL!'')MROFKKMM6.pr!   r  c                     [        5       n[        5       Ul        U R                  nU R	                  U5      Ul        [        / SQ5      Ul        [        5       nUR                  5         UR                  5         X1l        UR                  U5        g )N)r   r   r  iI  )r  rG  r  r(   r7   r  r9  r  r  r  r  r  r   )r?   r$  r   r  s       r"   testpager4    sk    	AAJNNE!!%(AH*+AJ%'IK	MM!r!   z/
<<
  /Count
      0
  /Type
      /Outlines
>>c                   F    \ rS rSrSr\R                  SS5      rSrS r	Sr
g)r|   i*  zTEST OUTLINE!r  r)   c                 ,    [        U R                  5      $ rM   )r3   r  rN   s     r"   r8   PDFOutlines0.format.  s    ##r!   r   N)r   r   r   r   r&   DUMMYOUTLINEr  r  r%   r8   r    r   r!   r"   r|   r|   *  s#    !Kd+DK$r!   r|   c                   >    \ rS rSrSrS=r=r=r=r=r	=r
=rrS rSrg)OutlineEntryObjecti1  zan entry in an outlineNc                     0 n[        U R                  5      US'   U R                  US'   U R                  US'   S H  n[	        X5      nUc  M  XBU'   M     [        U5      nUR                  U5      $ )NTitler  Dest)r  NextFirstLastr  )rz   r<  r  r=  r   r   r8   )rI   r?   ru  r  rZ  PDs         r"   r8   OutlineEntryObject.format4  sn    tzz*'
kk(II&	;A A}! < 1yy""r!   r   )r   r   r   r   r`   r<  r=  r  r  r>  r?  r@  r  r8   r    r   r!   r"   r:  r:  1  s2    AEEEEDE6EDE4E%E$
#r!   r:  c                   f    \ rS rSrSrS=rrSrSrS r	SS jr
S rS	 rS
 rS rS rS rSS jrSrg)r}   i@  a  
takes a recursive list of outline destinations like::

    out = PDFOutline1()
    out.setNames(canvas, # requires canvas for name resolution
    "chapter1dest",
    ("chapter2dest",
    ["chapter2section1dest",
    "chapter2section2dest",
    "chapter2conclusiondest"]
    ), # end of chapter2 description
    "chapter3dest",
    ("chapter4dest", ["c4s1", "c4s2"])
    )

Higher layers may build this structure incrementally. KISS at base level.
Nr   c                 J    0 U l         0 U l        / U l        / U l        0 U l        g rM   )destinationnamestotitlesdestinationstotitles
levelstack	buildtree	closedictrX   s    r"   r   PDFOutlines.__init__X  s'    (*%$&!r!   c                    Uc  US:w  a  [        S5      e[        U[        5      (       d  [        S[        U5      -  5      eUS:  a  [        S5      eUc  UnU R                  nU R
                  nU R                  nX%:  a;  X%S-   :  a  [        SU< SU< S	U< S
U< S3	5      eUS-   =p%UR                  / 5        X%:  aX  US   nUS	 US   n	U	S   n
[        U
[        5      (       a  U
u  p[        S[        U
5      -   5      eU
nUnX4U	S'   US-
  nX%:  a  MX  Uc  gUS   R                  U5        X0R                  U'   U(       a  SU R                  U'   X l        g)z/destinationname of None means "close the tree" Nr   zclose tree must have level of 0zlevel must be integer, got %sznegative levels not allowedr)   zcan't jump from outline level z
 to level z&, need intermediates (destinationname=z, title=r  rD  z cannot reset existing sections: )r   r/   r=   r;   currentlevelrH  rI  r3  tupler   rF  rJ  )rI   destinationnamelevelr  closedrM  stacktreecurrentpreviouslastinpreviousr   sectionlists                r"   addOutlineEntryPDFOutlines.addOutlineEntry_  s   "uax>??%$$J7VY]^cYd7d,e&e7*%BCC=/%((~~!^#   FR  TY  [j  lq  "r  s  s#/>1ELL BiGb	RyH%b\N.//&4# !Cd>FZ!Z[[%% $2'>L   "Fb	)9>%%o6Q4>>/2!r!   c                     Xl         g rM   )mydestinations)rI   destinationtrees     r"   setDestinationsPDFOutlines.setDestinations  s    -r!   c                     0 n[        S5      US'   U R                  US'   U R                  US'   U R                  US'   [	        U5      nUR                  U5      $ )Nr   r  r  r?  r@  )r  r  firstlastr   r8   rI   r?   ru  rA  s       r"   r8   PDFOutlines.format  sU    J'&	ZZ'
ZZ'
II&	1yy""r!   c                 H    U R                  X5      nU R                  U5        g rM   translateNamesr]  rI   r   nametreedesttrees       r"   setNamesPDFOutlines.setNames  s     &&v8X&r!   c                 H    U R                  X5      nU R                  U5        g)z1Explicit list so I don't need to do in the callerNre  rg  s       r"   setNameListPDFOutlines.setNameList  s     &&v8X&r!   c                    U R                   nU R                  nU R                  n[        U5      (       aa  [	        U5      (       d  UR                  S5      nUR                  U5      nUnX#;   a  X2   nOXsU'   XtU'   X%;   a  SXV'   X!R                  U5      0$ [        U5      (       aM  / nU H#  n	UR                  U R                  X5      5        M%     [        U[        5      (       a  [        U5      $ U$ [        S[        U5      -  5      e)z=recursively translate tree of names into tree of destinationsr  r)   z5in outline, destination name must be string: got a %s)rF  rG  rJ  r   r
   r  _bookmarkReferencer   r3  rf  r/   rN  r   r;   )
rI   r   objectrF  rG  rJ  destinationr  r  os
             r"   rf  PDFOutlines.translateNames  s    #'#@#@ #88NN	==V$$v}}V/Df 33F;KE10827/05-")*	&55f=>>==A,,V78 &''QxHOPTU[P\\]]r!   c                    U R                   ce  U R                  (       a7  U R                  S5        U R                  S   nU R                  X#5      U l         OS=U l        U l        SU l        SU l        g[        U R                   U R                  5      U l        U R                  XR                   SS9u  U l        U l        SU l        g)zPprepare all data structures required for save operation (create related objects)Nr   rD  r)   rW  )
r[  rH  rX  rf  r`  ra  r  r   rJ  maketree)rI   r?   r   	destnamess       r"   rO   PDFOutlines.prepare  s    &$$T* OOA.	&*&9&9&&L#)--
TY

 4..?
"&--:M:MXY-"ZTY
r!   c                 .   U(       a  SnUR                  UR                  5      nO2U =R                  S-  sl        SU R                  -  nUc  [        S5      e[	        U5      (       d  [        S5      e[        U5      nUS-
  nS =n=pU R                  nU R                  n[        U5       GH,  n[        5       nX>l
        U< SU< 3nUR                  X5      nUb  UUl        Xl        U	c  Un	Un
UnUn
X-   n[        U[        5      (       a  UnOd[        U[        5      (       a8   Uu  nn[        UU5      Ul        U R#                  UUU5      u  Ul        Ul        O[        S[)        U5      -  5      e [+        UR-                  5       5      u  u  nnUU   Ul        UUl        [        U[        5      (       d  GM  UU;   d  GM  UR                   * Ul        GM/     X4$ !   [        S[        U5      -  5      e= f!   [        S	[/        U5      -   5      e= f)
NOutliner)   z
Outline.%sz2non-top level outline elt parent must be specifiedz-destinationtree must be list or tuple, got %s.z7destination tree elt tuple should have two elts, got %sz4destination tree elt should be dict or tuple, got %sz3bad outline leaf dictionary, should have one entry )r7   r   r  r   r   rD  rF  rJ  r  r:  r  r>  r  r/   ri  rN  r  rv  r?  r@  r;   r0  r  r   r<  r=  )rI   r?   r\  r  r@   	levelnamenelts	lastindexlasteltfirstreflastrefrF  rJ  indexeltobjeltnameeltrefeltleafdictsubsectionsr<  r=  s                         r"   rv  PDFOutlines.maketree  s   !I''(9(9:FJJ!OJ$tzz1I~ !UVV_%%LMMO$!G	'+++(#'#@#@ NN	5\E')F"M!*E2G''8F"%%!GGG!(C#d##C&&k.1+X{  %[)<.2mmHkSY.Z+v{ !WZ^_bZc!cdde"&x~~'7"8% 4E:FLFK#e$$): &}I "J ""k$%^adehai%ijje !VW^_bWc!cdds   &G5G;G8;H)rI  rJ  r  rM  rF  rG  r`  ra  rH  r[  r   )r   NNr   )r   r   r   r   r`   r[  r   rK  rM  r   rX  r]  r8   rj  rm  rf  rO   rv  r    r   r!   r"   r}   r}   @  sL    & "!NUGL#"J.#''
^6(5#r!   r}   c                 
   [        U [        5      (       a.  U u  p#[        UR                  5       5      u  u  pEU(       a  XQ;   a  g[	        U 5      (       a0  / nU  H  nUR                  [        Xq5      5        M     [        U5      $ g)zButility for outline: recursively count leaves in a tuple/list treer)   )r/   rN  r0  r  r   r3  r  sum)rS  rJ  r  r  r<  r=  countsr  s           r"   r  r     sm    $u"&x~~/0%*T{{AMM%-. 6{r!   )ReportLab PDF Library - www.reportlab.comc                   L    \ rS rSrSr\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   i  zPDF documents can have basic information embedded, viewable from
File | Document Info in Acrobat Reader.  If this is wrong, you get
Postscript errors while printing, even though it does not print.r  untitled	anonymousunspecifiedr%  Nc                     SU l         g )NFalsetrappedrX   s    r"   r   PDFInfo.__init__  s	    r!   c                     U R                   U R                  U R                  U R                  4 H  nUR	                  [        U5      5        M     g rM   )r  r  r  r&  rn   r   )rI   	md5objectr2   s      r"   r   PDFInfo.digest   s8    **dkk4<<GAWQZ( Hr!   c                    0 n[        U R                  5      US'   [        U R                  5      US'   [        UR                  U R
                  S9=US'   US'   [        U R                  5      US'   [        U R                  5      US'   [        U R                  5      US'   [        U R                  5      US	'   [        U R                  5      US
'   [        U5      nUR                  U5      $ )Nr<  Author)tsr+  ModDateCreationDateProducerCreatorSubjectKeywordsTrapped)rz   r  r  PDFDatero   r*  r!  r  r  r&  r  r  r   r8   rb  s       r"   r8   PDFInfo.format%  s    tzz*'
,(+2h6I6IX\XkXk+ll)q(!$--0* .) .)!$--0*t||,)1yy""r!   c                     U R                  5       nU R                  R                  5        H  u  p#[        XU5        M     U$ )z'shallow copy - useful in pagecatchering)	__klass____dict__r  r  )rI   r   r   rZ  s       r"   r  PDFInfo.copy3  s6     MM'')DAEa  *r!   r  )r   r   r   r   r`   r   r!  r  r  r  r  r&  r*  r   r   r8   r  r    r   r!   r"   r   r     sA    H !H9GEFGHN)
#r!   r   c                   X    \ rS rSrSrS\" S5      4/rSr\S-   rSS jr	S r
S	 rS
 rSrg)
Annotationi;  zsuperclass for all annotations.r  Annot)r  Rectr  r  )BorderCTMFHBSAAASPopupr$  APc                 p    US   n[        U5      (       d  [        U5      US'   [        US   U5      US'   U$ )@transform dict args from python form to pdf string rep as neededr  r  )r   r9  rz   )rI   dr  r  s       r"   cvtdictAnnotation.cvtdictA  s:    yT{{ AfI!!J-7*r!   c                    SU;   a	  US   nUS	 OSn0 nU R                    H	  u  pEXSU'   M     UR                  U5        U R                   H  nXC;  d  M
  [        SU-  5      e   U R	                  X2S9nU R
                  nUR                  5        H.  nXF;  d  M
  [        U R                  R                  < SU< 35      e   [        U5      $ )Nr  r)   keyword argument %s missing)r  z  bad annotation dictionary name )
r  rn   requiredr   r  	permittedr   r   r   r   )rI   kwr  r  r   valr  s          r"   AnnotationDictAnnotation.AnnotationDictH  s    r>\F8F--JTdG (	MMD} !>!EFF " LLL)NN	FFHD$ 4>>KbKbcg!hii  Qr!   c                     [        S5      e)NzEDictString undefined for virtual superclass Annotation, must overloadr   rX   s    r"   DictAnnotation.Dict[  s    `aar!   c                 D    U R                  5       nUR                  U5      $ rM   r  r8   rI   r?   ru  s      r"   r8   Annotation.format_  s    IIKxx!!r!   r   Nr)   )r   r   r   r   r`   r  r  r  r  r  r  r  r8   r    r   r!   r"   r  r  ;  sB    ))+,H6H O OI &b"r!   r  c                   >    \ rS rSr\R
                  S-   rS rS rSrg)FreeTextAnnotationic  )DAc                 4    Xl         X l        X0l        X@l        g rM   )r  r  r  otherkw)rI   r  r  r  r  s        r"   r   FreeTextAnnotation.__init__e  s    	 r!   c                     0 nUR                  U R                  5        U R                  US'   U R                  US'   U R                  US'   SUS'   U R
                  " S0 UD6$ )Nr  r  r  z	/FreeTextr  r   )rn   r  r  r  r  r  rI   r  s     r"   r  FreeTextAnnotation.Dictj  s[    	II&	*''$")""'Q''r!   )r  r  r  r  N)	r   r   r   r   r  r  r   r  r    r   r!   r"   r  r  c  s    $$w.I
(r!   r  c                   H    \ rS rSr\R
                  S-   rSS jrS rS rSr	g)	LinkAnnotationis  )r=  r  PAc                 @    X@l         Xl        X l        X0l        XPl        g rM   )r  r  r  Destinationr  )rI   r  r  r  r  r  s         r"   r   LinkAnnotation.__init__w  s    	 &r!   c                     g)Nz
          << /Type /Annot /Subtype /Link /Rect [71 717 190 734] /Border [16 16 1]
             /Dest [23 0 R /Fit] >>
             r   rX   s    r"   dummyDictStringLinkAnnotation.dummyDictString~  s    r!   c                     0 nUR                  U R                  5        U R                  US'   U R                  US'   U R                  US'   SUS'   U R
                  US'   U R                  " S0 UD6$ )Nr  r  r  z/Linkr  r=  r   )rn   r  r  r  r  r  r  r  s     r"   r  LinkAnnotation.Dict  sj    	kk(II&	*)$$&	""'Q''r!   )r  r  r  r  r  N)z[0 0 1])
r   r   r   r   r  r  r   r  r  r    r   r!   r"   r  r  s  s&    $$ ( I(r!   r  c                   V    \ rS rSrSr\R                  S-   r/ SQ4S jrS
S jrS r	Sr
g	)HighlightAnnotationi  z
HighlightAnnotation is an annotation that highlights the selected area.

Rect is the mouseover area that will show the contents.

QuadPoints is a list of points to highlight, you can have many groups of
four QuadPoints to allow highlighting many lines.
)
QuadPoints)g(\?g{Gz?gffffff?c                 @    Xl         X l        XPl        X0l        X@l        g rM   )r  r  r  r  Color)rI   r  r  r  r  r  s         r"   r   HighlightAnnotation.__init__  s    	 $
r!   c                 n   US   nUS   nUS   n[        U[        5      (       d  [        U5      R                  USS9US'   [        U[        5      (       d  [        U5      R                  USS9US'   [        U[        5      (       d  [        U5      R                  USS9US'   [	        US   U5      US'   U$ )r  r  r  r  r  r  r  )r/   r0   r9  r8   rz   )rI   r  r  r  Quadr  s         r"   r  HighlightAnnotation.cvtdict  s    y#$$$ --aT-:AfI$$$&tn33A43@AlO%%%e_++A4+8AcF!!J-8*r!   c                     0 nUR                  U R                  5        U R                  US'   U R                  US'   SUS'   U R                  US'   U R
                  US'   U R                  " S0 UD6$ )Nr  r  z
/Highlightr  r  r  r   )rn   r  r  r  r  r  r  r  s     r"   r  HighlightAnnotation.Dict  sh    	II&	*#)//,#""'Q''r!   )r  r  r  r  r  Nr  )r   r   r   r   r`   r  r  r   r  r  r    r   r!   r"   r  r    s,     $$'77I9K (r!   r  c                   >    \ rS rSr\R
                  S-   rS rS rSrg)TextAnnotationi  )OpenNamec                     [         R                  " U UU4UR                  SS 5      =(       d    [        U5      UR                  SS5      S.UD6  g )Nr  r  )r   r   r   )r  r  )r  r   r  rect_to_quad)rI   r  r  r  s       r"   r   TextAnnotation.__init__  sO    $$T	 66,t4JT8JffWW-		
 	r!   c                 :    [         R                  U 5      nSUS'   U$ )Nz/Textr  )r  r  r  s     r"   r  TextAnnotation.Dict  s     $$T*)r!   r   N)	r   r   r   r   r  r  r   r  r    r   r!   r"   r  r    s!    #-- 1 Ir!   r  c           	      F    U S   U S   U S   U S   U S   U S   U S   U S   /$ )z1
Utility method to convert a Rect to a QuadPoint
r   r)   r  r*   r   )r  s    r"   r  r    s@     GT!Wd1gtAwGT!Wd1gtAw0 0r!   c                        \ rS rSrS rS rSrg)PDFRectanglei  c                 >    XX44u  U l         U l        U l        U l        g rM   llxllyulxury)rI   r  r  urxr  s        r"   r   PDFRectangle.__init__  s    1431C.$(DHdhr!   c                     [        U R                  U R                  U R                  U R                  /5      n[        X!5      $ rM   )r9  r  r  r  r  r8   )rI   r?   r  s      r"   r8   PDFRectangle.format  s0    dhh$((DHH=>a""r!   r  Nrd  r   r!   r"   r  r    s    D#r!   r  c                   *    \ rS rSrSS jrS rS rSrg)r  i  Nc                 L    Uc
  [        5       nU R                  U5        X l        g rM   )r   _initr+  )rI   r  r+  s      r"   r   PDFDate.__init__  s    :B

2*r!   c                 j    UR                   U l        UR                  U l        UR                  U l        g rM   )YMDhmsdatedhhdmm)rI   r  s     r"   r  PDFDate._init  s#    II	6666r!   c                 z   ^  T R                   =(       d    U 4S jn[        [        U" T R                  6 5      U5      $ )Nc           	      @   > SXX#XETR                   TR                  4-  $ )Nz%D:%04d%02d%02d%02d%02d%02d%+03d'%02d')r  r  )yyyymmddhhmr  rI   s         r"   <lambda> PDFDate.format.<locals>.<lambda>  s"    ;2TXXdhh?@r!   )r+  r8   rz   r
  )rI   r   dfmts   `  r"   r8   PDFDate.format  s:    !! A@ 	 idii 01377r!   )r
  r+  r  r  r  )r   r   r   r   r   r  r8   r    r   r!   r"   r  r    s    +
8r!   r  c                   f    \ rS rSrSrS=r=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g)r  i  a  

not a PDFObject!  This is a placeholder that can delegates
to a pdf object only after it has been defined by the methods
below.

EG a Destination can refer to Appendix A before it has been
defined, but only if Appendix A is explicitly noted as a destination
and resolved before the document is generated...

For example the following sequence causes resolution before doc generation.
    d = Destination()
    d.fit() # or other format defining method call
    d.setPage(p)
    (at present setPageRef is called on generation of the page).
Nc                 ,    Xl         S =U l        U l        g rM   )r   fmtr   rp  s     r"   r   Destination.__init__   s    	##49r!   c                     U R                   nUc  [        SU R                  -  5      eU R                  nUc  [        SU R                  -  5      eX2l        UR	                  U5      $ )NzYformat not resolved, probably missing URL scheme or undefined destination target for '%s'zTPage not bound, probably missing URL scheme or undefined destination target for '%s')r  r   r   r   r8   )rI   r?   rA   ps       r"   r8   Destination.format  s    HH9J  (C  FJ  FO  FO  (O  P  PII9J'}  AE  AJ  AJ  (J  K  Kxx!!r!   c                 (    [        S XU5      U l        g rM   )PDFDestinationXYZr  )rI   lefttopzooms       r"   xyzDestination.xyz
  s    $T4d;r!   c                 $    [        S 5      U l        g rM   )PDFDestinationFitr  rX   s    r"   fitDestination.fit  s    $T*r!   c                 $    [        S 5      U l        g rM   )PDFDestinationFitBr  rX   s    r"   fitbDestination.fitb  s    %d+r!   c                 &    [        S U5      U l        g rM   )PDFDestinationFitHr  rI   r#  s     r"   fithDestination.fith  s    %d3/r!   c                 &    [        S U5      U l        g rM   )PDFDestinationFitVr  rI   r"  s     r"   fitvDestination.fitv  s    %dD1r!   c                 &    [        S U5      U l        g rM   )PDFDestinationFitBHr  r1  s     r"   fitbhDestination.fitbh  s    &tS1r!   c                 &    [        S U5      U l        g rM   )PDFDestinationFitBVr  r6  s     r"   fitbvDestination.fitbv  s    &tT2r!   c                 (    [        S XX45      U l        g rM   )PDFDestinationFitRr  )rI   r"  bottomrightr#  s        r"   fitrDestination.fitr  s    %dD%Er!   c                     Xl         g rM   r   r  s     r"   setPageDestination.setPage  ra  r!   )r  r   r   )r   r   r   r   r`   representationr8   r   r   r%  r)  r-  r2  r7  r;  r?  rE  rI  r    r   r!   r"   r  r    sP      &*)N)Vd$"<+,0223Fr!   r  c                   $    \ rS rSrSrS rS rSrg)r!  i  XYZc                 4    Xl         X0l        X@l        X l        g rM   )r   r#  r$  r"  )rI   r   r"  r#  r$  s        r"   r   PDFDestinationXYZ.__init__   s    			r!   c                     UR                  U R                  5      n[        U[        U R                  5      U R
                  U R                  U R                  /5      n[        X15      $ rM   )	r7   r   r9  r  typenamer"  r#  r$  r8   rI   r?   pagerefr  s       r"   r8   PDFDestinationXYZ.format%  sK    $$TYY/!7DHHdiiY[a""r!   )r"  r   r#  r$  Nr   r   r   r   rQ  r   r8   r    r   r!   r"   r!  r!    s    H
#r!   r!  c                   $    \ rS rSrSrS rS rSrg)r(  i*  Fitc                     Xl         g rM   rH  r  s     r"   r   PDFDestinationFit.__init__,  ra  r!   c                     UR                  U R                  5      n[        U[        U R                  5      /5      n[        X15      $ rM   )r7   r   r9  r  rQ  r8   rR  s       r"   r8   PDFDestinationFit.format.  s9    $$TYY/!79;a""r!   rH  NrU  r   r!   r"   r(  r(  *  s    H#r!   r(  c                       \ rS rSrSrSrg)r,  i3  FitBr   Nr   r   r   r   rQ  r    r   r!   r"   r,  r,  3  s    Hr!   r,  c                   $    \ rS rSrSrS rS rSrg)r0  i6  FitHc                     Xl         X l        g rM   r   r#  )rI   r   r#  s      r"   r   PDFDestinationFitH.__init__8  s    	3(r!   c                     UR                  U R                  5      n[        U[        U R                  5      U R
                  /5      n[        X15      $ rM   )r7   r   r9  r  rQ  r#  r8   rR  s       r"   r8   PDFDestinationFitH.format:  s?    $$TYY/!7CEa""r!   rb  NrU  r   r!   r"   r0  r0  6  s    H'#r!   r0  c                       \ rS rSrSrSrg)r:  i?  FitBHr   Nr^  r   r!   r"   r:  r:  ?      Hr!   r:  c                   $    \ rS rSrSrS rS rSrg)r5  iB  FitVc                     Xl         X l        g rM   )r   r"  )rI   r   r"  s      r"   r   PDFDestinationFitV.__init__D  s    	D)r!   c                     UR                  U R                  5      n[        U[        U R                  5      U R
                  /5      n[        X15      $ rM   )r7   r   r9  r  rQ  r"  r8   rR  s       r"   r8   PDFDestinationFitV.formatF  s?    $$TYY/!7DFa""r!   )r"  r   NrU  r   r!   r"   r5  r5  B  s    H)#r!   r5  c                       \ rS rSrSrSrg)r>  iK  FitBVr   Nr^  r   r!   r"   r>  r>  K  rh  r!   r>  c                   $    \ rS rSrSrS rS rSrg)rB  iN  FitRc                 @    Xl         X l        X0l        X@l        XPl        g rM   )r   r"  rC  rD  r#  )rI   r   r"  rC  rD  r#  s         r"   r   PDFDestinationFitR.__init__P  s    	D)f+jY\PXr!   c                     UR                  U R                  5      n[        U[        U R                  5      U R
                  U R                  U R                  U R                  /5      n[        X15      $ rM   )
r7   r   r9  r  rQ  r"  rC  rD  r#  r8   rR  s       r"   r8   PDFDestinationFitR.formatR  sW    $$TYY/!7DKKQUQ[Q[]a]e]efha""r!   )rC  r"  r   rD  r#  NrU  r   r!   r"   rB  rB  N  s    H]#r!   rB  c                       \ rS rSrSrS rSR                  5        V VVs/ s H  n[        U5      PM     snnn rSr	S r
S rS rS	 rS
 rS rSrgs  snnn f )r  i[  z7each element *could* be reset to a reference if desiredc           	          U R                    H  n[        XUR                  U0 5      5        M!     U R                  5         SU;   a  UR                  S5      U l        g g NProcSet)dict_attributesr  r  r  rz  )rI   kwdsr  s      r"   r   PDFResourceDictionary.__init__]  sO    %%AD488Ab>* & 	((9-DL r!   zPDF Text ImageB ImageC ImageI)
ColorSpacer   r  FontPattern
PropertiesShadingc                 &    U R                   U l        g rM   stdprocsrz  rX   s    r"   r  PDFResourceDictionary.allProcsg  s    }}r!   c                 ,    U R                   S S U l        g )Nr  r  rX   s    r"   r   PDFResourceDictionary.basicProcsk  s    }}Ra(r!   c                 ,    [        [        5      U l        g rM   )r   r'   r  rX   s    r"   r   PDFResourceDictionary.basicFontsn  s    &z2	r!   c                 f    UR                  5        H  u  p#[        U5      U R                  U'   M     g rM   )r  r   r~  )rI   
colorsUsedr  r  s       r"   r  #PDFResourceDictionary.setColorSpaceq  s*    ##%CA!3A!6DOOA &r!   c                 f    UR                  5        H  u  p#[        U5      U R                  U'   M     g rM   )r  r   r  )rI   shadingUsedr  r  s       r"   r   PDFResourceDictionary.setShadingu  s)    $$&CA03DLLO 'r!   c                 F   0 nU R                    HA  n[        X5      n[        U[        5      (       a  U(       a  [	        U5      nXRU'   M;  M=  XBU'   MC     U R
                  nSn[        U5      (       a  U(       a  [        U5      nXRU'   OXBU'   [	        U5      n[        Xa5      $ ry  )	r{  r   r/   ri  r   rz  r   r9  r8   )rI   r?   ru  dnamerZ  dvr   s          r"   r8   PDFResourceDictionary.formaty  s    ))E$A!D!!&q)B!eH  % * LL88a[%eH1b##r!   )r  rz  N)r   r   r   r   r`   r   r  r  r  r{  r  r  r  r  r  r8   r    ).0r  r  s   000r"   r  r  [  sY    A. %D$I$I$KL$Kq
$KLHhO%)374$+ Ms   Ar  c                   j    \ rS rSrSrSrSR                  5       rSrSr	SR                  5       r
S rS	rg
)PDFType1Fonti  z"no init: set attributes explicitlyr)   zType Subtype BaseFont Namer  Type1z;FirstChar LastChar Widths Encoding ToUnicode FontDescriptorc                     0 nU R                    H-  n[        X5      (       d  M  [        X5      n[        U5      X#'   M/     U R                   H$  n[        X5      (       d  M  [        X5      nXBU'   M&     [        U5      nUR                  U5      $ rM   )name_attributesr6   r   r  local_attributesr   r8   )rI   r?   ru  r   r  rA  s         r"   r8   PDFType1Font.format  s    ((Dt""+!%. ) ))Dt""+$ *
 1yy""r!   r   N)r   r   r   r   r`   r%   r  r  r  r  r  r8   r    r   r!   r"   r  r    s6    ,K288:ODGTZZ\#r!   r  c                       \ rS rSrSrSrg)PDFTrueTypeFonti  TrueTyper   N)r   r   r   r   r  r    r   r!   r"   r  r    s    Gr!   r  c                   P    \ rS rSrS=r=r=r=r=r=r	r
SrSrS rS rS rS rS	rg)
re  i  Nr)   r   c                 4    Xl         X l        X0l        X@l        g rM   )lowerxloweryupperxuppery)rI   r  r  r  r  s        r"   r   PDFFormXObject.__init__  s    &kf+RXkr!   c                 f    [        U5      (       a  SR                  U5      n[        U5      U l        g )Nr  )r   r  r3   r  )rI   r   s     r"   setStreamListPDFFormXObject.setStreamList  s#    ;;99T?Dor!   c                     U R                   (       a  [        U R                   R                  5      $ U R                  U R                  U R
                  U R                  /$ )z4get the declared bounding box for the form as a list)BBoxr0  rj  r  r  r  r  rX   s    r"   rf  PDFFormXObject.BBoxList  s=    99		**++KKdkk4;;GGr!   c                 ~   U R                   =(       d7    [        U R                  U R                  U R                  U R
                  /5      U l         U R                  =(       d    [        / SQ5      U l        U R                  (       d  S U l        O[        S5      eU R                  (       d@  U R                  nU(       d  [        5       U l	        O[        5       nX#l        SUl        X0l	        U R                  (       dt  [!        5       nUR#                  5         U R$                  (       a  UR'                  5         OUR)                  5         U R*                  (       a  U R*                  Ul        X@l        U R.                  (       a@  [0        R2                  =(       a    [4        [6        /=(       d    [6        /U R                  l        U R                  R:                  n[=        S5      US'   [=        S5      US'   SUS	'   U R                   US
'   U R                  US'   U R                  US'   U R                  R?                  U5      $ )N)r)   r   r   r)   r   r   z-annotations don't work in PDFFormXObjects yetzxobject form streamr   r  Formr  r)   FormTyper  Matrixr  ) r  r9  r  r  r  r  r  r  r   r  r  rG  rg  r2  r&   r  r  r  r  r  r  r  r   r   r   rC  rD  rE  r3  rh  r  r8   )rI   r?   r  rF  r  sdicts         r"   r8   PDFFormXObject.format  s   II_4;;T[[RVR]R]*^!_	kkAX.@%A{{DK LMM}}[[F *K"	 5 !~~-/I  "~~""$$$&}}$(MM	!$N$-$4$4$X/<9X$j]i\jDMM!((	*f"6?ij		f++h!^^k}}##H--r!   )
r  r  r  r  r  r  r  r  r  r  )r   r   r   r   r  r  r  r  r  r  r  r  r   r   r  rf  r8   r    r   r!   r"   re  re    sI     IMLHLvLLvLL6IIKY&
H'.r!   re  c                   (    \ rS rSrSrSS jrS rSrg)PDFPostScriptXObjecti  z,For embedding PD (e.g. tray commands) in PDFNc                     Xl         g rM   r2  )rI   r2  s     r"   r   PDFPostScriptXObject.__init__  s    r!   c                     [        5       nU R                  Ul        SUl        UR                  n[	        S5      US'   [	        S5      US'   UR                  U5      $ )Nzxobject postscript streamr   r  PSr  )rg  r2  r&   rh  r  r8   )rI   r?   rF  r  s       r"   r8   PDFPostScriptXObject.format  sO    KLL	3	*f"4=ixx!!r!   r  rM   )r   r   r   r   r`   r   r8   r    r   r!   r"   r  r    s    2"r!   r  	DeviceRGB
DeviceGray
DeviceCMYK)RGBr  CMYKc                   B    \ rS rSrSS jrS rS rS rS rS r	S	 r
S
rg)PDFImageXObjecti   Nc                 h   Xl         SU l        SU l        SU l        SU l        [
        R                  =(       a    S=(       d    SU l        SU l        X0l	        Uc  g [        US5      (       a  U R                  U5        g S	S KnUR                  R                  U5      S   R                  5       n[!        U5      n US
;   a  U R#                  U5      (       d8  [
        R                  (       a  U R%                  U5        OU R'                  U5        UR)                  5         g ! UR)                  5         f = f)N      r)   r  )r(  r   z
            003B00 002700 002480 0E4940 114920 14B220 3CB650
            75FE88 17FF8C 175F14 1C07E2 3803C4 703182 F8EDFC
            B2BBC2 BB6F84 31BFC2 18EA3C 0E3E00 07FC00 03F800
            1E1800 1FF800>
            jpeg_fhr   )z.jpgz.jpeg)r   widthheightbitsPerComponent
colorSpacer   rC  _filtersstreamContentmaskr6   loadImageFromSRCr   r  splitextlowerr   loadImageFromJPEGloadImageFromA85loadImageFromRawr   )rI   r   sourcer  r   extsrcs          r"   r   PDFImageXObject.__init__&  s    	
 !&!((?-?E2 	>VI&&!!&) ''""6*1-335C'C//D4J4J34O4O ''--c2--c2				s   :AD D1c                    / n[         R                  " XSS9nU(       d  U R                  US   5      $ U Vs/ s H  oDR                  5       PM     nnUS   R	                  5       n[        US   5      [        US   5      sU l        U l        SSSS	.US
      U l        SU l	        SU l
        U(       a  U R                  US   5        OU R                  S:X  a  S U l        SR                  USS 5      U l        g s  snf )NTIMG
detectJpegr   r)   r*   r  r  r  z/RGBz/Gz/CMYK      r(  r  r  r%  rD  )r   makeA85Imager  rB  r  r=   r  r  r  r  r  _checkTransparencyr  r  r  )rI   r  r  	imagedatar  wordss         r"   r   PDFImageXObject.loadImageFromA85G  s    ))&DI	((Q00(12	1WWY		2!""$#&uQx=U1X
DK"-L,WX]^_X`a !5''A/YYD	WWYq_5 3s   C8c                      [         R                  " U5      nUR                  S5        US   US   sU l        U l        SU l        US   S:X  a  SU l        OUS   S:X  a  SU l        OS	U l        SU l        UR                  5       U l	        [        R                  (       a"  [        U R                  5      U l	        S
U l        OSU l        S U l        g! UR                  S5        f = f!    g= f)Nr   Fr)   r  r  r  r*   r  r  )r(  	DCTDecode)r  T)r   readJPEGInfoseekr  r  r  r  _dotransr  r  r   rC  r   r  r  )rI   	imageFilerY   s      r"   r  !PDFImageXObject.loadImageFromJPEGV  s    	",,Y7q! #'q'47
DK !7a<*DO!W\)DO*DODM&^^-!243E3E!FD7DM(DM	' q!	s   C C' C$$C' 'C+c                    / n[         R                  " XSS9nU(       d  U R                  US   5      $ US   R                  5       n[	        US   5      U l        [	        US   5      U l        SSSS	.US
      U l        SU l        SU l	        U(       a  U R                  US   5        OU R                  S:X  a  S U l        SR                  USS 5      U l        g )NTr  r   r)   r*   r  r  r  r  r  r  r  r  r!   rD  )r   makeRawImager  r  r=   r  r  r  r  r  r  r  r  r  )rI   r  r  r  r  s        r"   r   PDFImageXObject.loadImageFromRawp  s    ))&DI	((Q00!""$q]
%(m"-L,WX]^_X`a !&''A/YYD	 XXi"o6r!   c                    U R                   S:X  a  UR                  (       aV  S U l         [        [        UR                  R	                  5       5      UR                  S S9U l        SS/U R
                  l        g UR                  5       nU(       a   US   US   US   US   US   US   4U l         g S U l         g [        U R                   S5      (       a:  U R                   R                  5       nUS   US   US   US   US   US   4U l         g g )Nr  )r  r   r)   r  rgb)
r  _dataAr  r   
getRGBData_smask_decodegetTransparentr6   r  )rI   imtcr  s       r"   r  "PDFImageXObject._checkTransparency  s    99fyy 	-i		8L8L8N.OPRPYPY_cd'(e#&&(!#A1r!ubeRUBqE JDI $DITYYu%%		A!QqT!A$qtAaD15DI &r!   c                    UR                  5       nU(       a  U R                  U5        gUR                  5       u  U l        U l        UR                  5       n[        R                  " U5      U l        [        R                  (       a"  [        U R                  5      U l        SU l        OSU l        [        UR                     U l        SU l        U R#                  U5        g)z%Extracts the stream, width and heightr  r  r  N)r  r  getSizer  r  r  r  r  r  r   rC  r   r  _mode2CSr  r  r  r  )rI   r  fpr   s       r"   r   PDFImageXObject.loadImageFromSRC  s    ZZ\""2&&(jjl#DJ--/C!%s!3D%6t7I7I%J" = .%bgg.DO$%D!##B'r!   c                    [        U R                  S9nUR                  n[        S5      US'   [        S5      US'   U R                  US'   U R
                  US'   U R                  US'   [        U R                  5      US	'   U R                  S
:X  a#  [        U SS5      (       a  [        / SQ5      US'   O*[        U SS 5      (       a  [        U R                  5      US'   [        [        [        U R                  5      5      US'   [        U R                  5      US'   U R                  (       a  [        U R                  5      US'   [        U SS 5      (       a  U R                  US'   UR!                  U5      $ )Nr  r   r  Imager  WidthHeightBitsPerComponentr~  r  r  r   )r)   r   r)   r   r)   r   r)   r   Decoder  r6  r7  MasksmaskSMask)rg  r  rh  r  r  r  r  r  r   r9  r  r  r  rD  r  r  r8   )rI   r?   rF  ri  s       r"   r8   PDFImageXObject.format  s.    2 23||y)V!'*Y

WX#'#8#8 $T__5\??L(WT*Q-G-G%&78DNT)D))%dll3DN!#gdmm"<=XT//0X99Xdii%8d6l4%%tzztG}xx!!r!   )
r  r  r  r  r  r  r  r   r  r  r  )r   r   r   r   r   r  r  r  r  r  r8   r    r   r!   r"   r  r     s&    B6476 (&"r!   r  c                   &    \ rS rSrS rS rS rSrg)r  i  c                     SSK Jn  [        X5      (       d"  [        SU R                  R
                  -  5      eUR                  (       d"  [        SU R                  R
                  -  5      eXl        g )Nr   )	CMYKColorz%s needs a CMYKColor argumentz-%s needs a CMYKColor argument with a spotName)reportlab.lib.colorsr
  r/   r   r   r   r   r  )rI   r  r
  s      r"   r   PDFSeparationCMYKColor.__init__  sR    2$))<t~~?V?VVWWLt~~OfOffgg	r!   c                    / R                   n[        U R                  R                  5       5       H  u  p#[        U5      nUS:X  a3  US:X  a  U" S5        U" S5        M.  U" [	        U5      5        U" S5        MI  US:X  a	  U" S5        O!U" S5        U" [	        U5      5        U" S5        U" S5        M     S	S
R                  UR                  5      -  $ )zhcreate the postscript code for the tint transfer function
effectively this is tint*c, tint*y, ... tint*kr*           r  z0.0mulr   dupexchz{%s}r  )r3  r  r  r<   r0   r  __self__)rI   rz  r  rZ  s       r"   _makeFuncPS"PDFSeparationCMYKColor._makeFuncPS  s     IITYY^^-.CAAhA!tc6eHeHc!fIeHa4eHeHc!fIeH&	! /" !**-..r!   c                     [        [        S5      [        U R                  R                  5      [        S5      [	        [        [        S[        S5      [        S5      S95      U R                  5       S S945      $ )N
Separationr  r+   )r   r)   )r   r)   r   r)   r   r)   r   r)   )FunctionTypeDomainRange)rh  r2  r3  )rR  r  r  r   rg  r   ri  r  rX   s    r"   r  PDFSeparationCMYKColor.value  sr    L)DII../L)#0)*#25#9"12C"D2 $
 !% 0 0 2 $	   	r!   )r  N)r   r   r   r   r   r  r  r    r   r!   r"   r  r    s    /.r!   r  c                   <    \ rS rSrSr/ rSr\S-   rS rS r	S r
Srg	)
PDFFunctioni  z"superclass for all function types.)r  r  )r  c                 (   0 nU R                    H	  u  p4XBU'   M     UR                  U5        U R                   H  nX2;  d  M
  [        SU-  5      e   U R                  nUR                  5        H  nX5;  d  M
  [        SU-  5      e   [        U5      $ Nr  z!bad annotation dictionary name %s)r  rn   r  r   r  r   r   )rI   r  r  r   r  r  s         r"   FunctionDictPDFFunction.FunctionDict  s    --JTdG (	MMD} !>!EFF " NN	FFHD$ !Dt!KLL  Qr!   c                     [        S5      eNz?Dict undefined for virtual superclass PDFShading, must overloadr  rN   s     r"   r  PDFFunction.Dict      Z[[r!   c                 F    U R                  U5      nUR                  U5      $ rM   r  r  s      r"   r8   PDFFunction.format      IIhxx!!r!   r   N)r   r   r   r   r`   r  r  r  r  r  r8   r    r   r!   r"   r  r    s)    ,H)H#I \
"r!   r  c                       \ rS rSr\R
                  S\" S5      4/-   r\R                  S-   r\R                  S-   rS r	S r
Srg	)
PDFExponentialFunctioni	  r  )r  g      ?)N)C0C1r*  c                 4    Xl         X l        X0l        X@l        g rM   r+  r,  r*  r  )rI   r+  r,  r*  r  s        r"   r   PDFExponentialFunction.__init__	  s    r!   c                     0 nUR                  U R                  5        SUS'   [        U R                  5      US'   [        U R                  5      US'   U R
                  US'   U R                  " S0 UD6$ )Nr  r  r+  r,  r*  r   )rn   r  rR  r+  r,  r*  r  rI   r?   r  s      r"   r  PDFExponentialFunction.Dict
	  sf    	.!$''*$!$''*$#  %1%%r!   r.  N)r   r   r   r   r  r  rR  r  r  r   r  r    r   r!   r"   r)  r)  	  sJ    ##/*2M'N&OOH##f,H%%(99I
&r!   r)  c                   \    \ rS rSr\R
                  S-   r\R                  S-   rS rS rSr	g)PDFStitchingFunctioni	  )	FunctionsBoundsEncodec                 4    Xl         X l        X0l        X@l        g rM   )r5  r6  r7  r  )rI   r5  r6  r7  r  s        r"   r   PDFStitchingFunction.__init__	  s    "r!   c                 B   0 nUR                  U R                  5        SUS'   [        U R                   Vs/ s H  o1R	                  U5      PM     sn5      US'   [        U R
                  5      US'   [        U R                  5      US'   U R                  " S0 UD6$ s  snf )Nr*   r  r5  r6  r7  r   )rn   r  r9  r5  r7   r6  r7  r  )rI   r?   r  r2   s       r"   r  PDFStitchingFunction.Dict	  s    	.!$.."Q.Q#5#5a#8."QR+t{{+(t{{+(  %1%% #Rs   B)r6  r7  r5  r  N)
r   r   r   r   r  r  r  r   r  r    r   r!   r"   r4  r4  	  s.    ##&GGH%%(III
&r!   r4  c                   8    \ rS rSrSrSr\S-   rS rS rS r	Sr
g	)

PDFShadingi$	  z!superclass for all shading types.)ShadingTyper~  )
Backgroundr  	AntiAliasc                     0 nUR                  U5        U R                   H  nX2;  d  M
  [        SU-  5      e   U R                  nUR	                  5        H  nX4;  d  M
  [        SU-  5      e   [        U5      $ r  )rn   r  r   r  r   r   )rI   r  r  r   r  s        r"   ShadingDictPDFShading.ShadingDict(	  su    	MMD} !>!EFF " NN	FFHD$ !Dt!KLL  Qr!   c                     [        S5      er"  r  rN   s     r"   r  PDFShading.Dict4	  r$  r!   c                 F    U R                  U5      nUR                  U5      $ rM   r  r  s      r"   r8   PDFShading.format9	  r'  r!   r   N)r   r   r   r   r`   r  r  rB  r  r8   r    r   r!   r"   r=  r=  $	  s%    +,H<<I
 \
"r!   r=  c                   \    \ rS rSr\R
                  S-   r\R                  S-   rS rS rSr	g)PDFFunctionShadingi=	  )Function)r  r  rJ  c                 (    Xl         X l        X0l        g rM   )rJ  r~  r  )rI   rJ  r~  r  s       r"   r   PDFFunctionShading.__init__@	  s     $r!   c                     0 nUR                  U R                  5        SUS'   [        U R                  5      US'   UR	                  U R
                  5      US'   U R                  " S0 UD6$ )Nr)   r>  r~  rJ  r   )rn   r  r  r~  r7   rJ  rB  r1  s      r"   r  PDFFunctionShading.DictD	  s_    	-!$//2, **4==9*$!$$r!   )r~  rJ  r  N
r   r   r   r   r=  r  r  r   r  r    r   r!   r"   rI  rI  =	  s-    ""]2H$$'GGI%r!   rI  c                   \    \ rS rSr\R
                  S-   r\R                  S-   rS rS rSr	g)PDFAxialShadingiL	  CoordsrJ  rS  r  rJ  Extendc                 :    XX44U l         XPl        X`l        Xpl        g rM   rS  rJ  r~  r  )rI   x0y0x1y1rJ  r~  r  s           r"   r   PDFAxialShading.__init__P	  s    r& $r!   c                    0 nUR                  U R                  5        SUS'   [        U R                  5      US'   [	        U R
                  5      US'   UR                  U R                  5      US'   U R                  " S0 UD6$ )Nr  r>  r~  rS  rJ  r   	rn   r  r  r~  rR  rS  r7   rJ  rB  r1  s      r"   r  PDFAxialShading.DictU	  q    	-!$//2,%dkk2( **4==9*$!$$r!   r~  rS  rJ  r  NrO  r   r!   r"   rQ  rQ  L	  2    ""%;;H$$ (6 6I
%r!   rQ  c                   \    \ rS rSr\R
                  S-   r\R                  S-   rS rS rSr	g)PDFRadialShadingi^	  rR  rT  c	                 <    XX4XV4U l         Xpl        Xl        Xl        g rM   rW  )
rI   rX  rY  r0rZ  r[  r1rJ  r~  r  s
             r"   r   PDFRadialShading.__init__b	  s    rr. $r!   c                    0 nUR                  U R                  5        SUS'   [        U R                  5      US'   [	        U R
                  5      US'   UR                  U R                  5      US'   U R                  " S0 UD6$ )Nr*   r>  r~  rS  rJ  r   r^  r1  s      r"   r  PDFRadialShading.Dictg	  r`  r!   ra  NrO  r   r!   r"   rd  rd  ^	  rb  r!   rd  __main__z-There is no script interpretation for pdfdoc.)r   rM   )__version__r`   r  r  r  collectionsr   r1  r   	reportlabr   r   r   r   r   r	   r
   r   r   r   r   r   reportlab.lib.rl_accelr   r   r   r   r   hashlibr   sysr   	Exceptionr   r$   r%   r&   r'   r(   r  ri  r   r3   r8   rD   formNamerF   r5   r^   rc   PDFtruePDFfalsePDFnullr   r  recompiler  r  r  rz   chrr  r   r  r  r  r  r  rE  r'  rD  rg  rG  rA  r9  rR  rB  r   r@  rq  rE  rG  r  ru   rx   r  r
  r  r  r4  r8  r|   r:  r}   r  r   r   r  r  r  r  r  r  r  r  r  r!  r(  r,  r0  r:  r5  r>  rB  r  r  r  re  r  r  r  r  r  r)  r4  r=  rI  rQ  rd  r   r   r   r!   r"   <module>rz     sX   	   # &  P  P  P Z Z (  	y 	 &    
 	   ='4'  	 	y 
`() `(F 
%i % 


7#	G*	 G*R IT + I + Z /4= 4%9 (( ( ()	' 	' ./(2	 (2T	 
!y !.h 	 k k&i &<#-) #-J&Y &  6') ':3 3j z  0T4j T4n	Y 	&1J &1PH: HV
$9 $# #~#) ~#@  @ 'i 'T&" &"P( ( (Z (6((* ((T( 0#9 #8i 8(-) -`
#	 
##	 #* # #, # #, # #1$I 1$r#9 #4l F>.Y >.@"9 " l	CS"i S"j. .`") "8&[ &$&; &"" "2% %%j %$%z %$ Z	
9: r!   