
    KwgF`                        d Z dZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ dd	lmZ dd
lmZ ddlmZ  G d de       Z!dZ"dZ#dZ$dZ%dZ&dZ' e(d      Z)d Z*ddZ+d Z,e,Z- G d d      Z. G d d      Z/ G d de/      Z0 G d d e/      Z1d!Z2d"Z3d#Z4 G d$ d%e/      Z5d& Z6ddl7Z7 e7jp                  d'      Z9[7d( Z:d) Z; G d* d+e/      Z< e=d,       e=d-      fd.Z> G d/ d0e/      Z? G d1 d2      Z@d3 ZA G d4 d5e?      ZB G d6 d7eB      ZC G d8 d9      ZD eD       ZE G d: d;      ZF eF       ZG G d< d=e/      ZHdd>ZId?ZJ G d@ dAe/      ZK G dB dCeK      ZL G dD dEe/      ZM G dF dGe/      ZN G dH dIe/      ZO G dJ dKe/      ZP G dL dMe/      ZQ G dN dOe/      ZR G dP dQe/      ZS G dR dSeS      ZT G dT dUeS      ZU G dV dWe       ZV G dX dYeS      ZW G dZ d[eS      ZXd\ ZYd]ZZ G d^ d_e/      Z[ G d` dae/      Z\ G db dce/      Z]dddZ^deZ_ G df dge/      Z` G dh die/      Za G dj dkea      Zb G dl dmea      Zc G dn doea      Zd G dp dqed      Zedr Zf G ds dte/      Zg G du dve/      Zh G dw dxe/      Zi G dy dze/      Zj G d{ d|e/      Zk G d} d~ek      Zl G d de/      Zm G d dem      Zn G d de/      Zo G d deo      Zp G d de/      Zq G d de/      Zr G d de/      Zs G d des      Zt G d de/      Zu G d de/      ZvddddZw G d de/      Zx G d d      Zy G d de/      Zz G d dez      Z{ G d dez      Z| G d de/      Z} G d de}      Z~ G d de}      Z G d de}      Zedk(  r	 ed       yy)z3.6.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                       e Zd Zy)PDFErrorN__name__
__module____qualname__     O/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/pdfbase/pdfdoc.pyr   r          r   r   __InternalName____RefOnly____Comment__
BasicFontsPages)      )r&      )transparencyc                 H    t        | t              r| j                  d      S | S )N	extpdfdoc)
isinstancestrencode)xs    r   	pdfdocEncr0   5   s    $.q$5188K <1<r   c                    t        | t              r|s0t        | t              r |j	                  |       j                  |      S | j                  |      }t        j                  s;t        j                  r+t        | t              rt        d| j                  z        |z   }|S t        |       t        t        fv rt        t        |             S t        |       r| S t!        |       rt        |       S t        t#        |             S )zIndirection step for formatting.
       Ensures that document parameters alter behaviour
       of formatting for all elements.
    z%% %s
)r,   	PDFObjecthasattrr"   	Referenceformatr   	invariantpdfCommentsr#   r0   typefloatintr   r	   r
   r-   )elementdocumenttoplevelfs       r   r5   r5   8   s    
 ')$GG[9 %%g.55h??x(A&&9+@+@WWVaEbi'*=*==>q@H	g5#,	& ))			7	!!W&&r   c                     d| z  S )Nz
FormXob.%sr   )externalnames    r   xObjectNamerA   R   s    ,&&r   c                   $    e Zd Zd Zd Zd Zd Zy)NoEncryptionc                     |S )zencode a string, stream, textr   )selfts     r   r.   zNoEncryption.encodeZ   s    r   c                      y Nr   rE   r<   s     r   preparezNoEncryption.prepare]       r   c                      y rH   r   )rE   objnumversions      r   registerzNoEncryption.register`   rK   r   c                      y rH   r   rE   s    r   infozNoEncryption.infoc   s    r   N)r   r   r   r.   rJ   rO   rR   r   r   r   rC   rC   Y   s    r   rC   c                       e Zd Zy)r2   Nr   r   r   r   r2   r2   g   r    r   r2   c                       e Zd ZdZ e       Zy)DummyDocz'used to bypass encryption when requiredN)r   r   r   __doc__rC   encryptr   r   r   rU   rU   j   s    -nGr   rU   c                      e Zd ZdZ e       Zdej                  ej                  de	dfdZ
d Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d$d Z'd! Z(d" Z)d%d#Z*y)&PDFDocumentNr   c                 f   d | _         d| _        d| _        d | _        d| _        |t
        j                  | _        n|| _        | j                  |       || _        t               x}| _
        |j                  d       t        | j                        | _        | j                  j                  }t        |      }|j                  t!        |             i | _        i | _        i | _        i | _        t+               x}x| _        | _        t1               x}	| _        |	|_        |r|nt
        j4                  }|rt7        |      |_        |r
t;               n	t=               x| _        x| _         |_         tC               | _"        i | _#        tI        i       }
d|
_%        | jM                  |
tN               g | _(        y )Nr   r&   s   a reportlab documentzThe standard fonts dictionary))_IDobjectcountershadingCounterinObjectpageCounterr   r6   setCompression_pdfVersionr   	signatureupdater   
_timeStamprF   asciir   idToObjectNumberAndVersion
idToObject
idToOffset
numberToId
PDFCatalogCatalog_catalogPDFPagesr%   documentLang	PDFStringLangPDFOutlines0PDFOutlinesoutlineOutlinesPDFInforR   fontMappingPDFDictionaryr#   r4   r$   delayedFonts)rE   dummyoutlinecompressionr6   filename
pdfVersionlangsigcatpagesDDs              r   __init__zPDFDocument.__init__s   sl     &00DN&DNK(%"u$dn

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

73< *,'-7\99dlT]%Z'
	t!7!7 CHHTlnZeZgggt}s|I	 28r:&r   c                     || _         y rH   rz   rE   onoffs     r   r`   zPDFDocument.setCompression   s
     r   c                 V    |D ]$  }t        | j                  t        |         | _        & y)zREnsure that the pdf version is greater than or equal to that specified by the keysN)maxra   PDF_SUPPORT_VERSION)rE   keysks      r   ensureMinPdfVersionzPDFDocument.ensureMinPdfVersion   s.     	MA"4#3#35H5KLD	Mr   c                 f    | j                   ry| j                  j                  t        |             y)z add information to the signatureN)r[   rb   rc   r   )rE   things     r   updateSignaturezPDFDocument.updateSignature   s!    88Vgen-r   c                     | j                   r| j                   S | j                  j                         }t               }t	        |d      j                  |      }d|z   |z   dz   | _         | j                   S )z<A unique fingerprint for the file (unless in invariant mode)raw)encs   
[sJ   ]
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
)r[   rb   digestrU   PDFTextr5   )rE   r   docIDss       r   IDzPDFDocument.ID   s`    8888O&&(jf'..s33JsN#rrxxr   c                    t        | dd      r"t        d| j                  j                  z        d| _        t        t        |dd       d      rbd}|}t        |dd       }t        |t              rd	|z  }n/t        |      s$d
|j                  j                  t        |      fz  }t        |      }n<t        |      rd}t        |      }t        |d      }nt        dt        |      z        | j                  |      }t        |      r|j!                  d      }|j#                  |       |r1|j%                          dd l}|j(                  dk(  rddlm}  ||       t        |dd       rt/        d|       y y )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   r3   r,   r:   r   idr   open	TypeErrorrepr
GetPDFDatar
   r.   r   closeosr   reportlab.lib.utilsr   print)rE   r{   canvasmyfiler>   datar   r   s           r   
SaveToFilezPDFDocument.SaveToFile   sA   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                    | j                   D ]  }|j                  |         | j                  | j                  _        | j                  j	                  | j
                         | j                  | j                         | j                  | j                         | j                  j                  | |       | j                  j                  dk  rd | j                  _        | j                         S Nr   )rx   
addObjectsr6   rR   r   rb   r4   rk   rt   rJ   readyr5   )rE   r   fnts      r   r   zPDFDocument.GetPDFData   s    $$ 	!CNN4 	! #nn				( 	t||$tyy!dF+==q $(DLL!{{}r   c                 z    | j                   (| j                   dk(  ryt        d| j                   z        d| _         y)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)r^   
ValueErrorrQ   s    r   inPagezPDFDocument.inPage   s6    ==$}}f$fDt}}TUUr   c                     d| _         y)zBspecify that we are in a form xobject (disable page features, etc)formN)r^   rQ   s    r   inFormzPDFDocument.inForm   s    
 r   c                    | j                   }||v r||   S 	 t        j                  |      }|j                  rt	        dt        |      z        |j                  |        ||   S # t        $ r t	        dt        |      z        w xY w)Nz1getInternalFontName(%s) called for a dynamic fontzFont %s not known!)rv   r   getFont_dynamicFontr   r   r   KeyError)rE   
psfontnamefmfontObjs       r   getInternalFontNamezPDFDocument.getInternalFontName   s    j>!H$,,Z8''"#VY]^hYi#ijj""4(*~% H3d:6FFGGHs   AA% %!Bc                 2    dt        | j                        z   S )NPage)r   r_   rQ   s    r   thisPageNamezPDFDocument.thisPageName  s    d4++,,,r   c                 4    t        | j                               S rH   )PDFObjectReferencer   rQ   s    r   thisPageRefzPDFDocument.thisPageRef  s    !$"3"3"566r   c                     | j                         }| j                  ||       | j                  j                  |       | xj                  dz  c_        d | _        y )Nr&   )r   r4   r%   addPager_   r^   )rE   r   r   s      r   r   zPDFDocument.addPage  sH      "tT"

4 Ar   c                     | j                   dk7  r| j                          | j                  |t        |             d| _         y)zadd a Form XObject.r   N)r^   r   r4   rA   )rE   r   r   s      r   addFormzPDFDocument.addForm  s3     ==F"KKMt[./r   c                     d|z  S )NzAnnot.%sr   )rE   r@   s     r   annotationNamezPDFDocument.annotationName#  s    ,&&r   c                 F    | j                  || j                  |             y rH   )r4   r   )rE   r   
annotations      r   addAnnotationzPDFDocument.addAnnotation&  s    z4#6#6t#<=r   c                 :    | j                  |      }t        |      S rH   )r   r   rE   r   internalnames      r   refAnnotationzPDFDocument.refAnnotation)  s    **40!,//r   c                 r    d| j                   z  }| j                  ||       | xj                   dz  c_         |S )NzSh%dr&   )r]   r4   )rE   shadingr   s      r   
addShadingzPDFDocument.addShading-  s6    ,,,		&				!	r   c                 v   |j                   }|s|j                  dk(  r!|j                  dk(  r|j                  dk(  rd}n|j                  dk(  r!|j                  dk(  r|j                  dk(  rd}n_|j                  dk(  r!|j                  dk(  r|j                  dk(  rd}n/|j                  dk(  r |j                  dk(  r|j                  dk(  rd}|st        d|z        |j                  |      }t        |      dd  }|| j                  vr+t        |      j                         }| j                  ||       ||fS )	Nr   BLACKCYANMAGENTAYELLOWz&CMYK colour %r used without a spotName)spotNamer&   )r   cyanmagentayellowblackr   clonePDFNamerg   PDFSeparationCMYKColorvaluer4   )rE   cmyksnamer   seps        r   addColorz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!t&(.446CNN3t$Ezr   c                 N    |d| j                   _        y|| j                   _        y)embeds in PDF fileN(anonymous))rR   title)rE   r   s     r   setTitlezPDFDocument.setTitleH  s    =+DIIO#DIIOr   c                 N    |d| j                   _        y|| j                   _        y)zembedded in PDF fileNr   )rR   author)rE   r   s     r   	setAuthorzPDFDocument.setAuthorO  s!     >,DII%DIIr   c                 N    |d| j                   _        y|| j                   _        yr   Nz(unspecified))rR   subject)rE   r   s     r   
setSubjectzPDFDocument.setSubjectW  s!     ? /DII 'DIIr   c                 N    |d| j                   _        y|| j                   _        yr   )rR   creator)rE   r   s     r   
setCreatorzPDFDocument.setCreator`  s    ? /DII 'DIIr   c                 V    |t         | j                  _        y|| j                  _        y)r   N)_default_producerrR   producer)rE   r   s     r   setProducerzPDFDocument.setProducerg  s     !2DII!)DIIr   c                 N    |d| j                   _        y|| j                   _        y)z/embeds a string containing keywords in PDF fileN )rR   keywords)rE   r  s     r   setKeywordszPDFDocument.setKeywordsn  s"     !#DII!)DIIr   c                 &    || j                   _        y rH   )rR   _dateFormatter)rE   dateFormatters     r   setDateFormatterzPDFDocument.setDateFormatterw  s    #0		 r   c                     t        | j                  j                               }ddlm} |j
                  D ]  }||vs|j                  |        |j                          |S )Nr   )	_fontdata)listrv   r   reportlab.pdfbaser
  standardFontsappendsort)rE   	fontnamesr
  r   s       r   getAvailableFontszPDFDocument.getAvailableFontsz  s[    ))..01	/++ 	'D9$  &	' 	r   c           	      .   | j                   j                  |        | j                  }| j                  }| j	                  |       | j	                  |       d }| j                   j                         }|r| j	                  |      }d}g }| j
                  }| j                  }| j                  }	| j                  }
t        | j                        x| _        }	 |dz  }||vrn||   }|	|   }t        ||      }|j                  |       }t        j                  sKt        j                   r;	 |j"                  j$                  }|j)                  dt'        |      d|d d d       |j)                  |      }||
|<   |j+                  |       | `t-        |      }|dz
  |k7  rt/        d|d|      t1               }|j3                  d|       |j                  |       }|j)                  |      }t5        ||dz   | j	                  |      | j	                  |      || j7                         	      }|j                  |       }|j)                  |       t9        | d
g       D ]  }|j;                  |        |j                  |       S #  t'        |      }Y VxY w)Nr   r&   z% z: class 2   z 
zcounter z' doesn't match number to id dictionary )	startxrefSizeRootInfoEncryptr   	_digiSigs)rW   rJ   rk   rR   r4   ri   rf   rg   rh   PDFFilera   	__accum__PDFIndirectObjectr5   r   r6   r7   r   r   re   addr  lenr   PDFCrossReferenceTable
addsection
PDFTrailerr   r   sign)rE   r   rR   
encryptrefencryptinfocounterids
numbertoididToNVidToObidToOfFileoidobjIOIOf	classnameoffsetlnoxrefxreff
xrefoffsettrailertrailerfdss                            r   r5   zPDFDocument.format  sQ    	T"llyyst
ll'')4J__
00 !((8(8 99qLGj(%W%C+C"3,B))D/C&&9+@+@+ # 6 6I sYs^LMXXc]F F3KJJsO% & N*o19c>U\^abcc%'3D!XXe_
"q5>>#&>>$'  >>$'${2. 	BGGDM	 {{4  =+ %c
Is   (J Jc                 4    t        |      }|| j                  v S )z test for existence of named form)rA   rg   r   s      r   hasFormzPDFDocument.hasForm  s    "4(t..r   c                 p   t        |      }|| j                  v r| j                  |   }t        |d      r|j                  |   S t	        |t
              r|j                         S t	        |t              r,t        |j                  j                  |   j                        S t        dt        |      z        y)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)rA   rg   r3   r<  r,   PDFFormXObjectBBoxList	PDFStreamr  
dictionarydictsequencer   r   )rE   r   boxTyper   theforms        r   getFormBBoxzPDFDocument.getFormBBox  s     #4(4??*ool3Gw8966w??'>2''))GY/G..33G<EEFF !JTRVZ!WXX +r   c                     t        |      S )ziLets canvas find out what form is called internally.
        Never mind whether it is defined yet or not.)rA   rE   r   s     r   getXObjectNamezPDFDocument.getXObjectName  s     4  r   c                 `    i }|D ]  }t        |      }t        |      }|||<    t        |      S )zconstruct an xobject dict (for inclusion in a resource dict, usually)
           from a list of form names (images not yet supported))rA   r   rw   )rE   	formnamesDr   r   	references         r   xobjDictzPDFDocument.xobjDict  sB      	(D&t,L*<8I'AlO	(
 Qr   c                 z   t        |t              }| j                  }||r|j                  t        u r|S t        |t              ri|j                  }|(||k7  r#t        dt        |      dt        |            ||vr$t        dt        |      dt        |      d      t	        |      S | j                  dz   x}| _        |dt        |      z   }||v r,||   }||k7  rt        dt        |      z         t	        |      S |r||_        |d	f| j                  |<   || j                  |<   |||<   t	        |      S )
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,   r2   rg   r   r   r3   r!   r   r   r8   re   r\   rf   ri   )rE   r-  r   iobrg   intnamer\   others           r   r4   zPDFDocument.Reference  sK    Y'__
<9K(KJ3()**GD'M M4:"/ 0 0j( X\]`Xabghobp!qrr%g..-1-?-?-AA*<tM**D:t$Ecz !<T$Z!GHH%d++#'C 1>0B''-)-&
4!$''r   )MediaBoxrH   )+r   r   r   defaultStreamFiltersrC   rW   r   pageCompressionr6   PDF_VERSION_DEFAULTr   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  r5   r:  rE  rH  rM  r4   r   r   r   rY   rY   o   s    nG&66$../3j!M
.
N@ H-7'>0*$&((**1C!J/
Y$!
	 (r   rY   truefalsenullc                        e Zd ZddZd Zd Zy)r   c                      || _         || _        y rH   )rF   r   )rE   rF   r   s      r   r   zPDFText.__init__  s    r   c                     | j                   }t        |      r|j                  | j                        }t	        j
                  |j                  j                  |            }d|z   dz   S )N   <   >)rF   r
   r.   r   binasciihexlifyrW   )rE   r<   rF   results       r   r5   zPDFText.format  sT    FFQ<"A!!("2"2"9"9!"<=f}t##r   c                 8    t               }| j                  |      S rH   )rU   r5   )rE   dummydocs     r   __str__zPDFText.__str__   s    :{{8$$r   N)zutf-8)r   r   r   r   r5   rd  r   r   r   r   r     s    $%r   r   c                     | S rH   r   )ns    r   	PDFnumberrg  $  s    Hr   z[^()]c                     t         j                  d|       } d}| D ]  }|dk(  r|dz  }|dz  }|dk  s y | xr dxs dS )z+test whether a string is balanced in parensr  r   (r&   )_re_cleanparenssub)srf  cs      r   _isbalancedrn  *  s\    Bq!A	A c61a41FAs1	
 5;Q!r   c                 T    	 | j                  d       y# t        $ r
}Y d}~yd}~ww xY w)z(return true if no Pdfdoc encoding errorspdfdocr&   Nr   )r.   UnicodeEncodeError)utextes     r   _checkPdfdocrt  5  s)    X s    	''c                   $    e Zd ZdZddZd Zd Zy)ro   Fc                     t        |t              r4|j                  | _        |j                  | _        |j                  | _        y|| _        || _        || _        y)az  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,   ro   rl  escaper   )rE   rl  rw  r   s       r   r   zPDFString.__init__?  sD     a	"SSDF((DKuuDHDF DKDHr   c           	      D   | j                   }t        | dd      }t        |      r|dk(  rf	 |j                  t        j
                        r|j                  d      }nB|j                  t        j                        r|j                  d      }n|j                  d      }t        |      r|j                  d      }n"t        j
                  |j                  d      z   }nt        |      r|dk(  r@t        |      r|j                  d      }nt        j
                  |j                  d      z   }nb| j                  r|j                  | j                        }n:t        j
                  |j                  d      z   }nt!        dt#        |      z        t        | d	d
      }t%        |j&                  t(              s|j&                  j                  |      }d
}|rc	 dt+        |      z  }|dz  r|j-                  dd      }|dz  r-t/        |      r"|j-                  dd      j-                  dd      }t1        |      S d|z   dz   S #  	 |j                  d       n'#  t        j                  dt        |              xY wY xY w#  t!        d|dt        |            xY w)Nr   auto	utf_16_be	utf_16_leutf8rp  z	Error in z-PDFString argument must be str/unicode not %srw  r&   (%s)zcannot escape     z\012
r(   z\(ri  z\))   (   ))rl  r   r	   
startswithcodecsBOM_UTF16_BEdecodeBOM_UTF16_LErt  r.   r   r   r   r
   unicodeEncValidr   r   r8   r,   rW   rC   r   replacern  r0   )rE   r<   rl  r   urw  ess          r   r5   zPDFString.formatO  s2   FFd5(1:f}||F$7$7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  ''*AFGil* axZZ-axKOZZc*225=R= !8d?"E*d1g%?@ +0G !T!W!EFFs0   B2I J J IJ $I;;J Jc                 2    dt        | j                        z  S )Nr}  )r   rl  rQ   s    r   rd  zPDFString.__str__  s    	$&&)))r   N)r&   ry  )r   r   r   r  r   r5   rd  r   r   r   ro   ro   =  s    O 2#h*r   ro   !   ~   c                     t        |       }t        |      D ]1  \  }}||k  s
||kD  s|dv sdt        t        |            dd  z   ||<   3 ddj	                  |      z   S )Nz
%()<>{}[]##r  /r  )r  	enumeratehexordjoin)r   lohiLirm  s         r   r   r     si     	T
A| '!R41R41,s3q6{12&AaD' 
r   c                   D    e Zd ZdZddZd Zd Zd Zd ZddZ	d	 Z
d
 Zy)rw   TNc                 B    |i | _         y|j                         | _         y)zPdict should be namestring to value eg "a": 122 NOT pdfname to value NOT "/a":122N)rA  copy)rE   rA  s     r   r   zPDFDictionary.__init__  s    <DI		DIr   c                 "    || j                   |<   y rH   rA  )rE   r   r   s      r   __setitem__zPDFDictionary.__setitem__  s    		$r   c                      | j                   |   S rH   r  rE   as     r   __getitem__zPDFDictionary.__getitem__  s    yy|r   c                     || j                   v S rH   r  r  s     r   __contains__zPDFDictionary.__contains__  s    DII~r   c                 Z    |j                  | j                  |         | j                  |<   y rH   )r4   rA  )rE   r   r<   s      r   r4   zPDFDictionary.Reference  s"    ",,TYYt_=		$r   c                 T   | j                   }	 t        |j                               }t        |t              s|j                          |D cg c]*  }t        t        |      |      dz   t        ||   |      z   , }}| j                  rt        j                  s| j                  dk(  r|j                  |      }nJ|j                  }t        t!        dt#        |      d            D ]  } ||d        dj                  |      }d|z   dz   S #  t        t	        |              xY wc c}w )N    forced      
 s   <<
s   
>>)rA  r  r   r   re   r,   r   r  r5   r   	multiliner   pdfMultiLiner  insertreversedranger  )	rE   r<   INDrA  r   r   r  rF   r  s	            r   r5   zPDFDictionary.format  s    yy			$D ${+TYY[RVWQfWQZ)$.vd1gh/GGWWNNy55$..(:RA hhAeAs1vq12 !F		!Aqy  	%+Ws   D /D%D"c                 ,    t        | j                        S rH   )rw   rA  rQ   s    r   r  zPDFDictionary.copy  s    TYY''r   c                     | j                   }|j                         D cg c]  }|j                  d      s| }}|D ]  }|j                  |      ||dd  <    y c c}w )Nr  r&   )rA  r   r  pop)rE   rK  r   Ks       r   	normalizezPDFDictionary.normalize  sZ    II61ALL$5Q66 	 AuuQxAaeH	  7s
   AArH   r  )r   r   r   r  r   r  r  r  r4   r5   r  r  r   r   r   rw   rw     s/    I$ >!&( r   rw   c                       e Zd Zd Zd Zy)checkPDFNamesc                 @    t        t        t        |            | _        y rH   )r  mapr   names)rE   r  s     r   r   zcheckPDFNames.__init__  s    #ge,-
r   c                 \    |j                  d      st        |      }|| j                  v r|S y )Nr  )r  r   r  )rE   r   s     r   r   zcheckPDFNames.__call__  s/    $%.EDJJL r   N)r   r   r   r   r   r   r   r   r  r    s    .r   r  c                     | dv r| S y )N)rW  rX  r   )r   s    r   checkPDFBooleanr    s      , r   c                       e Zd Zi ZddZd Zy)CheckedPDFDictionaryNc                 D    t         j                  | |       |r|| _        y y rH   )rw   r   validate)rE   rA  r  s      r   r   zCheckedPDFDictionary.__init__  s    tD)XT]8r   c                     || j                   vrt        d|z         | j                   |   |      }|t        d|d|      t        j                  | ||       y )Nzinvalid key, %rz
Bad value z	 for key )r  r   rw   r  )rE   r   r   cvalues       r   r  z CheckedPDFDictionary.__setitem__  s[    t}}$.566$t$U+>%EFF!!$tF3r   NN)r   r   r   r  r   r  r   r   r   r  r    s    H.4r   r  c                   H   e Zd Z eeeeeee edj                           edj                           edj                           edj                           edj                           edj                           edj                           edj                                Zy)ViewerPreferencesPDFDictionaryz#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DuplexN)r   r   r   rA  r  r  splitr  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                       e Zd ZdZd Zd Zy)PDFStreamFilterZCompressFlateDecodec                 d    t        |      r|j                  d      }t        j                  |      S )Nr|  )r
   r.   zlibcompressrE   texts     r   r.   zPDFStreamFilterZCompress.encode  s&    T?;;v&D}}T""r   c                 ,    t        j                  |      S rH   )r  
decompress)rE   encodeds     r   r  zPDFStreamFilterZCompress.decode  s    w''r   Nr   r   r   pdfnamer.   r  r   r   r   r  r    s    G#(r   r  c                       e Zd ZdZd Zd Zy)PDFStreamFilterBase85EncodeASCII85Decodec                 X    ddl m} t        |      }t        j                  r ||      }|S )Nr   )_wrap)reportlab.pdfbase.pdfutilsr  r   r   wrapA85)rE   r  r  s      r   r.   z"PDFStreamFilterBase85Encode.encode  s&    4 &;Dr   c                     t        |      S rH   )r   r  s     r   r  z"PDFStreamFilterBase85Encode.decode  s     &&r   Nr  r   r   r   r  r    s    G'r   r  c                   "    e Zd ZdZdZddZd Zy)r?  z@set dictionary elements explicitly stream.dictionary[name]=valuer&   Nc                 F    |
t               }|| _        || _        || _        y rH   )rw   r@  contentfilters)rE   r@  r  r  s       r   r   zPDFStream.__init__	  s$    &J$r   c                 b   | j                   }t        |j                  j                               }| j                  }| j
                  }| j                  t        d      ||j                  }|vd|j                  vrht        |      }|j                          g }|D ]8  }|j                  |      }|j                  dt        |j                               : t        |      |d<   |j                  j                  |      }t!        ||      }t#        |      |d<   t!        ||      }	|	dz   |z   dz   S )Nzstream content not setFilterr   Lengths   
stream
s
   endstream
)r@  rw   rA  r  r  r  r   rT  r  reverser.   r  r   r  PDFArrayrW   r5   r  )
rE   r<   r@  r  r  rffnamesr>   fcfds
             r   r5   zPDFStream.format  s   __
":??#7#7#9:
,,,,<<566?33G8:??#BgBJJLF 5 ((7+a!34	5 $,F#3Jx ""))'2GX&"7|
8J)-">11r   NNN)r   r   r   rV   r"   r   r5   r   r   r   r?  r?    s    JK2r   r?  c                     | t         } | j                         dz   } t        | t        j                  xr t
        t        gxs t        g      }d|_        |S )Nr  )r  r  ztest stream)teststreamcontentstripr?  r   useA85PDFBase85EncodePDFZCompressr#   )r  Ss     r   
teststreamr  /  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                   $    e Zd ZdZd Zd ZddZy)r  Tc                 $    t        |      | _        y rH   )r  rB  )rE   rB  s     r   r   zPDFArray.__init__A  s    Xr   c                 `    t        t        |j                  | j                              | _        y)z'make all objects in sequence referencesN)r  r  r4   rB  rI   s     r   
ReferenceszPDFArray.ReferencesC  s    S!3!3T]]CDr   c                    | j                   D cg c]  }t        ||       }}| j                  rt        j                  s| j                  dk(  r|j                  |      }nct        |      }|dkD  rB|j                  }t        t        d|d            D ]  } ||d        dj                  |      }ndj                  |      }d|z   dz   S c c}w )Nr  
   r  r  s   [ s    ])
rB  r5   r  r   r  r  r  r  r  r  )rE   r<   r  rs  r  rf  rF   r  s           r   r5   zPDFArray.formatF  s    *.--8QVAx 88NNy55$..(:RA!fAt((!%Ar"23  AaK IIaLIIaLqy5   9s   CNr  )r   r   r   r  r   r  r5   r   r   r   r  r  ?  s    I'E!r   r  c                       e Zd ZdZy)PDFArrayCompactFN)r   r   r   r  r   r   r   r  r  V  s    Ir   r  c                       e Zd ZdZd Zd Zy)r  r&   c                      || _         || _        y rH   )r   r  )rE   r   r  s      r   r   zPDFIndirectObject.__init__[  s    	r   c                 
   | j                   }|j                  |   \  }}|j                  j                  ||       t	        | j
                  |d      }t        |d|d      |z   |j                  d      rdz   dz   S dz   dz   S )Nr&   r=   r~  z obj
   
r   s   endobj
)r   rf   rW   rO   r5   r  r0   endswith)rE   r<   r   rf  vfcontents         r   r5   zPDFIndirectObject.format^  s    yy22481!!!Q'$,,1=1-.'007D 	=BD 	r   N)r   r   r   r"   r   r5   r   r   r   r  r  Y  s    Kr   r  c                       e Zd Zd Zd Zy)r   c                     || _         y rH   )r   rG  s     r   r   zPDFObjectReference.__init__i  	    	r   c                     	 t        d|j                  | j                     z        S #  t        dt	        | j                        z        xY w)Nz%s %s Rz:forward reference to %s not resolved upon final formatting)r0   rf   r   r   r   rI   s     r   r5   zPDFObjectReference.formatk  sM    	kY)L)LTYY)WWXX	kWZ^_c_h_hZiijjs	   $' #A
Nr   r   r   r   r5   r   r   r   r   r   h  s    kr   r   c                   (    e Zd ZefdZd Zd Zd Zy)r  c                     g | _         | j                   j                  | _        d| _        | j	                  t        d|z        dz          y )Nr   z%%PDF-%s.%ssA   
% ReportLab Generated PDF document http://www.reportlab.com
)stringsr  r   r1  r  r0   )rE   r|   s     r   r   zPDFFile.__init__s  sD    \\((
 	)MJ67^_ 	r   c                      y rH   r   rQ   s    r   closeOrResetzPDFFile.closeOrReset  s    r   c                 |    t        |      }| j                  }|t        |      z   | _        | j                  |       |S )zGshould be constructed as late as possible, return position where placed)r0   r1  r  r   )rE   rl  ra  s      r   r  zPDFFile.add  s3    aLSVm

1r   c                 8    dj                  | j                        S )Nr   )r  r  rI   s     r   r5   zPDFFile.format  s    xx%%r   N)r   r   r   rV  r   r  r  r5   r   r   r   r  r  q  s    !4 &r   r  c                       e Zd Zd Zd Zy)PDFCrossReferenceSubsectionc                      || _         || _        y rH   )firstentrynumber
idsequence)rE   r#  r$  s      r   r   z$PDFCrossReferenceSubsection.__init__  s     0$r   c                 R   | j                   }| j                  }t        |      }t        |      }i }|dk(  rd|d<   |dz   }|j	                  dd       |j
                  }|j                  }||z   dz
  }	|D ]n  }
||
   \  }}||v r)t        d|dt        |
      dt        ||
               ||	kD  s||k  rt        d|d|d	|	      ||z
  }|
||<   ||
   }d
||fz  ||<   p |d|}|j	                  d|       |j                  d       t        dj                  |            S )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  )r#  r$  r  r  r  rf   rh   r   r   r  r0   r  )rE   r<   r#  r$  entriesnentriestakenr(  rh   lastentrynumberr   numrN   rnumr1  	firstlines                   r   r5   z"PDFCrossReferenceSubsection.format  sT   00__
z"z?Q,E!HzHNN13444((
*83A5 
	AB#BZNS'e| sDQSHVZ[`ac[dVe!fgg?"c*:&: 3P`bq!rss''DE#J^F,/@@GCL
	A  0:	q)$r7+,,r   Nr  r   r   r   r!  r!    s    %-r   r!  c                       e Zd Zd Zd Zd Zy)r  c                     g | _         y rH   )sectionsrQ   s    r   r   zPDFCrossReferenceTable.__init__  s	    r   c                 R    t        ||      }| j                  j                  |       y rH   )r!  r/  r  )rE   
firstentryr&  sections       r   r   z!PDFCrossReferenceTable.addsection  s     -j#>W%r   c                     | j                   }|st        d      dg}| j                   D ]  }t        ||      }|j                  |       ! t	        dj                  |            S )Nzno crossref sectionss   xref
r   )r/  r   r5   r  r0   r  )rE   r<   r/  r  rl  fss         r   r5   zPDFCrossReferenceTable.format  s`    ==344K 	A8$BHHRL	 !%%r   N)r   r   r   r   r   r5   r   r   r   r  r    s    &&r   r  c                       e Zd ZddZd Zy)r!  Nc                     || _         ||t        d      t               x}| _        d|fd|fd|fd|fd|fd|ffD ]  \  }	}
|
	|
||	<    d|_        y )	NzSize and Root keys requiredr  Prevr  r  r   r  r  )r  r   rw   rA  r  )rE   r  r  r7  r  r  r   r  rA  rf  r  s              r   r   zPDFTrailer.__init__  s    "<4<:;;(?*tytnvtnvtntntRj9g2FH 	EQq}Q	  r   c           
          | j                   j                  |d      }dj                  d|dt        t	        | j
                              dg      S )Nr  r  r   s   trailer
s   
startxref
s   
%%EOF
)rA  r5   r  r0   r-   r  )rE   r<   fdicts      r   r5   zPDFTrailer.format  sN    		  e 4xx #dnn-.  	r   )NNNNNNr  r   r   r   r!  r!    s    	 	r   r!  c                       e Zd ZdZdZ ed       ed      ddZdj                         ZeZ	d Z
d	 Zd
 Zd Zd Zd Zy)rj   zDocument Rootr&   rk   UseNoneN)TypePageModerp   z
        Dests Outlines Pages Threads AcroForm Names OpenAction PageMode URI
        ViewerPreferences PageLabels PageLayout JavaScript StructTreeRoot SpiderInfo
        MarkInfo Metadata Tabsc                 r   | j                  |       | j                  }| j                  }i }|j                         D ]  \  }}t	        | ||      }||||<    | j
                  D ]  }t	        | |d       }||||<    |D ]  }||v s|j                  ||         ||<     t        |      }t        ||      S rH   )	check_format__Defaults____Refs__itemsr   __NoDefault__r4   rw   r5   )rE   r<   defaultsRefsrK  r   r  rA  s           r   r5   zPDFCatalog.format  s    (#$$}}>># 	CAaQq!A}!	 ## 	AQt$A}!	
  	0AAv))!A$/!	0 QdH%%r   c                 &    | j                  d       y )NUseOutlinessetPageModerQ   s    r   showOutlinezPDFCatalog.showOutline  s    'r   c                 &    | j                  d       y )N
FullScreenrI  rQ   s    r   showFullScreenzPDFCatalog.showFullScreen  s    &r   c                 *    |rt        |      | _        y y rH   )r   
PageLayout)rE   layouts     r   setPageLayoutzPDFCatalog.setPageLayout  s    %foDO r   c                 *    |rt        |      | _        y y rH   )r   r>  )rE   modes     r   rJ  zPDFCatalog.setPageMode  s    #DMDM r   c                      y)zfor use in subclassesNr   rI   s     r   r@  zPDFCatalog.check_format  rK   r   )r   r   r   r#   r"   r   rA  r  rD  rB  r5   rK  rN  rR  rJ  r@  r   r   r   rj   rj     s^    !KK#I.#I.L" #(%'  H&*('.*r   rj   c                   j    e Zd ZdZdZdZd ed      iZdj                         Z	dgZ
d Zd	 Zd
 Zd Zy)rm   zHPAGES TREE WITH ONE INTERNAL NODE, FOR "BALANCING" CHANGE IMPLEMENTATIONz	page treer&   r=  r%   zKids Count ParentParentc                     g | _         y rH   r   rQ   s    r   r   zPDFPages.__init__  s	    
r   c                      | j                   |   S rH   rY  )rE   items     r   r  zPDFPages.__getitem__  s    zz$r   c                 :    | j                   j                  |       y rH   )r   r  rE   r   s     r   r   zPDFPages.addPage!  s    

$r   c                     | j                   }t        |      }|j                  |       || _        t	        |      | _        y rH   )r   r  r  Kidsr  Count)rE   r<   r   kidss       r   r@  zPDFPages.check_format#  s2    

!	Z
r   N)r   r   r   rV   r#   r"   r   rA  r  rD  rB  r   r  r   r@  r   r   r   rm   rm     sI    RKKGG, L'--/MzH   r   rm   c                       e Zd ZdZdZdZd ed      iZdj                         Z	dj                         Z
dZd	Zd
ZdZdZd
Zi Zi Zd
Zd Zd Zd Zd Zd Zy
)PDFPagez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                 @    | j                   D ]  }t        | |d         y rH   )rD  setattrrG  s     r   r   zPDFPage.__init__F  s#    && 	&DD$%	&r   c                     || _         y rH   r   r   s     r   r`   zPDFPage.setCompressionJ  s
     r   c                 ~    | j                   rt        d      t        |      rdj                  |      dz   }|| _        y )Nz&overridden! must set stream explicitlyr  )Override_default_compilationr   r   r  stream)rE   codes     r   	setStreamzPDFPage.setStreamL  s7    ,,EFF;99T?4'Dr   c                 $    t        |      | _        y rH   )rw   Trans)rE   tranDicts     r   setPageTransitionzPDFPage.setPageTransitionS  s    "8,
r   c                 f   | j                   ry | j                  xsO t        | j                  dv xr dd| j                  | j
                  gxs dd| j
                  | j                  g      | _        | j                  sd | _        n4t        | j                  t              st        | j                        | _        | j                  su| j                  }|st               | _	        nWt               }| j                  r,t        j                  xr t         t"        gxs t"        g|_        ||_        d|_        || _	        | j*                  st-               }|j/                          | j0                  r|j3                          n|j5                          | j6                  r| j6                  |_        | j:                  r| j:                  |_        |j=                  | j>                         |jA                  | jB                         || _        | jD                  s#|jF                  }|jI                  |      | _"        y y )N)Z   i  r   zpage stream)%ri  rS  r  Rotate
pageheight	pagewidthAnnotsr,   r2   Contentsrj  r  r?  rz   r   r  r   r  r  r  r#   	ResourcesPDFResourceDictionary
basicFonts	hasImagesallProcs
basicProcsXObjectsXObject	ExtGState
setShading_shadingUsedsetColorSpace_colorsUsedrW  r%   r4   )rE   r<   rj  r  	resourcesr   s         r   r@  zPDFPage.check_formatV  s   ,,  _$++2I2rqQRSWSbSbcgcqcqNr  3^wxz{  ~B  ~L  ~L  NR  N]  N]  w^  *_{{DK dkk)4&t{{3}}[[F *K## ) 0 0 To|5T fYeXfAI"	 - !~~-/I  "~~""$$$&}}$(MM	!~~&*nn	#  !2!23##D$4$45&DN{{NNE",,U3DK r   )r   r   r   r#   ri  r"   r   rA  r  rD  rB  ru  rt  rj  r{  rz   r~  r  _shadingsUsedrn  r   r`   rl  rp  r@  r   r   r   rc  rc  ,  s    #K $% KGFO L   (--/HIJFIKHKME&!-*4r   rc  c                       e Zd Zy)DuplicatePageLabelPageNr   r   r   r   r  r    r    r   r  c                   4    e Zd ZdZdZi ZdgZg Zd Zd Z	d Z
y)PDFPageLabelsNr   Numsc                     g | _         y rH   )labelsrQ   s    r   r   zPDFPageLabels.__init__  s	    r   c                 >    | j                   j                  ||f       y)a   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  r  )rE   r   labels      r   addPageLabelzPDFPageLabels.addPageLabel  s     	D%=)r   c                    	 | j                   j                          g }| j                   D ]'  \  }}|j                  |       |j                  |       ) t        |      | _
        t        j                  | |      S # t        $ rx t        | j                   D cg c]  }|d   	 nc c}w c}      }t	        dt        t        |D cg c]  }|j                  |      dkD  s| nc c}w c}            z         Y w xY w)Nr   z-

!!!!! Duplicate PageLabel seen for pages %rr&   )r  r  r  sortedr   r  setcountr  r  r  rj   r5   )rE   r<   r/   tmpr  r   r  s          r   r5   zPDFPageLabels.format  s    	AKK ;; 	!KD%MM$MM% 	! V$	  x00 & 	A41!A$445CORVWZgj[}bcnqnwnwxynz{|n|\][}[}W~R  A	As/   A: :C;B#
"!C;C"C"!C;:C;)r   r   r   __comment__r"   rA  rD  rB  r   r  r5   r   r   r   r  r    s,    KKLHMH* 1r   r  c                   ^    e Zd ZdZdZi Zdj                         ZdZdZ	dZ
dZdZd	Zdd
Zd Zy)PDFPageLabelNr   zType S P Stz:ARABIC ROMAN_UPPER ROMAN_LOWER LETTERS_UPPER LETTERS_LOWERrK  rO  rAr  c                     |rF|j                         | j                  v rt        | |j                               }t        |      | _        |rt        |      | _        |rt        |      | _        yy)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   r  rg  Stro   P)rE   stylestartprefixs       r   r   zPDFPageLabel.__init__  sV    d {{} 4 44gd5;;=>YeU^DFIe,$'If-466r   c                 8    t         j                  r
t               y)NF)r   errorOnDuplicatePageLabelPager  )rE   oths     r   __lt__zPDFPageLabel.__lt__  s    22(**r   r  )r   r   r   r#   r"   rA  r  rD  r  ARABICROMAN_UPPERROMAN_LOWERLETTERS_UPPERLETTERS_LOWERr   r  r   r   r   r  r    sH    KKL!'')MROFKKMM6.pr   r  c                 "   t               }t               |_        | j                  }| j	                  |      |_        t        g d      |_        t               }|j                          |j                          ||_        |j                  |       y )N)r   r   rd  iI  )rc  r  rw  r%   r4   rW  r  rS  ry  r|  rz  rx  r   )r<   r  r   r  s       r   testpager    sm    	AAJNNE!!%(AH*+AJ%'IAK	MM!r   z/
<<
  /Count
      0
  /Type
      /Outlines
>>c                   >    e Zd ZdZej                  dd      ZdZd Zy)rq   zTEST OUTLINE!r  r&   c                 ,    t        | j                        S rH   )r0   r  rI   s     r   r5   zPDFOutlines0.format  s    ##r   N)	r   r   r   r#   DUMMYOUTLINEr  r  r"   r5   r   r   r   rq   rq     s#    !Kd+DK$r   rq   c                   6    e Zd ZdZdxZxZxZxZxZxZ	xZ
Zd Zy)OutlineEntryObjectzan entry in an outlineNc                     i }t        | j                        |d<   | j                  |d<   | j                  |d<   dD ]  }t	        | |      }||||<    t        |      }|j                  |      S )NTitlerW  Dest)r7  NextFirstLastr`  )ro   r  rW  r  r   rw   r5   )rE   r<   rK  rf  r  PDs         r   r5   zOutlineEntryObject.format  sw    tzz*'
kk(II&	; 	Aa A}!	 1yy""r   )r   r   r   rV   r  r  rW  r7  r  r  r  r`  r5   r   r   r   r  r    s2    AEEEEDE6EDE4E%E$
#r   r  c                   Z    e Zd ZdZdxZZdZdZd ZddZ	d Z
d Zd	 Zd
 Zd Zd ZddZy)rr   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    i | _         i | _        g | _        g | _        i | _        y rH   )destinationnamestotitlesdestinationstotitles
levelstack	buildtree	closedictrQ   s    r   r   zPDFOutlines.__init__;  s'    (*%$&!r   c                    ||dk7  rt        d      t        |t              st        dt        |      z        |dk  rt        d      ||}| j                  }| j
                  }| j                  }||kD  r8||dz   kD  rt        d|d|d	|d
|d	      |dz   x}}|j                  g        ||k  rT|d   }|d= |d   }	|	d   }
t        |
t              r|
\  }}t        dt        |
      z         |
}|}||f|	d<   |dz
  }||k  rT|y|d   j                  |       || j                  |<   |rd| j                  |<   || _        y)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  r  z cannot reset existing sections: )r   r,   r:   r8   currentlevelr  r  r  tupler   r  r  )rE   destinationnamelevelr   closedr  stacktreecurrentpreviouslastinpreviousr   sectionlists                r   addOutlineEntryzPDFOutlines.addOutlineEntryB  s   "uax>??%$J7VY]^cYd7d,e&e7*%BCC=/%((~~\!^#   FR  TY  [j  lq  "r  s  s#/>1ELLLL BiGb	RyH%b\N./&4#{ !Cd>FZ!Z[[%% $k2'>L L  "Fb	)9>%%o6Q4>>/2!r   c                     || _         y rH   )mydestinations)rE   destinationtrees     r   setDestinationszPDFOutlines.setDestinationsg  s
    -r   c                     i }t        d      |d<   | j                  |d<   | j                  |d<   | j                  |d<   t	        |      }|j                  |      S )Nrt   r=  r`  r  r  )r   r  firstlastrw   r5   rE   r<   rK  r  s       r   r5   zPDFOutlines.formatj  sU    J'&	ZZ'
ZZ'
II&	1yy""r   c                 J    | j                  ||      }| j                  |       y rH   translateNamesr  rE   r   nametreedesttrees       r   setNameszPDFOutlines.setNamest  s"    &&vx8X&r   c                 J    | j                  ||      }| j                  |       y)z1Explicit list so I don't need to do in the callerNr  r  s       r   setNameListzPDFOutlines.setNameListx  s"    &&vx8X&r   c                    | j                   }| j                  }| j                  }t        |      r_t	        |      s|j                  d      }|j                  |      }|}||v r||   }n|||<   |||<   ||v rd||<   ||j                  |      iS t        |      rGg }|D ]#  }	|j                  | j                  ||	             % t        |t              rt        |      S |S t        dt        |      z        )z=recursively translate tree of names into tree of destinationsr|  r&   z5in outline, destination name must be string: got a %s)r  r  r  r   r
   r  _bookmarkReferencer   r  r  r,   r  r   r8   )
rE   r   objectr  r  r  destinationr   r  os
             r   r  zPDFOutlines.translateNames}  s	   #'#@#@ #88NN	=V$v}}V/Df 33F;KE110827(/05 -")*	+&F55f=>>=A 9,,VQ789&'QxHOPTU[P\\]]r   c                    | j                   a| j                  r8| j                  d       | j                  d   }| j                  ||      | _         ndx| _        | _        d| _        d| _        yt        | j                   | j                        | _        | j                  || j                   d      \  | _        | _        d| _        y)zPprepare all data structures required for save operation (create related objects)Nr   r  r&   r  )
r  r  r  r  r  r  r  r   r  maketree)rE   r<   r   	destnamess       r   rJ   zPDFOutlines.prepare  s    &$$T* OOA.	&*&9&9&)&L#)--
TY

 4..?
"&--$:M:MXY-"ZTY
r   c                    |rd}|j                  |j                        }n1| xj                  dz  c_        d| j                  z  }|t        d      t	        |      st        d      t        |      }|dz
  }d x}x}	}
| j                  }| j                  }t        |      D ]  }t               }||_
        |d|}|j                  ||      }|||_        |
|_        |	|}	|}
|}|}
||   }t        |t              r|}n_t        |t              r8	 |\  }}t        ||      |_        | j#                  |||      \  |_        |_        nt        dt)        |      z        	 t+        |j-                               \  \  }}||   |_        ||_        t        |t              s||v s|j                    |_         |	|
fS #  t        dt        |      z        xY w#  t        d	t/        |      z         xY w)
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 )r4   rt   r  r   r   r  r  r  r  r  rW  r  r7  r,   rA  r  r`  r  r  r  r8   r  rC  r   r  r  )rE   r<   r  rW  r=   	levelnamenelts	lastindexlasteltfirstreflastrefr  r  indexeltobjeltnameeltrefeltleafdictsubsectionsr  r  s                         r   r  zPDFOutlines.maketree  s   !I''(9(9:FJJ!OJ$tzz1I~ !UVV_%LMMO$!G	'+++(W#'#@#@ NN	5\ $	-E')F"FM!*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!GGG6)r   NNr   )r   r   r   rV   r  r   r%  r  r   r  r  r5   r  r  r  rJ   r  r   r   r   rr   rr   #  sL    & "!NUGL#"J.#''
^6(5#r   rr   c                     t        | t              r*| \  }}t        |j                               \  \  }}|r||v ryt	        |       r/g }| D ]  }|j                  t        ||              t        |      S y)zButility for outline: recursively count leaves in a tuple/list treer&   )r,   r  r  rC  r   r  r  sum)r  r  r  r  r  r  countsrs  s           r   r  r    su    $u"&;x~~/0%*T{ 	/AMM%9-.	/6{r   )ReportLab PDF Library - www.reportlab.comc                   D    e Zd ZdZeZdZdZdZdZ	dZ
dZd Zd	 Zd
 Zd Zy)ru   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                     d| _         y )NFalse)trappedrQ   s    r   r   zPDFInfo.__init__   	    r   c                     | j                   | j                  | j                  | j                  fD ]  }|j	                  t        |              y rH   )r   r   r   r  rc   r   )rE   	md5objectr/   s      r   r   zPDFInfo.digest  s<    **dkk4<<G 	)AWQZ(	)r   c                    i }t        | j                        |d<   t        | j                        |d<   t        |j                  | j
                        x|d<   |d<   t        | j                        |d<   t        | j                        |d<   t        | j                        |d<   t        | j                        |d	<   t        | j                        |d
<   t        |      }|j                  |      S )Nr  Author)tsr  ModDateCreationDateProducerCreatorSubjectKeywordsTrapped)ro   r   r   PDFDaterd   r  r   r   r   r  r   r  rw   r5   r  s       r   r5   zPDFInfo.format  s    tzz*'
,(+2h6I6IX\XkXk+ll)q(!$--0* .) .)!$--0*t||,)1yy""r   c                     | j                         }| j                  j                         D ]  \  }}t        |||        |S )z'shallow copy - useful in pagecatchering)	__klass____dict__rC  rf  )rE   r   r   r  s       r   r  zPDFInfo.copy  s?     MM'') 	!DAqE1a 	!r   )r   r   r   rV   r   r   r   r   r   r   r  r  r   r   r5   r  r   r   r   ru   ru     sA    H !H9GEFGHN)
#r   ru   c                   N    e Zd ZdZd ed      fgZdZedz   ZddZd Z	d Z
d	 Zy
)
Annotationzsuperclass for all annotations.r=  Annot)r=  Rectrw  Subtype)BorderCTMFHBSAAASPopupr  APc                 f    |d   }t        |      st        |      |d<   t        |d   |      |d<   |S )@transform dict args from python form to pdf string rep as neededr  rw  )r   r  ro   )rE   drw  r  s       r   cvtdictzAnnotation.cvtdict$  s8    yT{ AfI!!J-7*r   c                    d|v r	|d   }|d= nd}i }| j                   D ]
  \  }}|||<    |j                  |       | j                  D ]  }||vst        d|z         | j	                  ||      }| j
                  }|j                         D ]*  }||vst        | j                  j                  d|       t        |      S )Nrw  r&   keyword argument %s missing)rw  z  bad annotation dictionary name )
rE  rc   requiredr   r'  	permittedr   r   r   rw   )rE   kwrw  r&  r   valr+  s          r   AnnotationDictzAnnotation.AnnotationDict+  s    r>\F8F-- 	JT#AdG		MM 	GD1} !>!EFF	G LL&L)NN	FFH 	jD9$ 4>>KbKbcg!hii	j Qr   c                     t        d      )NzEDictString undefined for virtual superclass Annotation, must overloadr   rQ   s    r   DictzAnnotation.Dict>  s    `aar   c                 D    | j                         }|j                  |      S rH   r1  r5   rE   r<   rK  s      r   r5   zAnnotation.formatB  s    IIKxx!!r   Nr&   )r   r   r   rV   r   rE  r*  r+  r'  r.  r1  r5   r   r   r   r  r    sB    ))+,H6H O OI &b"r   r  c                   6    e Zd Zej                  dz   Zd Zd Zy)FreeTextAnnotation)DAc                 <    || _         || _        || _        || _        y rH   )r  rw  r8  otherkw)rE   r  rw  r8  r,  s        r   r   zFreeTextAnnotation.__init__H  s    	 r   c                     i }|j                  | j                         | j                  |d<   | j                  |d<   | j                  |d<   d|d<    | j
                  di |S )Nr  rw  r8  z	/FreeTextr  r   )rc   r:  r  rw  r8  r.  rE   r&  s     r   r1  zFreeTextAnnotation.DictM  s]    	II&	*''$")"t""'Q''r   N)r   r   r   r  r+  r   r1  r   r   r   r7  r7  F  s    $$w.I
(r   r7  c                   >    e Zd Zej                  dz   ZddZd Zd Zy)LinkAnnotation)r  r  PAc                 J    || _         || _        || _        || _        || _        y rH   )r  r  rw  Destinationr:  )rE   r  rw  rA  r  r,  s         r   r   zLinkAnnotation.__init__Z  s&    	 &r   c                      y)Nz
          << /Type /Annot /Subtype /Link /Rect [71 717 190 734] /Border [16 16 1]
             /Dest [23 0 R /Fit] >>
             r   rQ   s    r   dummyDictStringzLinkAnnotation.dummyDictStringa  s    r   c                     i }|j                  | j                         | j                  |d<   | j                  |d<   | j                  |d<   d|d<   | j
                  |d<    | j                  di |S )Nr  r  rw  z/Linkr  r  r   )rc   r:  r  r  rw  rA  r.  r<  s     r   r1  zLinkAnnotation.Dictg  sl    	kk(II&	*)$$&	"t""'Q''r   N)z[0 0 1])r   r   r   r  r+  r   rC  r1  r   r   r   r>  r>  V  s&    $$ ( I(r   r>  c                   J    e Zd ZdZej
                  dz   Zg dfdZddZd Zy)	HighlightAnnotationa  
    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                 J    || _         || _        || _        || _        || _        y rH   )r  rw  r:  rG  Color)rE   r  rw  rG  rI  r,  s         r   r   zHighlightAnnotation.__init__|  s%    	 $
r   c                 b   |d   }|d   }|d   }t        |t              st        |      j                  |d      |d<   t        |t              st        |      j                  |d      |d<   t        |t              st        |      j                  |d      |d<   t	        |d   |      |d<   |S )r%  r  rG  r  r  r9  rw  )r,   r-   r  r5   ro   )rE   r&  rw  r  QuadrI  s         r   r'  zHighlightAnnotation.cvtdict  s    y#$$ --aT-:AfI$$&tn33A43@AlO%%e_++A4+8AcF!!J-8*r   c                     i }|j                  | j                         | j                  |d<   | j                  |d<   d|d<   | j                  |d<   | j
                  |d<    | j                  di |S )Nr  rw  z
/Highlightr  rG  r  r   )rc   r:  r  rw  rG  rI  r.  r<  s     r   r1  zHighlightAnnotation.Dict  sj    	II&	*#)//,#"t""'Q''r   Nr5  )	r   r   r   rV   r  r+  r   r'  r1  r   r   r   rF  rF  q  s,     $$'77I9K (r   rF  c                   6    e Zd Zej                  dz   Zd Zd Zy)TextAnnotation)OpenNamec                     t        j                  | ||f|j                  dd       xs t        |      |j                  dd      d| y )NrG  rI  )r   r   r   )rG  rI  )rF  r   r  rect_to_quad)rE   r  rw  r,  s       r   r   zTextAnnotation.__init__  sO    $$T	 66,t4JT8JffWW-		
 	r   c                 :    t         j                  |       }d|d<   |S )Nz/Textr  )rF  r1  r<  s     r   r1  zTextAnnotation.Dict  s     $$T*)r   N)r   r   r   rF  r+  r   r1  r   r   r   rN  rN    s!    #-- 1 Ir   rN  c           	      F    | d   | d   | d   | d   | d   | d   | d   | d   gS )z9
    Utility method to convert a Rect to a QuadPoint
    r   r&   r  r'   r   )r  s    r   rR  rR    s@     GT!Wd1gtAwGT!Wd1gtAw0 0r   c                       e Zd Zd Zd Zy)PDFRectanglec                 B    ||||f\  | _         | _        | _        | _        y rH   )llxllyulxury)rE   rX  rY  urxr[  s        r   r   zPDFRectangle.__init__  s!    14c31C.$(DHdhr   c                     t        | j                  | j                  | j                  | j                  g      }t        ||      S rH   )r  rX  rY  rZ  r[  r5   )rE   r<   r  s      r   r5   zPDFRectangle.format  s2    dhh$((DHH=>a""r   Nr  r   r   r   rV  rV    s    D#r   rV  c                        e Zd ZddZd Zd Zy)r  Nc                 L    |
t               }| j                  |       || _        y rH   )r   _initr  )rE   r  r  s      r   r   zPDFDate.__init__  s!    :B

2*r   c                 j    |j                   | _        |j                  | _        |j                  | _        y rH   )YMDhmsdatedhhdmm)rE   r  s     r   r`  zPDFDate._init  s#    II	6666r   c                 n      j                   xs  fd}t        t         | j                         |      S )Nc           	      F    d| |||||j                   j                  fz  S )Nz%D:%04d%02d%02d%02d%02d%02d%+03d'%02d')rd  re  )yyyymmddhhmrl  rE   s         r   <lambda>z PDFDate.format.<locals>.<lambda>  s-    ;2b1TXXdhh?@ r   )r  r5   ro   rc  )rE   r   dfmts   `  r   r5   zPDFDate.format  s:    !! A@ 	 idii 01377r   r  )r   r   r   r   r`  r5   r   r   r   r  r    s    +
8r   r  c                   ^    e Zd ZdZdxZxZZd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zy)rA  aM  

    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                 .    || _         d x| _        | _        y rH   )r   fmtr   rG  s     r   r   zDestination.__init__  s    	##49r   c                     | j                   }|t        d| j                  z        | j                  }|t        d| j                  z        ||_        |j	                  |      S )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')rq  r   r   r   r5   )rE   r<   r>   ps       r   r5   z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                 *    t        d |||      | _        y rH   )PDFDestinationXYZrq  )rE   lefttopzooms       r   xyzzDestination.xyz  s    $T4d;r   c                 $    t        d       | _        y rH   )PDFDestinationFitrq  rQ   s    r   fitzDestination.fit  s    $T*r   c                 $    t        d       | _        y rH   )PDFDestinationFitBrq  rQ   s    r   fitbzDestination.fitb  s    %d+r   c                 &    t        d |      | _        y rH   )PDFDestinationFitHrq  rE   rw  s     r   fithzDestination.fith  s    %d3/r   c                 &    t        d |      | _        y rH   )PDFDestinationFitVrq  rE   rv  s     r   fitvzDestination.fitv  s    %dD1r   c                 &    t        d |      | _        y rH   )PDFDestinationFitBHrq  r  s     r   fitbhzDestination.fitbh  s    &tS1r   c                 &    t        d |      | _        y rH   )PDFDestinationFitBVrq  r  s     r   fitbvzDestination.fitbv  s    &tT2r   c                 ,    t        d ||||      | _        y rH   )PDFDestinationFitRrq  )rE   rv  bottomrightrw  s        r   fitrzDestination.fitr  s    %dD&%Er   c                     || _         y rH   r   r]  s     r   setPagezDestination.setPage  r  r   )r   r   r   rV   representationr5   r   r   ry  r|  r  r  r  r  r  r  r  r   r   r   rA  rA    sP      &*)N)Vd$"<+,0223Fr   rA  c                       e Zd ZdZd Zd Zy)ru  XYZc                 <    || _         || _        || _        || _        y rH   )r   rw  rx  rv  )rE   r   rv  rw  rx  s        r   r   zPDFDestinationXYZ.__init__  s    			r   c                     |j                  | j                        }t        |t        | j                        | j
                  | j                  | j                  g      }t        ||      S rH   )	r4   r   r  r   typenamerv  rw  rx  r5   rE   r<   pagerefr  s       r   r5   zPDFDestinationXYZ.format  sM    $$TYY/!7DHHdiiY[a""r   Nr   r   r   r  r   r5   r   r   r   ru  ru    s    H
#r   ru  c                       e Zd ZdZd Zd Zy)r{  Fitc                     || _         y rH   r  r]  s     r   r   zPDFDestinationFit.__init__  r  r   c                     |j                  | j                        }t        |t        | j                        g      }t        ||      S rH   )r4   r   r  r   r  r5   r  s       r   r5   zPDFDestinationFit.format  s;    $$TYY/!79;a""r   Nr  r   r   r   r{  r{    s    H#r   r{  c                       e Zd ZdZy)r~  FitBNr   r   r   r  r   r   r   r~  r~    s    Hr   r~  c                       e Zd ZdZd Zd Zy)r  FitHc                      || _         || _        y rH   )r   rw  )rE   r   rw  s      r   r   zPDFDestinationFitH.__init__  s    	3$(r   c                     |j                  | j                        }t        |t        | j                        | j
                  g      }t        ||      S rH   )r4   r   r  r   r  rw  r5   r  s       r   r5   zPDFDestinationFitH.format  sA    $$TYY/!7CEa""r   Nr  r   r   r   r  r    s    H'#r   r  c                       e Zd ZdZy)r  FitBHNr  r   r   r   r  r  "      Hr   r  c                       e Zd ZdZd Zd Zy)r  FitVc                      || _         || _        y rH   )r   rv  )rE   r   rv  s      r   r   zPDFDestinationFitV.__init__'  s    	D$)r   c                     |j                  | j                        }t        |t        | j                        | j
                  g      }t        ||      S rH   )r4   r   r  r   r  rv  r5   r  s       r   r5   zPDFDestinationFitV.format)  sA    $$TYY/!7DFa""r   Nr  r   r   r   r  r  %  s    H)#r   r  c                       e Zd ZdZy)r  FitBVNr  r   r   r   r  r  .  r  r   r  c                       e Zd ZdZd Zd Zy)r  FitRc                 J    || _         || _        || _        || _        || _        y rH   )r   rv  r  r  rw  )rE   r   rv  r  r  rw  s         r   r   zPDFDestinationFitR.__init__3  s$    	D$)f$+djY\PTPXr   c                     |j                  | j                        }t        |t        | j                        | j
                  | j                  | j                  | j                  g      }t        ||      S rH   )
r4   r   r  r   r  rv  r  r  rw  r5   r  s       r   r5   zPDFDestinationFitR.format5  sY    $$TYY/!7DKKQUQ[Q[]a]e]efha""r   Nr  r   r   r   r  r  1  s    H]#r   r  c                       e Zd ZdZd Zdj                         D  cg c]  }t        |       c}}} ZdZd Z	d Z
d Zd Zd	 Zd
 Zyc c}}} w )ry  z7each element *could* be reset to a reference if desiredc           	          | j                   D ]  }t        | ||j                  |i              ! | j                          d|v r|j                  d      | _        y y NProcSet)dict_attributesrf  r  r}  r  )rE   kwds_s      r   r   zPDFResourceDictionary.__init__@  sV    %% 	+AD488Ab>*	+ 	((9-DL r   zPDF Text ImageB ImageC ImageI)
ColorSpacer  r  FontPattern
PropertiesShadingc                 &    | j                   | _        y rH   stdprocsr  rQ   s    r   r|  zPDFResourceDictionary.allProcsJ  s    }}r   c                 ,    | j                   d d | _        y )Nr  r  rQ   s    r   r}  z PDFResourceDictionary.basicProcsN  s    }}Ra(r   c                 ,    t        t              | _        y rH   )r   r$   r  rQ   s    r   rz  z PDFResourceDictionary.basicFontsQ  s    &z2	r   c                 d    |j                         D ]  \  }}t        |      | j                  |<    y rH   )rC  r   r  )rE   
colorsUsedrm  rl  s       r   r  z#PDFResourceDictionary.setColorSpaceT  s1    ##% 	7CAa!3A!6DOOA	7r   c                 d    |j                         D ]  \  }}t        |      | j                  |<    y rH   )rC  r   r  )rE   shadingUsedrm  rl  s       r   r  z PDFResourceDictionary.setShadingX  s0    $$& 	4CAa03DLLO	4r   c                 "   i }| j                   D ]7  }t        | |      }t        |t              r|s"t	        |      }|||<   3|||<   9 | j
                  }d}t        |      r|rt        |      }|||<   n|||<   t	        |      }t        ||      S r  )	r  r   r,   rA  rw   r  r   r  r5   )rE   r<   rK  dnamer  dvr   s          r   r5   zPDFResourceDictionary.format\  s    )) 	Ee$A!D!&q)B!AeH%	 LL8a[%AeH1b(##r   N)r   r   r   rV   r   r  r   r  r  r|  r}  rz  r  r  r5   ).0rl  r   s   000r   ry  ry  >  sV    A. %D$I$I$KLLq
LHhO%)374$+ Ms   A
ry  c                   b    e Zd ZdZdZdj                         ZdZdZdj                         Z	d Z
y)	PDFType1Fontz"no init: set attributes explicitlyr&   zType Subtype BaseFont Namer  Type1z;FirstChar LastChar Widths Encoding ToUnicode FontDescriptorc                    i }| j                   D ])  }t        | |      st        | |      }t        |      ||<   + | j                  D ]   }t        | |      st        | |      }|||<   " t        |      }|j                  |      S rH   )name_attributesr3   r   r   local_attributesrw   r5   )rE   r<   rK  r   r   r  s         r   r5   zPDFType1Font.format  s    (( 	)DtT"d+!%.$	) )) 	 DtT"d+$	 
 1yy""r   N)r   r   r   rV   r"   r  r  r=  r  r  r5   r   r   r   r  r  w  s6    ,K288:ODGTZZ\#r   r  c                       e Zd ZdZy)PDFTrueTypeFontTrueTypeN)r   r   r   r  r   r   r   r  r    s    Gr   r  c                   H    e Zd ZdxZxZxZxZxZxZZ	dZ
dZd Zd Zd Zd Zy)r=  Nr&   r   c                 <    || _         || _        || _        || _        y rH   )lowerxloweryupperxuppery)rE   r  r  r  r  s        r   r   zPDFFormXObject.__init__  s    &dkf$+RXdkr   c                 \    t        |      rdj                  |      }t        |      | _        y )Nr  )r   r  r0   rj  )rE   r   s     r   setStreamListzPDFFormXObject.setStreamList  s!    ;99T?Dor   c                     | j                   rt        | j                   j                        S | j                  | j                  | j
                  | j                  gS )z4get the declared bounding box for the form as a list)BBoxr  rB  r  r  r  r  rQ   s    r   r>  zPDFFormXObject.BBoxList  s=    99		**++KKdkk4;;GGr   c                    | j                   xs7 t        | j                  | j                  | j                  | j
                  g      | _         | j                  xs t        g d      | _        | j                  sd | _        nt        d      | j                  s=| j                  }|st               | _	        nt               }||_        d|_        || _	        | j                  skt!               }|j#                          | j$                  r|j'                          n|j)                          | j*                  r| j*                  |_        || _        | j.                  r6t0        j2                  xr t4        t6        gxs t6        g| j                  _        | j                  j:                  }t=        d      |d<   t=        d      |d<   d|d	<   | j                   |d
<   | j                  |d<   | j                  |d<   | j                  j?                  |      S )N)r&   r   r   r&   r   r   z-annotations don't work in PDFFormXObjects yetzxobject form streamr  r=  Formr  r&   FormTyper  Matrixrx  ) r  r  r  r  r  r  r  rv  r   rw  rj  r  r?  r  r#   rx  ry  rz  r{  r|  r}  r~  r  rz   r   r  r   r  r  r@  r   r5   )rE   r<   rj  r  r  sdicts         r   r5   zPDFFormXObject.format  s   II_4;;T[[RVR]R]*^!_	kkAX.@%A{{DK LMM}}[[F *K"	 5 !~~-/I  "~~""$$$&}}$(MM	!$DN$-$4$4$X/<9X$j]i\jDMM!((	*f"6?ij		f++h!^^k}}##H--r   )r   r   r   r~  rv  r  r  rw  rj  rx  r{  rz   r   r  r>  r5   r   r   r   r=  r=    sI     IMLHLvLLvLL6IIKY&
H'.r   r=  c                       e Zd ZdZddZd Zy)PDFPostScriptXObjectz,For embedding PD (e.g. tray commands) in PDFNc                     || _         y rH   r  )rE   r  s     r   r   zPDFPostScriptXObject.__init__  r  r   c                     t               }| j                  |_        d|_        |j                  }t	        d      |d<   t	        d      |d<   |j                  |      S )Nzxobject postscript streamr  r=  PSr  )r?  r  r#   r@  r   r5   )rE   r<   r  r  s       r   r5   zPDFPostScriptXObject.format  sO    KLL	3	*f"4=ixx!!r   rH   )r   r   r   rV   r   r5   r   r   r   r  r    s    2"r   r  	DeviceRGB
DeviceGray
DeviceCMYK)RGBr  CMYKc                   8    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	y)
PDFImageXObjectNc                 4   || _         d| _        d| _        d| _        d| _        t
        j                  xr dxs d| _        d| _        || _	        |y t        |d      r| j                  |       y d	d l}|j                  j                  |      d   j                         }t!        |      }	 |d
v r| j#                  |      s3t
        j                  r| j%                  |       n| j'                  |       |j)                          y # |j)                          w xY w)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   r  _filtersstreamContentmaskr3   loadImageFromSRCr   pathsplitextlowerr   loadImageFromJPEGloadImageFromA85loadImageFromRawr   )rE   r   sourcer  r   extsrcs          r   r   zPDFImageXObject.__init__	  s    	
 !&!((?-?E2 	>VI&!!&) ''""6*1-335C'C//D4J4J34O ''--c2--c2				s   ,AD Dc                    g }t        j                  ||d      }|s| j                  |d         S |D cg c]  }|j                          }}|d   j	                         }t        |d         t        |d         c| _        | _        dddd	|d
      | _        d| _	        d| _
        |r| j                  |d          n| j                  dk(  rd | _        dj                  |dd       | _        y c c}w )NTIMG
detectJpegr   r&   r'   r  r  r  z/RGBz/Gz/CMYK      r  r  ry  r  r  )r   makeA85Imager   r  r  r:   r  r  r  r  r  _checkTransparencyr  r  r  )rE   r  r  	imagedatarl  wordss         r   r  z PDFImageXObject.loadImageFromA85*  s    ))&SDI	((Q00(121QWWY2	2!""$#&uQx=U1X
DK"-L,WX]^_X`a !5''A/YYD	WWYq_5 3s   C.c                    	 	 t        j                  |      }|j                  d       	 |d   |d   c| _        | _        d| _        |d   dk(  rd| _        n|d   dk(  rd| _        nd	| _        d| _        |j                         | _	        t        j                  r)t        | j                        | _	        d
| _        d | _        yd| _        d | _        y# |j                  d       w xY w#  Y yxY w)Nr   Fr&   r  r  r  r'   r  r  )r  	DCTDecode)r  T)r   readJPEGInfoseekr  r  r  r  _dotransreadr  r   r  r   r  r  )rE   	imageFilerR   s      r   r  z!PDFImageXObject.loadImageFromJPEG9  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                    g }t        j                  ||d      }|s| j                  |d         S |d   j                         }t	        |d         | _        t	        |d         | _        dddd	|d
      | _        d| _        d| _	        |r| j                  |d          n| j                  dk(  rd | _        dj                  |dd       | _        y )NTr  r   r&   r'   r  r  r  r  r  r  r  ry  r   r  )r   makeRawImager   r  r:   r  r  r  r  r  r  r  r  r  )rE   r  r  r  r  s        r   r  z PDFImageXObject.loadImageFromRawS  s    ))&SDI	((Q00!""$q]
%(m"-L,WX]^_X`a !&''A/YYD	 XXi"o6r   c                     | j                   dk(  r|j                  rYd | _         t        t        |j                  j	                               |j                  d       | _        ddg| j
                  _        y |j                         }|r |d   |d   |d   |d   |d   |d   f| _         y d | _         y t        | j                   d      r:| j                   j                         }|d   |d   |d   |d   |d   |d   f| _         y y )Nry  )r  r   r&   r  rgb)
r  _dataAr  r   
getRGBData_smask_decodegetTransparentr3   r!  )rE   imtcr  s       r   r  z"PDFImageXObject._checkTransparencyb  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                    |j                         }|r| j                  |       y|j                         \  | _        | _        |j                         }t        j                  |      | _        t        j                  r"t        | j                        | _        d| _        nd| _        t        |j                     | _        d| _        | j#                  |       y)z%Extracts the stream, width and heightr  r  r  N)r  r  getSizer  r  r#  r  r  r  r   r  r   r  _mode2CSrT  r  r  r  )rE   r'  fpr   s       r   r   z PDFImageXObject.loadImageFromSRCr  s    ZZ\""2&&(jjl#DJ--/C!%s!3D%6t7I7I%J" = .%bgg.DO$%D!##B'r   c                    t        | j                        }|j                  }t        d      |d<   t        d      |d<   | j                  |d<   | j
                  |d<   | j                  |d<   t        | j                        |d	<   | j                  d
k(  rt        | dd      rt        g d      |d<   n%t        | dd       rt        | j                        |d<   t        t        t        | j                              |d<   t        | j                        |d<   | j                  rt        | j                        |d<   t        | dd       r| j                  |d<   |j!                  |      S )Nr  r  r=  Imager  WidthHeightBitsPerComponentr  r  r  r   )r&   r   r&   r   r&   r   r&   r   Decoder%  r  r  MasksmaskSMask)r?  r  r@  r   r  r  r  r  r   r  r%  r  r  r  r  r4  r5   )rE   r<   r  rA  s       r   r5   zPDFImageXObject.format  s%    2 23||y)V!'*Y

WX#'#8#8 $T__5\??L(WT*Q-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   r5   r   r   r   r  r    s&    B6476 (&"r   r  c                       e Zd Zd Zd Zd Zy)r   c                     ddl m} t        ||      s"t        d| j                  j
                  z        |j                  s"t        d| j                  j
                  z        || _        y )Nr   )	CMYKColorz%s needs a CMYKColor argumentz-%s needs a CMYKColor argument with a spotName)reportlab.lib.colorsr8  r,   r   r   r   r   r   )rE   r   r8  s      r   r   zPDFSeparationCMYKColor.__init__  sS    2$y)<t~~?V?VVWWLt~~OfOffgg	r   c                    g j                   }t        | j                  j                               D ]|  \  }}t        |      }|dk(  r0|dk(  r |d        |d       , |t	        |              |d       F|dk(  r	 |d       n! |d        |t	        |              |d        |d       ~ d	d
j                  |j                        z  S )zpcreate 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~  )r  r  r   r9   r-   r  __self__)rE   rO  r  r  s       r   _makeFuncPSz"PDFSeparationCMYKColor._makeFuncPS  s     IITYY^^-. 	CAaAhA!tc6eHeHc!fIeHa4eHeHc!fIeH&	!	" !**-..r   c                     t        t        d      t        | j                  j                        t        d      t	        t        t        dt        d      t        d                  | j                         d       f      S )N
Separationr  r(   )r   r&   )r   r&   r   r&   r   r&   r   r&   )FunctionTypeDomainRange)r@  r  r  )r  r   r   r   r?  rw   rA  r@  rQ   s    r   r   zPDFSeparationCMYKColor.value  sr    L)DII../L)#0)*#25#9"12C"D2 $
 !% 0 0 2 $	   	r   N)r   r   r   r   r@  r   r   r   r   r   r     s    /.r   r   c                   4    e Zd ZdZg ZdZedz   Zd Zd Zd Z	y)PDFFunctionz"superclass for all function types.)rC  rD  )rE  c                    i }| j                   D ]
  \  }}|||<    |j                  |       | j                  D ]  }||vst        d|z         | j                  }|j                         D ]  }||vst        d|z         t        |      S Nr)  z!bad annotation dictionary name %s)rE  rc   r*  r   r+  r   rw   )rE   r,  r&  r   r-  r+  s         r   FunctionDictzPDFFunction.FunctionDict  s    -- 	JT#AdG		MM 	GD1} !>!EFF	G NN	FFH 	MD9$ !Dt!KLL	M Qr   c                     t        d      Nz?Dict undefined for virtual superclass PDFShading, must overloadr0  rI   s     r   r1  zPDFFunction.Dict      Z[[r   c                 F    | j                  |      }|j                  |      S rH   r3  r4  s      r   r5   zPDFFunction.format      IIhxx!!r   N)
r   r   r   rV   rE  r*  r+  rJ  r1  r5   r   r   r   rG  rG    s)    ,H)H#I \
"r   rG  c                       e Zd Zej                  d ed      fgz   Zej                  dz   Zej                  dz   Zd Zd Z	y)PDFExponentialFunctionrD  )r;  g      ?)N)C0C1rR  c                 <    || _         || _        || _        || _        y rH   )rS  rT  rR  r:  )rE   rS  rT  rR  r,  s        r   r   zPDFExponentialFunction.__init__  s    r   c                     i }|j                  | j                         d|d<   t        | j                        |d<   t        | j                        |d<   | j
                  |d<    | j                  di |S )Nr  rC  rS  rT  rR  r   )rc   r:  r  rS  rT  rR  rJ  rE   r<   r&  s      r   r1  zPDFExponentialFunction.Dict  sh    	.!$''*$!$''*$# t  %1%%r   N)
r   r   r   rG  rE  r  r*  r+  r   r1  r   r   r   rQ  rQ    sJ    ##/*2M'N&OOH##f,H%%(99I
&r   rQ  c                   T    e Zd Zej                  dz   Zej
                  dz   Zd Zd Zy)PDFStitchingFunction)	FunctionsBoundsEncodec                 <    || _         || _        || _        || _        y rH   )rZ  r[  r\  r:  )rE   rZ  r[  r\  r,  s        r   r   zPDFStitchingFunction.__init__  s    "r   c                 >   i }|j                  | j                         d|d<   t        | j                  D cg c]  }|j	                  |       c}      |d<   t        | j
                        |d<   t        | j                        |d<    | j                  di |S c c}w )Nr'   rC  rZ  r[  r\  r   )rc   r:  r  rZ  r4   r[  r\  rJ  )rE   r<   r&  r/   s       r   r1  zPDFStitchingFunction.Dict  s    	.!$.."QQ8#5#5a#8"QR+t{{+(t{{+( t  %1%% #Rs   BN)r   r   r   rG  r*  r+  r   r1  r   r   r   rY  rY    s.    ##&GGH%%(III
&r   rY  c                   0    e Zd ZdZdZedz   Zd Zd Zd Zy)
PDFShadingz!superclass for all shading types.)ShadingTyper  )
Backgroundr  	AntiAliasc                     i }|j                  |       | j                  D ]  }||vst        d|z         | j                  }|j	                         D ]  }||vst        d|z         t        |      S rI  )rc   r*  r   r+  r   rw   )rE   r,  r&  r   r+  s        r   ShadingDictzPDFShading.ShadingDict	  s    	MM 	GD1} !>!EFF	G NN	FFH 	MD9$ !Dt!KLL	M Qr   c                     t        d      rL  r0  rI   s     r   r1  zPDFShading.Dict	  rM  r   c                 F    | j                  |      }|j                  |      S rH   r3  r4  s      r   r5   zPDFShading.format	  rO  r   N)	r   r   r   rV   r*  r+  re  r1  r5   r   r   r   r`  r`  	  s%    +,H<<I
 \
"r   r`  c                   T    e Zd Zej                  dz   Zej
                  dz   Zd Zd Zy)PDFFunctionShading)Function)rD  r  rj  c                 .    || _         || _        || _        y rH   )rj  r  r:  )rE   rj  r  r,  s       r   r   zPDFFunctionShading.__init__#	  s     $r   c                     i }|j                  | j                         d|d<   t        | j                        |d<   |j	                  | j
                        |d<    | j                  di |S )Nr&   ra  r  rj  r   )rc   r:  r   r  r4   rj  re  rW  s      r   r1  zPDFFunctionShading.Dict'	  sa    	-!$//2, **4==9*t$!$$r   Nr   r   r   r`  r*  r+  r   r1  r   r   r   ri  ri   	  s-    ""]2H$$'GGI%r   ri  c                   T    e Zd Zej                  dz   Zej
                  dz   Zd Zd Zy)PDFAxialShadingCoordsrj  rq  rD  rj  Extendc                 D    ||||f| _         || _        || _        || _        y rH   rq  rj  r  r:  )rE   x0y0x1y1rj  r  r,  s           r   r   zPDFAxialShading.__init__3	  s'    2r2& $r   c                    i }|j                  | j                         d|d<   t        | j                        |d<   t	        | j
                        |d<   |j                  | j                        |d<    | j                  di |S )Nr  ra  r  rq  rj  r   	rc   r:  r   r  r  rq  r4   rj  re  rW  s      r   r1  zPDFAxialShading.Dict8	  s    	-!$//2,%dkk2( **4==9*t$!$$r   Nrm  r   r   r   ro  ro  /	  2    ""%;;H$$ (6 6I
%r   ro  c                   T    e Zd Zej                  dz   Zej
                  dz   Zd Zd Zy)PDFRadialShadingrp  rr  c	                 H    ||||||f| _         || _        || _        |	| _        y rH   ru  )
rE   rv  rw  r0rx  ry  r1rj  r  r,  s
             r   r   zPDFRadialShading.__init__E	  s+    2r2r2. $r   c                    i }|j                  | j                         d|d<   t        | j                        |d<   t	        | j
                        |d<   |j                  | j                        |d<    | j                  di |S )Nr'   ra  r  rq  rj  r   r{  rW  s      r   r1  zPDFRadialShading.DictJ	  r|  r   Nrm  r   r   r   r  r  A	  r}  r   r  __main__z-There is no script interpretation for pdfdoc.)r   rH   )__version__rV   r_  r  r  collectionsr   r  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%   rV  rA  r   r0   r5   rA   formNamerC   r2   rU   rY   PDFtruePDFfalsePDFnullr   rg  recompilerj  rn  rt  ro   chrr   rw   r  r  r  r  r  r  r  r   r?  r  r  r  r  r  r   r  r!  r  r!  rj   rm   rc  r  r  r  r  r  rq   r  rr   r  r   ru   r  r7  r>  rF  rN  rR  rV  r  rA  ru  r{  r~  r  r  r  r  r  ry  r  r  r=  r  r+  r  r   rG  rQ  rY  r`  ri  ro  r  r   r   r   r   r   <module>r     sN   	   # &  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 &  63 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   