
    '	4j7h                       d Z ddlZddlZddlmZmZ ddlmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ dd	lmZ d
dlmZmZ d
dlmZmZ d
dl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'm(Z(m)Z) d
dl*m+Z+ d
dl,m-Z- d
dl.m/Z/m0Z0m1Z1 d
dl2m3Z3m4Z4m5Z5m6Z6 d
dl7m8Z8m9Z9 d
dl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZEmFZGmHZI d
dlJmKZKmLZL 	 ddlMmNZN ddlPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZY eQr0d
dlmZZZm[Z[ d
dl\m]Z]m^Z^ d
dlm_Z_m`Z` d
dl&maZa d
dlbmcZc d
d ldmeZe d
d!lfmgZg  ej                  ei      Zjd"d#d$d%Zk G d& d'e      Zl G d( d)el      Zm G d* d+e@      Zn G d, d-e@      Zo G d. d/e@      Zp G d0 d1e@      Zq G d2 d3      Zr G d4 d5e@      Zs G d6 d7e@      Zt G d8 d9e>      Zu G d: d;e>      Zv G d< d=e>      Zw G d> d?e>      Zx G d@ dA      Zy G dB dCe@      Zz G dD dEe@      Z{ G dF dGe@      Z| G dH dIel      Z} G dJ dK      Z~eXeee<dLdMdNdOf   Z G dP dQ      Z G dR dS      Z	 	 	 dmdTe+dUedVedWedXedYedZed[eVe   d\efd]Zd^e)d\efd_Zd`eeef   d\efdaZdbeeef   d\efdcZdnddedeed\efdfZdgeez  dhed\e>fdiZdjdkdhed\e>fdlZy# eO$ r dZNY w xY w)oai  
This module contains the serialization logic that produces a PDF document from a FPDF instance.
Most of the code in this module is used when FPDF.output() is called.

The contents of this module are internal to fpdf2, and not part of the public API.
They may change at any time without prior warning or any deprecation period,
in non-backward-compatible ways.
    N)ABCabstractmethod)OrderedDictdefaultdict)contextmanager)datetimetimezone)escape)BytesIO)subset   )AnnotationDictPDFAnnotation)ImageSoftMaskPaintSoftMask)	Transform)OutputIntentSubTypePageLabelStylePDFResourceTypeSignatureFlag)FPDFException)	Type3Font)
CORE_FONTSCoreFontTTFFont)RasterImageInfo)TotalPagesSubstitutionFragment)OutlineDictionaryOutlineItemDictionarybuild_outline_objs)GradientMeshShadingPatternShading)	Signaturesign_content)DestinationXYZNamePDFArrayPDFContentStreamPDFDate	PDFObject	PDFStringRawbuild_obj_dictcreate_dictionary_stringcreate_list_stringiobj_ref)	int2romanint_to_letters)signer)	TYPE_CHECKINGAny	ItemsViewIteratorLiteralOptionalSequenceUnioncast)
BlendGroupGraphicsStyle)EncryptionDictionaryStandardSecurityHandler)
PageLayoutPageMode)PDFFontDescriptor)FPDF)ViewerPreferences)
Transition)z/Fit)z/FitHnull)/XYZrI   rI   1)fullpage	fullwidthrealc                   0    e Zd Ze	 dded   defd       Zy)ContentWithoutIDN_security_handlerrB   returnc                     t         N)NotImplementedErrorselfrQ   s     8/DATA/.local/lib/python3.12/site-packages/fpdf/output.py	serializezContentWithoutID.serialize[   s
     "!    rT   )__name__
__module____qualname__r   r;   strrY    rZ   rX   rP   rP   Y   s-    GK"!)*C!D"	" "rZ   rP   c                   :    e Zd ZdZdeddfdZ	 d	ded   defdZy)
	PDFHeaderu  
    Emit the PDF file header as required by ISO 32000-1, §7.5.2 “File header”.

    The header consists of:
      1) A line starting with the literal "%PDF-" followed by the file version
      2) If the file contains binary data an immediate second line that is a comment
         starting with "%" and containing at least four bytes with values ≥ 128 (non-ASCII).
         This helps file-transfer tools treat the content as binary rather than text.
    pdf_versionrR   Nc                     || _         y rT   rb   )rW   rb   s     rX   __init__zPDFHeader.__init__m   s
    &rZ   rQ   rB   c                 "    d| j                    dS )Nz%PDF-u
   
%éëñ¿rd   rV   s     rX   rY   zPDFHeader.serializep   s     t''(44rZ   rT   )r[   r\   r]   __doc__r^   re   r;   rY   r_   rZ   rX   ra   ra   b   s<    'C 'D ' HL5!)*C!D5	5rZ   ra   c                   R     e Zd Z	 	 	 d	dededee   dee   dee   ddf fdZ xZS )
PDFFontNsubtype	base_fontencodingd_wwrR   c                    t         |           t        d      | _        t        |      | _        t        |      | _        |rt        |      nd | _        || _        || _        d | _	        d | _
        d | _        d | _        d | _        y )NFont)superre   r(   typerj   rk   rl   rm   rn   descendant_fonts
to_unicodec_i_d_system_infofont_descriptorc_i_d_to_g_i_d_map)rW   rj   rk   rl   rm   rn   	__class__s         rX   re   zPDFFont.__init__w   su     	L	G}i*2X486::>>B>BrZ   )NNN)r[   r\   r]   r^   r;   floatre   __classcell__rx   s   @rX   ri   ri   v   sf    
 #'#CC C 3-	C
 e_C C=C 
C CrZ   ri   c                         e Zd Zd fdZ xZS )CIDSystemInfoc                 x    t         |           t        dd      | _        t        dd      | _        d| _        y )NAdobeTencryptUCSr   )rq   re   r-   registryordering
supplement)rW   rx   s    rX   re   zCIDSystemInfo.__init__   s1    !'48!%6rZ   rR   N)r[   r\   r]   re   rz   r{   s   @rX   r}   r}      s     rZ   r}   c                        e Zd Zd fdZedefd       Zedefd       Zedefd       Zde	e
df   d	e	ed
f   de	edf   ddfdZdefdZ xZS )PDFType3FontrR   Nc           	         t         |           || _        t        d      | _        t        d|j
                  j                         | _        t        d      | _        d| j                  j
                  j                  d   j                  | j                  j                  z  dd| j                  j
                  j                  d   j                  | j                  j                  z  dd| j                  j
                  j                  d   j                  | j                  j                  z  dd| j                  j
                  j                  d   j                  | j                  j                  z  dd	| _        d	| _        t!        d
 |j"                  D              | _        t'        d |j"                  D              | _        d | _        d | _        y )Nrp   MPDFAA+Type3[headz.0f ]z[0.001 0 0 0.001 0 0]c              3   4   K   | ]  }|j                     y wrT   unicode.0gs     rX   	<genexpr>z(PDFType3Font.__init__.<locals>.<genexpr>   s     >Aaii   c              3   4   K   | ]  }|j                     y wrT   r   r   s     rX   r   z(PDFType3Font.__init__.<locals>.<genexpr>   s     =1QYYr   )rq   re   _font3r(   rr   rk   namerj   ttfontxMinscaleyMinxMaxyMax
font_b_boxfont_matrixminglyphs
first_charmax	last_char	resourcesrt   )rW   font3rx   s     rX   re   zPDFType3Font.__init__   sm   L	75??#7#7"89:	G}%%,,V499DKK<M<MMcR%%,,V499DKK<M<MMcR%%,,V499DKK<M<MMcR%%,,V499DKK<M<MMcRRSU 	 3>>>===(,)-rZ   c                     t        | j                  j                  D ci c]  }d|j                   |j                   d! c}      S c c}w )N/ 0 R)pdf_dictr   r   
glyph_nameobj_id)rW   r   s     rX   
char_procszPDFType3Font.char_procs   sK    <@KK<N<NO<NqqAHH:T!22<NO
 	
Os   $A	c                 r    t        t        d      t        d      t        d      | j                         i      S )N/Typez	/Encodingz/Differences)r   r(   differences_tablerW   s    rX   rl   zPDFType3Font.encoding   s5    WtK0^$d&<&<&>
 	
rZ   c                 t   t        | j                  j                  d       }|d   j                  }|d   j                  }dg|dz   |z
  z  }|D ]A  }t	        |j
                  | j                  j                  z  dz         ||j                  |z
  <   C t        |D cg c]  }t        |       c}      S c c}w )Nc                     | j                   S rT   r   glyphs    rX   <lambda>z%PDFType3Font.widths.<locals>.<lambda>       U]]rZ   keyr   r   gMbP?)	sortedr   r   r   roundglyph_widthr   pdf_listr^   )rW   sorted_glyphsmin_unicodemax_unicodewidthsr   r   s          rX   r   zPDFType3Font.widths   s    t{{117RS#A&..#B'// a+56 #E27!!DKK$5$55=3F5==;./ # VDVk[)VDEEDs   B5img_objs_per_index
PDFXObjectgfxstate_objs_per_namePDFExtGStatepattern_objs_per_namer#   c                     d}dj                  fd j                  j                  D              }|t        |      dkD  rd| dndz  }dj                   fd|j	                         D              }|t        |      dkD  rd	| dndz  }dj                   fd
|j	                         D              }|t        |      dkD  rd| dndz  }|dz  }| _        y )N<<r   c              3   J   K   | ]  }d | d|   j                    d  yw)/Ir   r   N)id)r   imgr   s     rX   r   z2PDFType3Font.generate_resources.<locals>.<genexpr>   s5      
. Q)#.112$7.s    #r   z/XObject <<>> c              3   z   K   | ]2  \  }}|j                   j                  v rd | d|j                   d 4 ywr   r   r   N)r   graphics_style_usedr   )r   r   gfxstate_objrW   s      rX   r   z2PDFType3Font.generate_resources.<locals>.<genexpr>   sD      
&D"lt{{666 vQ|'t,&D   8;z/ExtGState <<c              3   z   K   | ]2  \  }}|j                   j                  v rd | d|j                   d 4 ywr   )r   patterns_usedr   )r   r   patternrW   s      rX   r   z2PDFType3Font.generate_resources.<locals>.<genexpr>   sB      
!>gt{{000 vQwzzl$'!>r   z/Pattern <<)joinr   images_usedlenitemsr   )rW   r   r   r   r   objectsext_g_stater   s   ``      rX   generate_resourceszPDFType3Font.generate_resources   s     	(( 
{{..
 
 	#g,2B{7)2.J	hh 
&<&B&B&D
 

 	K8H18L}[M4RTT	(( 
!6!<!<!>
 

 	#g,2B{7)2.J	T	"rZ   c                     t        | j                  j                  d       }ddj                  d |D              z   dz   S )Nc                     | j                   S rT   r   r   s    rX   r   z0PDFType3Font.differences_table.<locals>.<lambda>   r   rZ   r   r   
c              3   R   K   | ]  }|j                    d |j                    ! yw)z /N)r   r   )r   r   s     rX   r   z1PDFType3Font.differences_table.<locals>.<genexpr>   s*      DQ55==/E$4$4#56Ms   %'r   )r   r   r   r   )rW   r   s     rX   r   zPDFType3Font.differences_table   sI    t{{117RSii DQ  		
rZ   )r   r   rR   N)r[   r\   r]   re   propertyr^   r   rl   r   dictintr   r   rz   r{   s   @rX   r   r      s    .$ 
C 
 

 
# 
 
 F F F # l!23# !%S.%8 9#  $CN3	#
 
#<
3 
rZ   r   c                   d     e Zd Zdee   dee   dee   dee   dee   dee   dedd	f fd
Z xZS )PDFInfotitlesubjectauthorkeywordscreatorproducercreation_daterR   Nc                    t         |           |rt        |d      nd | _        |rt        |d      nd | _        |r3t        |t        t        t        f      rdj                  d |D              }|rt        |d      nd | _
        |r3t        |t        t        t        f      rdj                  d |D              }|rt        |d      nd | _        |rt        |d      nd | _        |rt        |d      nd | _        || _        y )NTr   z; c              3   2   K   | ]  }t        |        y wrT   r^   )r   as     rX   r   z#PDFInfo.__init__.<locals>.<genexpr>   s     6v!s1vv   , c              3   2   K   | ]  }t        |        y wrT   r   )r   keywords     rX   r   z#PDFInfo.__init__.<locals>.<genexpr>  s      FX'WXr   )rq   re   r-   r   r   
isinstancelisttuplesetr   r   r   r   r   r   )	rW   r   r   r   r   r   r   r   rx   s	           rX   re   zPDFInfo.__init__   s     	7<Yud3$
;By$7j$s);<YY6v66F9?i5T
8dE3-?@yy FX FFH=E	(D94;By$7=E	(D94*rZ   )r[   r\   r]   r;   r^   r+   re   rz   r{   s   @rX   r   r      ss    +}+ #+ 	+
 3-+ #+ 3-+ + 
+ +rZ   r   c                   B    e Zd ZdedefdZ	 	 d
ded   dee   defd	Zy)AcroFormfields	sig_flagsc                      || _         || _        y rT   r   r  )rW   r   r  s      rX   re   zAcroForm.__init__  s    "rZ   NrQ   rB   _obj_idrR   c           
          t        t        |       D ci c]  }|t        | |       c}||      }t        |d      S c c}w )NrQ   r  r   
field_joinr/   dirgetattrr   rW   rQ   r  r   obj_dicts        rX   rY   zAcroForm.serialize  sJ    
 "03D	:	S'$$$	:/

 S11	 ;s   >NN)	r[   r\   r]   r)   r   re   r;   r^   rY   r_   rZ   rX   r   r   
  sJ    #x #C # BF!%
2#$=>
2 #
2 
	
2rZ   r   c                   V     e Zd Z	 	 	 	 ddee   ded   ded   ded   d	df
 fd
Z xZS )
PDFCatalogNlangpage_layoutrC   	page_moderD   viewer_preferencesrG   rR   c                 .   t         |           t        d      | _        |rt	        |      nd | _        || _        || _        || _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        y )NCatalog)rq   re   r(   rr   r-   r  r  r  r  pages	acro_formopen_action	mark_infometadatanamesoutlinesoutput_intentsstruct_tree_roota_fpage_labels)rW   r  r  r  r  rx   s        rX   re   zPDFCatalog.__init__  s     	O	'+IdO	&""4 	
 .2*.(,26$(
592659"&*.rZ   NNNNr[   r\   r]   r;   r^   re   rz   r{   s   @rX   r  r    s_     #.2*.<@/sm/ l+/ J'	/
 %%89/ 
/ /rZ   r  c                   `     e Zd Zdee   dee   dee   dee   dee   dee   ddf fd	Z xZS )
PDFResourcesproc_setfontx_objectr   shadingr   rR   Nc                 v    t         |           || _        || _        || _        || _        || _        || _        y rT   )rq   re   r&  r'  r(  r   r)  r   )rW   r&  r'  r(  r   r)  r   rx   s          rX   re   zPDFResources.__init__:  s;     	 	 &rZ   r#  r{   s   @rX   r%  r%  9  si    3- sm 3-	
 c] # # 
 rZ   r%  c                   (     e Zd Zdeddf fdZ xZS )PDFFontStreamcontentsrR   Nc                 H    t         |   |d       t        |      | _        y NTr-  compress)rq   re   r   length1rW   r-  rx   s     rX   re   zPDFFontStream.__init__M  s     (T:8}rZ   )r[   r\   r]   bytesre   rz   r{   s   @rX   r,  r,  L  s    % %4 % %rZ   r,  c                   (     e Zd Zdeddf fdZ xZS )PDFXmpMetadatar-  rR   Nc                     t         |   |j                  d             t        d      | _        t        d      | _        y )Nzutf-8r-  MetadataXML)rq   re   encoder(   rr   rj   r3  s     rX   re   zPDFXmpMetadata.__init__S  s3    (//'":;$	E{rZ   )r[   r\   r]   r^   re   rz   r{   s   @rX   r6  r6  R  s    # # # #rZ   r6  c                   x     e Zd ZdZ	 	 	 	 ddededededeez  dz  de	d	e
e   d
e
e   de
e   deddf fdZ xZS )r   )_id	_contentsfilterlengthrr   rj   widthheightcolor_spacebits_per_componentdecodedecode_parmss_mask
image_maskNr-  rj   rA  rB  rC  rD  
img_filterrE  rF  rH  rR   c                 
   t         |   |       t        d      | _        t        |      | _        || _        || _        || _        || _        t        |      | _	        || _
        |	| _        d | _        |
rd| _        y d | _        y )Nr8  XObjectT)rq   re   r(   rr   rj   rA  rB  rC  rD  r?  rE  rF  rG  rH  )rW   r-  rj   rA  rB  rC  rD  rI  rE  rF  rH  rx   s              rX   re   zPDFXObject.__init__k  sz     	(+O	G}
&"4:&(,0",$$rZ   )NNNF)r[   r\   r]   	__slots__r4  r^   ry   r)   r(   r   r;   boolre   rz   r{   s   @rX   r   r   Y  s    I2 %) $&* 77 7 	7
 7 _t+7  7 SM7 7 sm7 7 
7 7rZ   r   c                   4     e Zd ZdZdZdededef fdZ xZ	S )PDFICCProfilez
    Holds values for ICC Profile Stream
    Args:
        contents (str): stream content
        n (int): [1|3|4], # the numbers for colors 1=Gray, 3=RGB, 4=CMYK
        alternate (str): ['DeviceGray'|'DeviceRGB'|'DeviceCMYK']
    )r=  r>  r?  r@  n	alternater-  rP  rQ  c                 V    t         |   |d       || _        t        |      | _        y r/  )rq   re   rP  r(   rQ  )rW   r-  rP  rQ  rx   s       rX   re   zPDFICCProfile.__init__  s)     	(T:irZ   )
r[   r\   r]   rg   rL  r4  r   r^   re   rz   r{   s   @rX   rO  rO    s5    I)) ) 	) )rZ   rO  c                       e Zd ZdZdZdee   dee   dee   ddfdZ	e
dee   fd	       Ze
dee   fd
       ZdefdZdefdZdeeef   fdZdee   fdZdefdZdefdZy)PDFPageLabelzG
    This will be displayed by some PDF readers to identify pages.
    _style_prefixstlabel_stylelabel_prefixlabel_startrR   Nc                 .    || _         || _        || _        y rT   rU  )rW   rY  rZ  r[  s       rX   re   zPDFPageLabel.__init__  s     1<&2!,rZ   c                 \    | j                   rt        | j                   j                        S d S rT   )rV  r(   valuer   s    rX   szPDFPageLabel.s  s"    *.++tDKK%%&?4?rZ   c                 H    | j                   rt        | j                         S d S rT   )rW  r-   r   s    rX   pzPDFPageLabel.p  s    *.,,y&@D@rZ   c                 V    d| j                    d| j                   d| j                   dS )NzPDFPageLabel(r   )rU  r   s    rX   __repr__zPDFPageLabel.__repr__  s)    t{{m2dll^2dggYaHHrZ   c                    | j                   r| j                   nd}| j                  rG| j                  t        j                  k(  r|t	        | j
                        z  }|S | j                  t        j                  k(  r|t        | j
                  xs d      z  }|S | j                  t        j                  k(  r,|t        | j
                  xs d      j                         z  }|S | j                  t        j                  k(  r#| j
                  xs ddz
  }|t        |      z  }|S | j                  t        j                  k(  r/| j
                  xs ddz
  }|t        |      j                         z  }|S )Nr   r   )rW  rV  r   NUMBERr^   rX  UPPER_ROMANr3   LOWER_ROMANlowerUPPER_LETTERr4   LOWER_LETTER)rW   retstarts      rX   __str__zPDFPageLabel.__str__  s1   "lldll;;{{n333s477|# 
  : ::yA.. 
  : ::yA.4466 
  ; ;;A*~e,, 
  ; ;;A*~e,2244
rZ   c           
      f    t        t        |       D ci c]  }|t        | |       c}      S c c}w rT   )r/   r
  r  )rW   r   s     rX   rY   zPDFPageLabel.serialize  s/    #d)L)3sGD#$66)LMMLs   .c                     | j                   S rT   )rV  r   s    rX   	get_stylezPDFPageLabel.get_style      {{rZ   c                 "    | j                   xs dS )Nr   )rW  r   s    rX   
get_prefixzPDFPageLabel.get_prefix  s    ||!r!rZ   c                 "    | j                   xs dS Nr   )rX  r   s    rX   	get_startzPDFPageLabel.get_start  s    ww|!rZ   )r[   r\   r]   rg   rL  r;   r   r^   r   re   r   r(   r_  r-   ra  rd  rn  r   r7   rY   rq  rt  rw  r_   rZ   rX   rT  rT    s     ,I-n-- sm- c]	-
 
- @8D> @ @ A8I& A AI# I "N4S> N8N3 "C "3 rZ   rT  c                       e Zd ZdZdee   ded   deez  def fdZ	defd	Z
d
eddfdZdeeef   fdZdededdfdZdee   dee   ddfdZdee   fdZdefdZdee   fdZdeddfdZdeez  ddfdZ xZS )PDFPage)r=  rr   r-  durtransannotsgroup	media_boxstruct_parentsr   parent_index	_width_pt
_height_pt_page_label_text_substitution_fragmentsduration
transitionrH   r-  indexc                    t         |           t        d      | _        || _        |r|nd | _        || _        t               | _        d | _	        d | _
        d | _        d | _        d | _        || _        d | _        d | _        d | _        g | _        y )NPage)rq   re   r(   rr   r-  rz  r{  r)   r|  r}  r~  r  r   r  r  r  r  r  r  )rW   r  r  r-  r  rx   s        rX   re   zPDFPage.__init__  s     	L	 '8T
*2*$(
(,-1 	  	 *.+/37RT)rZ   rR   c                     | j                   S rT   r  r   s    rX   r  zPDFPage.index  rr  rZ   iNc                     || _         y rT   r  )rW   r  s     rX   	set_indexzPDFPage.set_index  s	    rZ   c                 x    | j                   | j                  t        d      | j                   | j                  fS )zGReturn a pair (width, height) in the unit specified to FPDF constructorzPage dimensions are null)r  r  
ValueErrorr   s    rX   
dimensionszPDFPage.dimensions  s4    >>!T__%<788~~t..rZ   width_pt	height_ptc                 "    ||c| _         | _        y)zHAccepts a pair (width, height) in the unit specified to FPDF constructorN)r  r  )rW   r  r  s      rX   set_dimensionszPDFPage.set_dimensions  s    *2I'rZ   previous_page_label
page_labelc                    |rh|rf|j                         |j                         k(  rE|j                         |j                         k(  r$|j                  s|j                         dz   |_        |r"|j                  |j                  dk(  rd|_        |r<|s:t	        |j                         |j                         |j                         dz         }|| _        y )Nr   r   )rq  rt  rX  rw  rT  r  )rW   r  r  s      rX   set_page_labelzPDFPage.set_page_label  s      $$&*=*G*G*II%%'+>+I+I+KKMM/99;a?JM}}$
(: !
z%#--/#..0#--/!3J &rZ   c                     | j                   S rT   )r  r   s    rX   get_page_labelzPDFPage.get_page_label9  s    rZ   c                 v    | j                   st        | j                               S t        | j                         S rT   )r  r^   r  r   s    rX   	get_labelzPDFPage.get_label<  s+    (,(8(8s4::< Sc$BRBR>SSrZ   c                     | j                   S rT   )r  r   s    rX   get_text_substitutionszPDFPage.get_text_substitutions?  s    000rZ   fragmentc                 :    | j                   j                  |       y rT   )r  append)rW   r  s     rX   add_text_substitutionzPDFPage.add_text_substitutionB  s    ))00:rZ   
annotationc                 p    | j                   t               | _         | j                   j                  |       y rT   )r|  r)   r  )rW   r  s     rX   add_annotationzPDFPage.add_annotationE  s'    ;;"*DK:&rZ   )r[   r\   r]   rL  r;   ry   	bytearrayr*   r   re   r  r  r   r  r  rT  r  r  r^   r  r<   r   r  r  r   r   r  rz   r{   s   @rX   ry  ry    s    I&U5/U \*U ..	U
 U:s 3 4 /E%,/ />u > >4 >&%l3& \*& 
	&6  6  T3 T11O(P 1;.L ;QU ;'-)G 'D 'rZ   ry  c                   ,     e Zd Zdededdf fdZ xZS )PDFPagesRootcountr~  rR   Nc                 l    t         |           t        d      | _        || _        || _        d | _        y )NPages)rq   re   r(   rr   r  r~  kids)rW   r  r~  rx   s      rX   re   zPDFPagesRoot.__init__L  s1    M	
" 		rZ   )r[   r\   r]   r   r^   re   rz   r{   s   @rX   r  r  K  s"    
c 
c 
d 
 
rZ   r  c                   X     e Zd Zdeddf fdZ	 	 d	deeeef      ded   defdZ xZ	S )
r   dict_as_strrR   Nc                 0    t         |           || _        y rT   )rq   re   _dict_as_str)rW   r  rx   s     rX   re   zPDFExtGState.__init__W  s    'rZ   r  rQ   rB   c                 :    | j                    d| j                   dS )Nz 0 obj
z
endobj)r   r  )rW   r  rQ   s      rX   rY   zPDFExtGState.serialize\  s"    
 ''(4#4#4"5X>>rZ   r  )
r[   r\   r]   r^   re   r;   r   r7   rY   rz   r{   s   @rX   r   r   V  sR    (C (D ( .2AE?4S>*? $$=>? 
	?rZ   r   c                   2    e Zd ZdZddZ	 d	ded   defdZy)
PDFXrefAndTrailerz$Cross-reference table & file trailerrR   Nc                 d    || _         |j                  dz   | _        d | _        d | _        d | _        y rv  )output_builderr   r  catalog_objinfo_objencryption_obj)rW   r  s     rX   re   zPDFXrefAndTrailer.__init__g  s3    ,#**Q.
15+/@DrZ   rQ   rB   c                    | j                   t        d      | j                  }t        t	        |j
                              }g }|j                  d       |j                  d| j                          |j                  d       t        d| j                        D ]$  }|j                  |j                  |   dd       & |j                  d       |j                  d	       |j                  d
| j                          |j                  dt        | j                   j                                | j                  r1|j                  dt        | j                  j                                |j                  }| j                  rV|j                  dt        | j                  j                                |j                  J |j                  j                   }n0|j!                         }|dk(  r|j#                  |j
                        }||j                  d| d       |j                  d       |j                  d       |j                  |       |j                  d       dj%                  |      S )Nz"Invalid state for XREF production.xrefz0 z0000000000 65535 f r   010z	 00000 n trailerr   z/Size z/Root z/Info z	/Encrypt r   z/ID [r   r   	startxrefz%%EOFr   )r  r   r  r^   r   bufferr  r  rangeoffsetspdf_refr   r  fpdfr  rQ   file_id_default_file_idr   )rW   rQ   builderr  outr   r  r  s           rX   rY   zPDFXrefAndTrailer.serializeo  s    # DEE%%GNN+,	

6

R

|$%

()Atzz*FJJ'//&1#6i@A +

9

4

VDJJ<()

VGD$4$4$7$789:;==JJ(8(8 9:;<||JJ74+>+>+A+A#B"CDE))555373I3I3Q3QGllnG"}//?JJwiq)*

4

;

9

7yy~rZ   )r  OutputProducerrR   NrT   )r[   r\   r]   rg   re   r;   r^   rY   r_   rZ   rX   r  r  d  s-    *E HL"!)*C!D"	"rZ   r  c                       e Zd ZdZdZ	 	 	 	 ddddee   dee   dee   d	ee   d
ee   ddfdZ	 	 dded   dee	   defdZ
y)OutputIntentDictionarya  
    The optional OutputIntents (PDF 1.4) entry in the document
    catalog dictionary holds an array of output intent dictionaries,
    each describing the colour reproduction characteristics of a possible
    output device.

    Args:
        subtype (OutputIntentSubType, required): PDFA, PDFX or ISOPDF
        output_condition_identifier (str, required): see the Name in
            https://www.color.org/registry.xalter
        output_condition (str, optional): see the Definition in
            https://www.color.org/registry.xalter
        registry_name (str, optional): "https://www.color.org"
        dest_output_profile (PDFICCProfile, required/optional):
            PDFICCProfile | None # (required if
            output_condition_identifier does not specify a standard
            production condition; optional otherwise)
        info (str, required/optional see dest_output_profile): human
            readable description of profile
    )rr   r_  output_condition_identifieroutput_conditionregistry_namedest_output_profileinfoNrj   zOutputIntentSubType | strr  r  r  r  r  rR   c                 `   t        d      | _        t        t        j                  |      j                        | _        |rt        |      nd | _        |rt        |      nd | _        |rt        |      nd | _	        |rt        |t              r|nd | _        |rt        |      | _        y d | _        y )NOutputIntent)r(   rr   r   coercer^  r_  r-   r  r  r  r   rO  r  r  )rW   rj   r  r  r  r  r  s          rX   re   zOutputIntentDictionary.__init__  s     (	)009??@ + 12 	( ,<I&' 	 :GY}5D #z2E}'U   	 
 (,IdO		rZ   rQ   rB   r  c           
          t        t        |       D ci c]  }|t        | |       c}||      }t        |      S c c}w )Nr  r	  r  s        rX   rY   z OutputIntentDictionary.serialize  sH    
 "03D	:	S'$$$	:/

 !!	 ;s   <r"  r  )r[   r\   r]   rg   rL  r;   r^   rO  re   r   rY   r_   rZ   rX   r  r    s    *I +/'+7;"6,6 &.c]6 #3-	6
  }6 &m46 sm6 
6: BF!%
"#$=>
" #
" 
	
"rZ   r  r!   r#   r$   r"   c            	          e Zd ZdZ ej
                  d      Z ej
                  d      Z ej
                  d      Z ej
                  d      Z	 ej
                  d      Z
d d	Zd
ededee   dee   fdZdddee   fdZdeez  defdZdddefdZdedeeeef      fdZdededdfdZd
edeeef   fdZded
edee   fdZd
edee   fdZe d
edefd       Z!	 d!dedede"e#z  fdZ$y)"ResourceCatalogzKManage the indexing of resources and association to the pages they are usedz/(GS\d+) gsz
/I(\d+) Doz/(P\d+)\s+scnz/(P\d+)\s+SCNz!/F(\d+)\s+[-+]?\d+(?:\.\d+)?\s+TfrR   Nc                     t        t              | _        t        t              | _        t               | _        g | _        g | _        d| _	        i | _
        d| _        y )Nr   r   )r   r   r   r   resources_per_pager   graphics_stylessoft_mask_xobjectsform_xobjectslast_reserved_object_idfont_registrynext_xobject_indexr   s    rX   re   zResourceCatalog.__init__  sX    JUK

  	 1<:<AC,-$<>'(rZ   resource_typeresourcepage_numberc                    |t         j                  t         j                  fv rl| j                  |   }| j	                  |      }||vr| t        |      dz    ||<   |#| j                  ||f   j                  ||          t        ||         S |t         j                  k(  r)t        |t              r|| j                  k\  r
|dz   | _        t        r|J | j                  ||f   j                  |       y rv  )r   PATTERNSHADINGr   _get_prefixr   r  addr^   X_OBJECTr   r   r  r6   )rW   r  r  r  r   prefixs         rX   r  zResourceCatalog.add  s    _44o6M6MNN~~m4H%%m4Fx'(.xH0A/B%C"&''m(DEIIX& x)** _5558S)D333&.lD#***m <=AA(KrZ   styler@   c                    |j                         }|yt        |      }|| j                  vrNt        | j	                  t
        j                         t        | j                               }|| j                  |<   | j                  |   S )z
        Graphics style can be added without associating to a page number right away,
        like when rendering a svg image.
        The method that adds image to the page will call the add method for the page association.
        N)rY   r^   r  r(   r  r   EXT_G_STATEr   )rW   r  
style_dict	style_strr   s        rX   register_graphics_stylez'ResourceCatalog.register_graphics_style  s     %*OO$5

O	D000##O$?$?@A#dFZFZB[A\]D /3D  +##I..rZ   	soft_maskc                     | xj                   dz  c_         t        ||       }| j                   |_        | j                  j	                  |       |j                  S )z5Register a soft mask xobject and return its object idr   )r  soft_mask_path_to_xobjectr   r  r  )rW   r  xobjects      rX   register_soft_maskz"ResourceCatalog.register_soft_mask'  sJ    $$)$+It<11
&&w/zzrZ   blend_groupr?   c                     t        ||       }| j                  }| xj                  dz  c_        | j                  j                  ||f       |S )zBRegister a blend group Form XObject and return its resource index.r   )blend_group_to_xobjectr  r  r  )rW   r  r  r  s       rX   register_blend_formz#ResourceCatalog.register_blend_form/  sH    (d;''1$!!5'"23rZ   renderedc                 :   t               }| j                  j                  |      D ]2  }|j                  t        j
                  |j                  d      f       4 | j                  j                  |      D ]2  }|j                  t        j                  |j                  d      f       4 | j                  j                  |      D ]2  }|j                  t        j                  |j                  d      f       4 | j                  j                  |      D ]2  }|j                  t        j                  |j                  d      f       4 | j                  j                  |      D ]2  }|j                  t        j                  |j                  d      f       4 |S )z6Parse a content stream and return discovered resourcesr   )r   GS_REGEXfinditerr  r   r  r}  	IMG_REGEXr  PATTERN_FILL_REGEXr  PATTERN_STROKE_REGEX
FONT_REGEXFONT)rW   r  foundms       rX   scan_streamzResourceCatalog.scan_stream7  s4   25%''1AII22AGGAJ?@ 2 ((2AII//<= 3 ((11(;AII..
;< < **33H=AII..
;< > ))(3AII++QWWQZ89 4 rZ   c                     | j                  |      D ]Z  \  }}|t        j                  k(  r/| j                  |t        j                  f   j	                  |       H| j	                  |||       \ y)z
        Scan a rendered content stream and register resources used on the given page.
        Currently indexes:
          - ExtGState invocations: '/GSn gs'
          - Image XObjects: '/In Do'
        N)r  r   r  r  r  )rW   r  r  r  r  s        rX   index_stream_resourcesz&ResourceCatalog.index_stream_resourcesL  sf     (,'7'7'A#M8 7 77''o6M6M(NOSS +> (BrZ   c                 <    | j                   |   j                         S rT   )r   r   )rW   r  s     rX   	get_itemszResourceCatalog.get_items[  s     ~~m,2244rZ   c                 $    | j                   ||f   S rT   )r  )rW   r  r  s      rX   get_resources_per_pagez&ResourceCatalog.get_resources_per_page`  s     &&]'CDDrZ   c                     t               }| j                  j                         D ]  \  \  }}}||k(  s|j                  |       ! |S rT   )r   r  r   update)rW   r  unique_rtyper  s         rX   get_used_resourcesz"ResourceCatalog.get_used_resourcese  sG    %(U$($;$;$A$A$C JQ%h' %D rZ   c                     |t         j                  k(  ry|t         j                  k(  ry|t         j                  k(  ryt	        d|       )NGSPShzNo prefix for resource type )r   r  r  r  r  )clsr  s     rX   r  zResourceCatalog._get_prefixl  sH    O777O333O3337GHHrZ   font_family
font_stylec                    |st        d      dj                  t        |j                                     }i ddddddddddd	dd
ddddddddddddddddddddddddd}|j	                         j	                  d      j                  d      D ]-  }|j	                         j	                  d      j                         }| | }|| j                  v r| j                  |   c S |t        v r_|dv rdn|}| | }	|	| j                  vr2t        | j                        dz   }
t        |
|	|      | j                  |	<   | j                  |	   c S |j                  |      }|s|dv rdn|}| | }	|	| j                  vr2t        | j                        dz   }
t        |
|	|      | j                  |	<   | j                  |	   c S  t        d|d|      )a  
        Resolve a family+style to a concrete font instance from the font registry.
        Behavior:
          - Exact match (family.lower() + style.upper()) in registry: return it
          - If `family` names a core font: add CoreFont to registry (if missing) and return it
          - If `family` is an alias/generic: translate to a core font, add to registry (if missing), and return it
          - Otherwise: raise KeyError

        Notes:
          - For Symbol/ZapfDingbats, style is forced to "" (they don't support B/I).
        zEmpty font familyr   z
sans-serif	helveticaz
sans serifarialverdanatahomazsegoe uiseriftimesztimes new romangeorgiacambriagaramond	monospacecourierzcourier newconsolasmonacosymbolzapfdingbats)r%  r&  zzapf dingbatsz'",>   r%  r&  r   zNo suitable font for family=z, style=)KeyErrorr   r   upperstripsplitri  r  r   r   r   get)rW   r  r  r  alias	candidatefamilyfontkey
core_styler   r  mappeds               rX   get_font_from_familyz$ResourceCatalog.get_font_from_familyv  s    .//z//123
+
 +
 [	

 {
 k
 
 W
 W
 w
 w
 w
 
  !
" y#
$ 9%
& 	'
( i)
, *+1
6 %**,2259??DI__&,,U399;F  (G$,,,))'22 ##)-G#GRU
-d000D../!3A.6q#z.JD&&s+))#.. YYv&F#)-G#GRU
-d000D../!3A.6q#z.JD&&s+))#..3 E8 5k_HUIVWWrZ   r   )r   )%r[   r\   r]   rg   recompiler  r  r  r  r  re   r   ResourceTypesr;   r   r^   r  r(   r  r   r   r  r  r   r   r  r  r8   r  r	  r  classmethodr  r   r   r3  r_   rZ   rX   r  r    s   Qrzz.)H

=)I#$45%2::&67@AJ)&   c]	
 
#</_ /$ /&MM,I c |  C Cos6J0K,L *?s ? ? ?5,5	=#%	&5
EE/>E	]	E
 CDV  I IC I I 35JXJX,/JX	G	JXrZ   r  c                      e Zd ZdZd;dZdefdZdeez  ez  ddfdZ		 d<de
d	ee   defd
ZdefdZdee   fdZ edd      fdedee   fdZdee   fdZdeeef   deeef   deedf   deeeez  f   fdZdeeef   fdZdeeef   defdZ deeef   defdZ!deeef   fdZ"deeef   deedf   deeef   ddfdZ#deeef   ddfdZ$deeef   deeef   deee%f   deee&e'z  f   d eeeez  f   ddfd!Z(deee&e'z  f   fd"Z)deee%f   fd#Z*d$ee   ddfd%Z+d eeeez  f   deeef   deeef   deee&e'z  f   deee%f   de,fd&Z-dee
   fd'Z.de/ee0   e1e2   f   fd(Z3dee4   fd)Z5defd*Z6de7fd+Z8ded,   fd-Z9dee:   fd.Z;de<fd/Z=d0e<d1ed2ed3ee   d4ee4   d5ee
   d6ee0   ddfd7Z>e?d8eded   fd9       Z@d=d:ZAy)>r  zVGenerates the final bytearray representing the PDF document, based on a FPDF instance.rR   Nc                     || _         g | _        i | _        |j                  j                  | _        i | _        i | _        t        t              | _
        t               | _        y rT   )r  pdf_objsiccp_i_to_pdf_i_resource_catalogr  r   r  trace_labels_per_obj_idr   r   sections_size_per_trace_labelr  r  )rW   r  s     rX   re   zOutputProducer.__init__  sU    	<>/1"":: 	 (*79$=H=M*!*rZ   c           
         | j                   }|j                  S|j                         }|dk(  r|j                  t	        d            }|j                  j                  t        |             |j                  }|j                  r/|j                  j                  |kD  r|j                  j                  }| j                  j                  t        |             | j                         }| j                         }| j                         }| j!                         }|j"                  D ]4  }| j%                  |d       | j%                  |j'                         d       6 | j)                  |       | j+                         }	| j-                         \  }
}| j/                         }d}|j0                  s| j3                         }| j5                         }t7        |       }| j                  j                  |       t9        |      |_        | j=                  |||d   |||	|
       g }|D ]N  }||_        tA        |jB                  t8              sJ |jB                  D ]  }g }|jD                  r1tG        |jD                  d      r|j                  |jD                         |jH                  r[tG        |jH                  d      rEtG        |jH                  jD                  d      r%|j                  |jH                  jD                         |D ]D  }|jJ                  tM        |      kD  stO        d	|jJ                   d
|jQ                          d       |jS                  |        |jB                  rHd|_!        Q |D ]*  }|jD                  |j                  |jD                         , |D ],  }tU        ||jJ                  dz
     jV                        |_,        . |jZ                  j\                  j^                  D ]  }||jK                         dz
     |_0         ||_1        ||_2        ||_3        | jh                  rJ d| jh                          | jj                  rJ dtM        | jj                                | j                  D ]  }tA        |tl              rd}nQtM        | jh                        | jj                  |jV                  <   | jn                  jq                  |jV                        }|rF| js                  |      5  | ju                  |jw                  |j                               ddd       | ju                  |jw                  |j                                | jy                          |jz                  rVt}        t~        | jh                  |jz                  |j                  |j                  |j                  |j                        | _4        | jh                  S # 1 sw Y   dxY w)z
        This method alters the target FPDF instance
        by assigning IDs to all PDF objects,
        plus a few other properties on PDFPage instances
        Nr   r   embedded_files	file_spec)pages_root_objfirst_page_objsig_annotation_objxmp_metadata_objstruct_tree_root_objoutline_dict_objr  destz'Invalid reference to non-existing page z present on page z: r   z@Nothing should have been appended to the .buffer at this stage: z.No offset should have been set at this stage: )rQ   )Dr  rQ   r  r  r  generate_passwordsr^   rb   r  _min_pdf_versionr:  r  ra   _add_pages_root_add_catalog
_add_pages_add_annotations_as_objectsr@  _add_pdf_objrA  _insert_resources_add_structure_tree_add_document_outline_add_xmp_metadata_compliance	_add_info_add_encryptionr  r)   r  _finalize_catalogr  r   r|  rH  hasattrr   r  r   r  r  extendr  r   page_refstruct_builderdoc_struct_elemkpgr  r  r  r  r  rP   r=  r,  _trace_size_outrY   _log_final_sections_sizes	_sign_keyr&   r5   
_sign_cert_sign_extra_certs_sign_hashalgo
_sign_time)rW   r  r  rb   rB  r  	page_objsrD  embedded_filerF  rG  outline_itemsrE  r  r  r  destspage_objannot
page_destsrH  outline_itemstruct_elempdf_objtrace_labels                            rX   	bufferizezOutputProducer.bufferize  s    yy
 !!-37<<>G"}//	$@""55c'lC&&##''88;F11BBKY{34--/'')OO%	!==?!00Mm-=>m557E 1 	y)#779*.*D*D*F'-113~~'H--/ &T" 'y1)$Q<1-!5- 	 	
 ')!H,HOhoox888!35
::uzz=9"))%**577wuww7uww||];"))%'',,7&D''#i.8(EdFVFVEWWhiqiwiwiyhzz|}  '
 Z( )  ??"&+ ", *L  ,\../ * D#$$q("DM   ..>>@@K&{'>'>'@1'DEKN A& , 	\Mdkk][	\ 	P;C<M;NO	P }}G'#34"+.t{{+;WZZ("::>>wzzJ%%k2II))D<R<R)S 32
 		'++d>T>T+UV % 	&&(>>&&&##DK {{% 32s   7,WW!	datac                     t        |t              s,t        |t              st        |      }|j                  d      }| xj                  |dz   z  c_        y)zAppend data to the bufferlatin1   
N)r   r4  r^   r;  r  )rW   rs  s     rX   r`  zOutputProducer._outV  s?    $&dC(4y;;x(Dte|#rZ   rp  rq  c                     | xj                   dz  c_         | j                   |_        | j                  j                  |       |r|| j                  | j                   <   | j                   S rv  )r   r   r:  r  r=  )rW   rp  rq  s      rX   rO  zOutputProducer._add_pdf_obj^  sP     	q[[
W%8CD((5{{rZ   c                     | j                   }t        |j                  t        |j                              }| j                  |       |S )N)r  r~  )r  r  pages_count_dimensions_to_mediaboxdefault_page_dimensionsrO  )rW   r  rB  s      rX   rK  zOutputProducer._add_pages_rooth  sB    yy%""-d.J.JK
 	.)rZ   c              #      K   t        d| j                  j                  dz         D ]M  }| j                  j                  |   }|j	                         |k(  sJ d|j	                         d|       | O y w)Nr   zpage_obj.index()=z != page_index=)r  r  ry  r  r  )rW   
page_indexrk  s      rX   _iter_pages_in_orderz#OutputProducer._iter_pages_in_orderq  st     499#8#81#<=Jyyz2H  J.7#(.."$$467.N >s   A5A7r   _slicec                 .   | j                   }g }t        | j                               |   D ]  }|j                  dkD  r"|j                  rt        ddddd      |_        |j                         |j                  k7  rt        |j                               |_
        | j                  |d       |j                  |       t        |j                  t              sJ t!        |j                  |j"                  	      }| j                  |d       ||_         |S )
Nz1.3z/Groupz/Transparency
/DeviceRGB)r   z/Sz/CSr   r  r  r0  )r  r   r~  rb   allow_images_transparencyr   r}  r  r{  rz  r~  rO  r  r   r-  r  r*   r1  )rW   r  r  rg  rk  cs_objs         rX   rM  zOutputProducer._add_pagesz  s    yy#%	T6689&AH%'D,J,J!)&olS"" ""$(D(DD%<X=P=P=R%S"h0X& h//;;;%!**T]]F fg. &H# B& rZ   c                 F   d }| j                   j                  j                         D ]w  }t        |j                  t
              sJ |j                  D ]J  }t        |t              s| j                  |       t        |j                  t              s@|J d       |}L y |S )Nz0A /Sig annotation is present on more than 1 page)
r  r  valuesr   r|  r)   r   rO  vr%   )rW   rD  rk  	annot_objs       rX   rN  z*OutputProducer._add_annotations_as_objects  s    !		..0Hhoox888%__	i7%%i0!)++y9.6NMN6-6* - 1 "!rZ   image_objects_per_indexr   r   r#   c                 *  + i }t        | j                  j                  j                         d       D 	]O  }t	        |t
              r|j                  r|j                  j                  dkD  rt        d      |j                  j                  D ]Q  }| j                  t        |j                  j                  d      | j                  j                        d      |_        S g }|j                  j#                         D ]s  \  }}	|2t	        |j$                  t&              rt)        |j$                        dk(  r;|j+                  d	|	d
ddj-                  d |j$                  D               d       u t        dt)        |       ddj-                  |       dj                  d            }
| j                  |
d       t/        |j                        }t1        |
j2                        |_        |j7                  |||       | j                  |d       |||j8                  <   t	        |t:              rM|j<                  dvrdnd }t?        d|j<                  |      }| j                  |d       |||j8                  <   Ot	        |t
              sad|j<                   }|j                  jA                         }t)        |jB                        dkD  rsdj-                  d |jB                  d d D              }t)        |jB                        dkD  r|dt)        |jB                        dz
   dz  }tD        jG                  d||       tI        jJ                  dd      }|xjL                  g dz  c_&        tI        jN                  |      }|jQ                  |        |j                  |jR                         |j                  j#                         D ci c]-  \  }}|&||jR                  jU                  |jV                        / }}}tY               }|jR                  j[                  |       |j]                  d       |j_                         }t?        d!|d"      }| j                  |d       |||j8                  <   |j`                  xr |jb                  }d }d }|ri }i }|j                  j#                         D ]  \  }}	|	|jV                  je                  d#      r6|jV                  d$d  jg                         rti        |jV                  d$d        }n|jj                  }|d%kD  r"tD        jG                  d&||jl                         |||	<   |jn                  ||<    t?        |rd'nd(||jp                  jr                  |r|rtu        |      n
tw        |      )      }| j                  |d       ty        |g      |_=        g }d*th        d+t|        fd,+|j                  j#                         D ]u  \  }}	|2t	        |j$                  t&              rt)        |j$                        dk(  r;|j+                  d	|	d-ddj-                  +fd.|j$                  D               d       w t        d/t)        |       ddj-                  |       dj                  d            }
| j                  |
d       |
|_        |r|rd0}d1}d}|j~                  r|j~                  \  }}}t        |j#                               D  cg c]  \  } }d	| d-d2| d3 }!} }t        d4| d5| d6| d7| d8| d9t)        |!       d:dj-                  |!       d;j                  d            }"t        d<      |"_A        t        | d8| d=      |"_B        t        d>| d?| d@| dA      |"_D        | j                  |"d       |"|_E        t               }#|rG|j~                  r;|j~                  \  }}}t        |dB      |#_H        t        |dB      |#_I        ||#_J        | j                  |#d       |#|_D        |jp                  }$t        |      |$_K        | j                  |$d       |$|_L        |sdCgdDz  dDz  dEz  }%|j#                         D ]0  \  }&}'t        |'dFz	        |%|&dEz  <   t        |'dz        |%|&dEz  dGz   <   2 dj-                  |%      }(t        |(j                  dH      d      })| j                  |)d       |)|_N        t        |I      }*|rt        dJ      |*_P        | j                  |*d       |r|*|$_Q        n|*|$_R        |j                  j                  j                          |j                  j                  j                          |j                          	R |S c c}}w c c}} w )KNc                     | j                   S rT   )r  )r'  s    rX   r   z+OutputProducer._add_fonts.<locals>.<lambda>  s    dffrZ   r      zType 3 fonts with color glyphs are not supported is more than 255 glyphs are rendered. set FPDF.render_color_fonts=False or use less color glyphs.latin-1r0  fontsr   <02Xz> <r   c              3      K   | ]:  }t        |      j                  d       j                         j                          < yw)z	utf-16-beN)chrr;  hexr)  )r   codes     rX   r   z,OutputProducer._add_fonts.<locals>.<genexpr>  s5     7~p}hlD	8H8H8U8Y8Y8[8a8a8cp}s   A Az>
z/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<</Registry (Adobe)
/Ordering (UCS)
/Supplement 0
>> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<00> <FF>
endcodespacerange
z beginbfchar
zGendbfchar
endcmap
CMapName currentdict /CMap defineresource pop
end
end)SymbolZapfDingbatsWinAnsiEncodingType1)rj   rk   rl   r   r   c              3      K   | ]<  }d t        |       dt        |      j                  d      j                          d > yw)'z' (zunicode-escaperc  N)r  r;  rE  )r   xs     rX   r   z,OutputProducer._add_fonts.<locals>.<genexpr>  sD      $!9A CF83s1v}}5E'F'M'M'O&PPQR!9s   AA
   z, ... (and z others)z+Font %s is missing the following glyphs: %sT)notdef_outlinerecommended_glyphs)FFTMGDEFGPOSGSUBMATHhdmxmetasbixCBDTCBLCEBDTEBLCEBSCzSVG CPALCOLR)r   Type0z
Identity-Hcid     zJGlyph CID %s exceeds 0xFFFF and cannot be encoded in a 2-byte CID font: %sCIDFontType0CIDFontType2)rj   rk   rm   rn   r   rR   c                 J    | dkD  rd| dz
  dz	  z  }d| dz  z  }|d|dS | dS )Nr  i   i   r  i   i  04Xr_   )r   	code_highcode_lows      rX   format_codez.OutputProducer._add_fonts.<locals>.format_codem  sI    '$*g.?B-F$F	#)Wu_#="+C#??%c]+rZ   r  c              3   .   K   | ]  } |        y wrT   r_   )r   r  r  s     rX   r   z,OutputProducer._add_fonts.<locals>.<genexpr>}  s     7dVcdD8IVcs   z/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<</Registry (Adobe)
/Ordering (UCS)
/Supplement 0
>> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
r   Identityz> r   zY/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<</Registry (z)
/Ordering (z)
/Supplement z
>> def
/CMapName /-zO-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
z begincidchar
zHendcidchar
endcmap
CMapName currentdict /CMap defineresource pop
end
endCMapz-UCSz<< /Registry (z) /Ordering (z) /Supplement z >>r             r   ru  r8  CIDFontType0C)Wr   r  r  r  r   r   
color_fontr   _nextr   r   rO  r*   r   r;  r1  r   r   r   r   r   r  r   r   r  r   rt   r   r  r   r   ri   get_all_glyph_namesmissing_glyphsLOGGERwarningftsubsetOptionsdrop_tables	Subsetterpopulater   
getGlyphIDr   r   saveseekreadis_cffis_cid_keyed
startswithisdigitr   glyph_idr0  r   descmissing_width_cid_font_widths_tt_font_widthsr)   rs   r^   cff_rosr(   rr   
c_map_namer.   ru   rl   r}   r-   r   r   r   	font_namerv   r  rw   r,  rj   
font_file3
font_file2pickcache_clear	get_glyphclose),rW   r  r   r   font_objs_per_indexr'  color_glyphbfCharr   code_mappedto_unicode_objt3_font_objrl   core_font_objfontnameglyph_namesmsgoptions	subsetterchar_idcode_to_glyphoutputttfontstreamcomposite_font_obj
is_cff_cidcode_to_cid
cid_widthsr  cid_font_objr   r   r   r  cid_mappingencoding_cmap_objcid_system_info_objfont_descriptor_objcid_to_gid_listccglyph_icid_to_gid_mapcid_to_gid_map_objfont_file_cs_objr  s,                                              @rX   
_add_fontszOutputProducer._add_fonts  s	    BD499??1139LMMD $(T__;;$$t+'V  $(??#9#9K)-):):(%0%6%6%=%=i%H%)YY%7%7  *K& $: %'*.++*;*;*=&E;)%--?u}}-2 MMK,C7~pup}p}7~0~/  @C  D +> "2. v;-~776?+( fY'-"0 !!.':*4??;)01B1B)C&..+*)
 !!+w7.9#DFF+ $) yy(BB & 
 !(#tyy8! !!-9.;#DFF+D'*$TYYK0 #kk==?t**+a/)) $!%!4!4Sb!9$ C 4../"4S1D1D-E-J,K8TTNNExQT #**$SWX## ( #( %..w7	""+"6  - +/++*;*;*=1*=w( T[[33E4D4DEE*=  1 !  (A%{{} &-#x,&" !!"4g>.@#DFF+ "[[>T->->
8<7;
"$K!#J.2kk.?.?.A*{ =$!,,77> % 0 0 4 < < >"%e&6&6qr&:";C"'..C<"NN l # $
 %36K0*/*;*;
3% /B&  '.8Nn&		// &* )4,T2	  !!,86>~6N"3 , , , +/++*;*;*=&E;)%--?u}}-2 MMK,C7dV[VcVc7d0d/eehi +> "2. v;-~776?+( fY'-"0 !!.':0>"-+&H)H!"J||9=6(J *00A0A0C)D#)DID# D:RuB/)D   # )9, -5: 6**2 4++5, 7**21XJ ?2
  #;/0!ww{34""( !&+-)%0 .2&\%*37#*AhZt44%0 ;>(
-zXbWccfg;%7 %%&7A2C&/&3o#$,,59\\2Hh
3<Xt3T'03<Xt3T'05?'2!!"5w?1D.&*ii#04X#-!!"5w?/B,! (.hns&:Q&>O'4':':'<G25gl2CQ/69'D.6IQ
3 (= &(WW_%=N *:!/!6!6x!@4*& %%&8'B6HL3#0,#G /3O/D$,!!"2G<5E'25E'2  ,,.%%113

S
 NV
 #"O1l#s   2f	;fc                     i }t        | j                  j                  j                  j	                         d       D ]>  }t        t        |d         dkD  s| j                  |      |t        t        |d         <   @ |S )Nc                 (    t        t        | d         S )Nr  )r>   r   )r   s    rX   r   z,OutputProducer._add_images.<locals>.<lambda>  s    4SQTXCVrZ   r   usagesr   r  )r   r  image_cacheimagesr  r>   r   
_add_image)rW   r   r   s      rX   _add_imageszOutputProducer._add_images  sr    46II!!((//17V
C CX'!+:>//#:N"4SX#67	

 "!rZ   img_infoc           	         t        t        |d         }|| j                  v r| j                  |   S d}| j                  j                  j
                  j                         D ]  \  }}||k(  s|} n |J t        |t        t        |d         t        t        |d               }| j                  |d      }|| j                  |<   |S )z~
        Returns the PDF object of the ICC profile indexed iccp_i in the FPDF object.
        Adds it if not present.
        iccp_iNdpncs)r-  rP  rQ  iccp)
r>   r   r;  r  r  icc_profilesr   rO  r^   rO  )rW   r	  r  iccp_contenticcp_cr  iccp_obj
iccp_pdf_is           rX   _ensure_iccpzOutputProducer._ensure_iccp  s    
 c8H-.T)))''//..;;AACIFA{% D ''' !3(3/

 &&x8
'1V$rZ   r  c                    t        |j                  d            }|rd nt        |d         }d }|rd n|j                  d      }|dk(  r"t        ddt	        |d         dz  d	z
   g      }nC|3| j                  |      }t        d
t        |      t        d      dg      }n|dk(  r	|d   du rd}d|v rt        t        |d         }d|d    d|d    d}t        dt        t        |d         t        t        |d         t        t        |d         |t        t        |d         t        t        |d         |||
      }| j                  |d      |d<   | j                  j                  r8d|v r4|s2d |d    }	| j                  |d   |d   d!d"|d   |	|d   d#      |_        t!        |t              rd|v rt!        |j"                  t              sJ t%        t        t        |d         | j                  j&                  $      }
| j                  |
d       |j"                  j)                  t+        |
j,                               |S )%NrH  r  r  Indexedz/Indexedr  palr  r   z	/ICCBased0R
DeviceCMYKinvertedTz[1 0 1 0 1 0 1 0]rE  r   dpz /BitsPerComponent bpcr   Imagers  rn   hf)
rj   r-  rA  rB  rC  rD  rI  rE  rF  rH  r  r   smaskz!/Predictor 15 /Colors 1 /Columns 
DeviceGrayr  )rn   r  r  r  r   r  rs  r0  )rM  r,  r(   r)   r   r  r^   r>   r   r4  r   rO  r  r  r  rG  r   rC  r*   r1  r  r  r   )rW   r  rH  rC  rE  r  r  rF  img_objr  
pal_cs_objs              rX   r  zOutputProducer._add_image  sL   $((<01
6@dd4PT:FV#();)#"\c$u+.>!.Ca.G-HJK **40J"KZ#c(C#PQKL(J4',t#tH~.FDJ<':4;-rJ%f.sDI&T#Y'##Ce5Cc+%!
 **7H=X 99..7d?:4T#YK@B!__cc&c M
GN k8,{1Jg118<<<)eT%[1DII<N<NJ j(3&&wz}}'=>rZ   c                     t               }| j                  j                  j                  j	                         D ]'  \  }}t        |      }| j                  |d       |||<   ) |S )Ngfxstate)r   r  r<  r  r   r   rO  )rW   r   
state_dictr   r   s        rX   _add_gfxstateszOutputProducer._add_gfxstatesP  s`    :E- $		 ; ; K K Q Q SJ'
3LlJ7+7"4( !T &%rZ   r   c                     | j                   j                  j                  D ]?  }|j                  j	                  |||      |_        | j                  j                  |       A y)zSAppend soft-mask Form XObjects after patterns exist so we can resolve /Pattern ids.N)r  r<  r  _pathget_resource_dictionaryr   r:  r  )rW   r   r   r   r  s        rX   _add_soft_maskszOutputProducer._add_soft_masksX  sS     44GGI"+//"I"I&(=?Q#I MM  +	 HrZ   c                     | j                   j                  j                  D ]=  \  }}t        |dd      s| j	                  |d       d|_        |j                  ||       ? y)z\Ensure isolated blend forms are part of the XObject set before other resources rely on them._registeredFr  TN)r  r<  r  r  rO  r.  
setdefault)rW   r   r  r  s       rX   #_register_form_xobject_placeholdersz2OutputProducer._register_form_xobject_placeholderse  sW     #ii99GGNE77M59!!'84&*#))%9	 HrZ   shading_objs_per_namer  c                     | j                   j                  j                  D ]/  \  }}t        |dd      }||j	                  |||||      |_        1 y)z@Populate resource dictionaries for isolated blend Form XObjects._blend_groupN)r  r<  r  r  r+  r   )	rW   r   r   r   r1  r  r  r  r  s	            rX   _finalize_form_xobjectsz&OutputProducer._finalize_form_xobjectso  sY     ))55CCJAw!'>4@K&$/$G$G*))'&%! DrZ   c                 f   t               }| j                  j                  j                  t        j
                        D ]p  \  }}t        |t        t        t        f      sJ |j                         D ]  }| j                  |d        |j                         }| j                  |d       |||<   r |S )Nfunctionr)  )r   r  r<  r  r   r  r   r!   r$   r"   get_functionsrO  get_shading_object)rW   r1  r)  r   r6  shading_objs         rX   _add_shadingszOutputProducer._add_shadings  s    BM-!YY88BB##
MGT g';'GHHH#113!!(J7 4181K1K1MKk95*5!$'
 %$rZ   c                    t               }| j                  j                  j                  t        j
                        D ]  \  }}t        |t              sJ | j                  |d       |||<   |j                         s@|j                  |j                         t        j                  d| j                  j                         j                  dd      j                  | j                  j                         z          |S )Nr   r   r   r   )r  y)r   r  r<  r  r   r  r   r#   rO  get_apply_page_ctm
set_matrix
get_matrixr   translationr  r   r]  )rW   r   r   r   s       rX   _add_patternszOutputProducer._add_patterns  s    4?M!YY88BB##
MGT gw///gy1*1!$'))+""&&(++A		|<UQ"U%U499;;'(
 %$rZ   rg  c           
         | j                         }| j                  |       | j                         }| j                         }| j	                  |||      }| j                         }| j                  |||||       | j                  |||       | j                  j                  r$| j                  |||||      }|D ]	  }||_         y t        |d      D ]  \  }	}| j                  j                  j                  |	t        j                         D 
ci c]  }
t#        |
      |t#        |
          }}
| j                  j                  j                  |	t        j$                        D ci c]  }t#        |      |t#        |          }}|j'                         D ci c]>  \  }}|| j                  j                  j                  |	t        j(                        v r||@ }}}| j                  j                  j                  |	t        j*                        D ci c]  }t-        |      |t-        |          }}| j                  j                  j                  |	t        j.                        D ci c]  }t-        |      |t-        |          }}| j                  |||||      |_         y c c}
w c c}w c c}}w c c}w c c}w )Nr   )rm  )r  r0  r(  rA  r  r:  r4  r,  r  single_resources_object_add_resources_dictr   	enumerater<  r	  r   r   r   r  r   r  r  r^   r  )rW   rg  r   r   r   r  r1  resources_dict_objrk  r  font_idpage_font_objs_per_indeximg_idpage_img_objs_per_indexgfx_name	gfx_statepage_gfxstate_objs_per_nameshading_namepage_shading_objs_per_namepattern_namepage_pattern_objs_per_names                        rX   rP  z OutputProducer._insert_resources  s   !--/001CD!%!4!4!6 $ 2 2 4"oo 68M
 !% 2 2 4$$"!!	
 	"$9;M	
 99,,!%!9!9#"&%%" &%7" & *39A)F)F%X $(99#>#>#U#U#_%9%9$,$ L"5c'l"CC$ ) , #'))"="="T"T#_%=%=#+# K!3CK!@@# ( + 2H1M1M1O/1O-9yy22II#_%@%@ i'1O , / )-		(C(C(Z(Z#_%<%<).) %'<S=N'OO) + . )-		(C(C(Z(Z#_%<%<).) %'<S=N'OO) + . &*%=%=,+/..&"E *G,+/..s   J.(J3AJ8J>/Kc           
         d}d\  }}}	}
}|rLt        t        |j                               D ci c]  \  }}d| t        |j                          c}}      }|rLt        t        |j                               D ci c]  \  }}d| t        |j                          c}}      }|rCt        |j                         D ci c]  \  }}d| t        |j                          c}}      }	|rLt        t        |j                               D ci c]  \  }}d| t        |j                          c}}      }
|rLt        t        |j                               D ci c]  \  }}d| t        |j                          c}}      }t        ||||	|
|      }| j                  |       |S c c}}w c c}}w c c}}w c c}}w c c}}w )Nz$[/PDF /Text /ImageB /ImageC /ImageI])NNNNNz/Fr   r   )r&  r'  r(  r   r)  r   )r   r   r   r  r   r%  rO  )rW   r  r   r   r1  r   r&  r'  r(  r   r)  r   r  font_objr#  r   r   r9  pattern_objresources_objs                       rX   rD  z"OutputProducer._add_resources_dict  s    :8T5hWg ,22E2K2K2M+N+Nx L'(++"66+ND  +11C1I1I1K*L*Lw L''**"55*LH "" /E.J.J.L.L*l vJ 88.LK ! .44I4O4O4Q-R-R)k vJ 77-RG ! .44I4O4O4Q-R-R)k vJ 77-RG %#
 	-(]s   #F,
<#F2
#F8
#F>
#G
c                     | j                   j                  j                         ryd}| j                   j                  D ]  }||}| j                  |d        |S )zDBuilds a Structure Hierarchy, including image alternate descriptionsNstructure_tree)r  r[  emptyrO  )rW   rF  rp  s      rX   rQ  z"OutputProducer._add_structure_tree-  sZ    99##))+#yy//G#+'.$g'78 0 $#rZ   c                     | j                   j                  syd }g }t        | j                   j                        D ]8  }t        |t              r|}n|j                  |       | j                  |d       : ||fS )N)Nr_   document_outline)r  _outliner    r   r   r  rO  )rW   rG  ri  rp  s       rX   rR  z$OutputProducer._add_document_outline8  su     yy!!8<57)$))*<*<=G'#45#* $$W-g'9: >  ..rZ   c                     | j                   j                  }|s&| j                   j                  r| j                         }|sy dt	        d       d| d}t        |      }| j                  |       |S )Nz<?xpacket begin="i  z"" id="W5M0MpCehiHzreSzNTczkc9d"?>
z
<?xpacket end="w"?>
)r  xmp_metadatarT  _build_xmp_from_infor  r6  rO  )rW   xmp_srcxpacketrp  s       rX   rS  z OutputProducer._add_xmp_metadataG  sm    ))((49900//1G%c&k]2UV]U^^uv )'"rZ   c           	         t        | j                  dd       xs d}t        | j                  dd       xs d}t        | j                  dd       xs d}|rt        |t              r|g}t        | j                  dd       xs d}|rt        |t              r|g}t        | j                  dd       xs d}t        | j                  dd       xs d}t        | j                  dd       }d }t        |t              r=|j
                  r|n|j                         }|j                  t        j                        }| j                  j                  }	d	t        d
t        fd}
t	        ddddddt        j                        }t	        j                  t        j                        }||k(  r%|j                  d      }|j                  d      }n*|xs |}|j                  d      }|j                  d      }g d}|r|j                  d |
|       d       |rQ|j                  d |
|       d       |j                  d |
|       d       |j                  d |
|       d       |r|j                  d |
|       d       |r,dj                  |      }|j                  d |
|       d       |j                  d       |	ry|j                  dt        |	j                         d       |	j                   r%|j                  d  |
|	j                          d!       |	j                  d"k(  r|j                  d#       |r|d$d% |
|      z   d&z   d'gz  }|r|d(d% |
|      z   d&z   d)gz  }|rD|j                  d*       |D ]  }|j                  d+ |
|       d&        |j                  d,       |g d-z  }d.j                  |      S )/Nr   r   r   r   r   r   r   r   r_  rR   c                 Z    | dnt        t        |       d      }|j                  dd      S )zDReturn XML-escaped text suitable for XMP (attributes or text nodes).r   T)quoter  z&apos;)_html_escaper^   replace)r_  r^  s     rX   escz0OutputProducer._build_xmp_from_info.<locals>.escg  s)    )Bc!fD)IE==h//rZ   i           r   )tzinfoseconds)timespec)z4<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="fpdf2">z
  <rdf:RDFz;    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"z/    xmlns:dc="http://purl.org/dc/elements/1.1/"z,    xmlns:xmp="http://ns.adobe.com/xap/1.0/"z,    xmlns:pdf="http://ns.adobe.com/pdf/1.3/"z3    xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">z!    <rdf:Description rdf:about=""z        xmp:CreatorTool=""z        xmp:CreateDate="z        xmp:ModifyDate="z        xmp:MetadataDate="z        pdf:Producer="r'  z        pdf:Keywords="z      >z      <pdfaid:part>z</pdfaid:part>z      <pdfaid:conformance>z</pdfaid:conformance>   z#      <pdfaid:rev>2020</pdfaid:rev>z      <dc:title><rdf:Alt>z%        <rdf:li xml:lang="x-default">z	</rdf:li>z      </rdf:Alt></dc:title>z      <dc:description><rdf:Alt>z!      </rdf:Alt></dc:description>z      <dc:creator><rdf:Seq>z        <rdf:li>z      </rdf:Seq></dc:creator>)z    </rdf:Description>z  </rdf:RDF>z</x:xmpmeta>r   )r  r  r   r^   r   rj  
astimezoner	   utcrT  now	isoformatr  r   r   partconformance)rW   r   r   r   r   creator_toolr   cdatecreation_date_utcpdfarf  EPOCHrq  
xmp_create
xmp_modify	create_dtpartskeyword_listr   s                      rX   r^  z#OutputProducer._build_xmp_from_infoT  s   		7D17R$))Y5;Hd39rj-XF499j$7=2
8S1 zHtyy)T:@b499j$7=2		?D9 eX&).5;K;K;M 1 < <X\\ Jyy$$	03 	03 	0 r2r1aEll8<<(%)<J)<J)0SI",,i,@J	:J	
 LL4S5F4GqIJLL3C
O3DAFGLL3C
O3DAFGLL5c*o5FaHILL1#h-BC88H-LLL1#l2C1DAFGYLL.s499~.>nMN0T5E5E1F0GG\] yyA~BC+7#e*D{R- E
 17#g,FT3 E
 LL67/AxyAB LL89 
 	

 yyrZ   c                 l   | j                   }	 t        |j                  dd      }t        |j                  t        |dd       t        |dd       t        |dd       t        |dd       t        |dd       |	      }| j                  |       |S # t        $ r}t	        d|j                         |d }~ww xY w)
NT)with_tzr   zCould not format date: r   r   r   r   r   )r   r   r   r   r   r   r   )	r  r+   r   	Exceptionr   r   r   r  rO  )rW   r  r   errorr  s        rX   rU  zOutputProducer._add_info  s    yy	#D$6$6dSM
 **D)T2440T:t4D)T2T:t4'
 	(#  	)$*<*<)=>	s   B 	B3B..B3rA   c                     | j                   j                  r9| j                   j                  }|j                         }| j                  |       |S y rT   )r  rQ   get_encryption_objrO  )rW   encryption_handlerrp  s      rX   rV  zOutputProducer._add_encryption  sC    99&&!%!<!<(;;=Gg&NrZ   c                     | j                   j                  }|sy|D ]*  }|j                  s| j                  |j                         , t	        |      S )zshould be added in _add_catalogN)r  r  r  rO  r)   )rW   r  output_intents      rX   _add_output_intentsz"OutputProducer._add_output_intents  sK    11+M00!!-"C"CD , ''rZ   c                     | j                   }t        t        |dd       |j                  |j                  |j
                        }| j                         |_        | j                  |       |S )Nr  )r  r  r  r  )	r  r  r  r  r  r  r  r  rO  )rW   r  r  s      rX   rL  zOutputProducer._add_catalog  sa    yy vt,((nn#66	
 &*%=%=%?"+&rZ   r  rB  rC  rD  rE  rF  rG  c           
      Z   | j                   }||_        ||_        ||_        ||_        |r=t
        j                  t
        j                  z   }	t        t        |g      |	      |_
        |j                  t        v r*t        |j                        gt        |j                     }
n>t        |j                        dddt        t!        t"        |j                        dz        g}
t%        |
      |_        |rt)        ddi      |_        |j,                  s|j.                  rGi }|j,                  r|j,                  D cg c]F  }t1        |j3                               j5                          d|j7                         j8                   H }}t)        dt%        |      i      |d	<   | j                   j,                  D cg c]5  }|j;                         r#t        |j7                         j                        7 }}|rt%        |      |_        |j.                  rBg }|j.                  j?                         D ]  \  }}|j@                  d
k(  rtC        d| d      tE        |d      r|jF                  so|j@                  J |j@                  dz
  }d
|cxk  rtI        |j                        k  r4n n1t        |j                  |j@                     j                        |_#        |jK                  t1        |d      j5                  |jL                  |j                         d|j5                                  |r"t)        dt%        tO        |            i      |d<   t)        |      |_(        tS        | jU                               D cg c]5  \  }}|jW                         x}| dt)        |j5                                7 }}}|r/|j                  d   jW                         s|jY                  d
d       |r*t)        dt        |      j5                         i      |_-        y y c c}w c c}w c c}}w )Nr  rJ   rI   d   z/Markedtruer   z/Namesz/EmbeddedFilesr   zNamed destination 'z6' was referenced but never set with set_link(name=...)rZ  r   Tr   r  z/Destsz0 <<>>z/Nums).r  r  r  r  r  r   SIGNATURES_EXISTAPPEND_ONLYr   r)   r  	zoom_modeZOOM_CONFIGSr  r   r^   r>   ry   r   r  r   r  r@  named_destinationsr-   basenamerY   rA  refglobally_enclosedr   r   r  r   rX  rZ  r   r  rQ   r   r  rE  r~  r  insertr!  )rW   r  rB  rC  rD  rE  rF  rG  r  flagszoom_confignames_dict_entriesrh  file_spec_namesefglobal_file_specsdests_namesr   rH  r}  r  pagelabelr!  s                           rX   rW  z OutputProducer._finalize_catalog  s    yy*';$//!22]5N5NNE$,!3 45%K! >>\)))*dnn-K ))*D/#56K #+;"7$,i-@$AK!$"9"913"" *.)<)<#)< !!7!7!9:DDFGqI`I`IbIfIfHgh)<   # 8@x898"#34
 #ii66%6++- BLLN--.6 " %
 %&./@&AKO&&)+"&"9"9"?"?"AJD$''1,+1$7mn 
 #44DMM#//;;;%)%5%5%9

<S_<,3DJJt?O?O4P4S4S,TDM  &&$T48BBUYUkUk  vA  vD  vDB  E  F  FG  HL  HV  HV  HX  GY  Z #B& 3;!8F;,?#@A4&x0 !)); <K %T%>%>%@A
A4,,..; c8EOO-./0A 	 

 tzz!};;=q(+&.(;/99;<'K# i#%J
s   ;AP9:P":P'r  c              #      K   t        | j                        }d  | j                  |xx   t        | j                        |z
  z  cc<   y wrT   )r   r  r>  )rW   r  	prev_sizes      rX   r_  zOutputProducer._trace_sizeC  s;     $	**51S5E	5QQ1s   AA
c                     t         j                  d       | j                  j                         D ]%  \  }}t         j                  d|t	        |             ' y )Nz4Final size summary of the biggest document sections:z- %s: %s)r  debugr>  r   _sizeof_fmt)rW   r  section_sizes      rX   ra  z(OutputProducer._log_final_sections_sizesI  sC    KL#'#E#E#K#K#ME<LLUK,EF $NrZ   )r  rF   rR   NrT   r   )Br[   r\   r]   rg   re   r  rr  r4  r^   r`  r,   r;   r   rO  r  rK  r9   ry  r~  slicer   rM  r   rN  r   r   r   ri   r   r  r  objectr  r  r(  r,  r0  r#   r$   r"   r4  r:  rA  rP  r%  rD  rQ  r   r   r<   r   rR  r6  rS  r^  r   rU  rV  r)   r  r  rL  rW  r   r_  ra  r_   rZ   rX   r  r    sI   \-A9 AF$*S0 $T $ @D /7}	 hw&7  */q$  DM 0"Xm-D "R#!%c:o!6R# !%S,%6 7R#  $CN3	R#
 
c7\))	*R#h
"T#z/2 "T#v+%6 3 09tCK0 9Z 9v&S,%6 7 &, $S,%6 7,  $CN3, !j1	,
 
,:"&sJ"7:	: j1 !%S,%6 7  $CL1	
  $C;)>$>? "#w'="=> 
(%tC;)>$>? %%tCL1 %$G4= GT GR@!#w'="=>@ !j1@ !%S,%6 7	@
  $C;)>$>?@  $CL1@ 
@D	$Xi%8 	$/	x)*H5J,KK	L/8N#; Y c Y v7 (*@!A (Xh%7 (j __ %_  	_
 %]3_ #>2_ 'y1_ ##45_ 
_B R R$ R R
GrZ   r  r  r  r<  rn   r  keep_aspect_ratior   pdf_height_to_fliprR   c                     |r| j                  ||||      \  }}}}|r|}||z
  |z
  }	n| }||z   }	d||z  dd||z  dd||z  dd|	|z  dd| d    dS )Nzq .2fz 0 0 r   z cm /Ir  z Do Q)scale_inside_box)
r  r  r<  rn   r  r  r   r  stream_hstream_ys
             rX   stream_content_for_raster_imager  O  s     **1aA6
1a%)A-2q5
QYsO5E!1# 6
AIc?!Hu,S1 23i[	rZ   r'  c           
         d}i }i }d}d}d}t        t        | j                  j                         d             }|D ]  }|J ||   }	|	|dz   k(  r|j                  |k(  ro|j                  ||   d   k(  r,|j                  |g       j                  |j                         n&||   j                          |}||j                  g||<   d}d||<   nJ|r|	}|j                  g||<   n||   j                  |j                         d}n|	}|j                  g||<   d}|	}|j                  } d}
d}d}|}t        |j                               D ]T  \  }}t        |      }||k(  r$|s"||vs|d	k  r||v r||= ||
   ||   z   ||
<   ||= n|}
||z   }||v r|d	kD  }||= |dz  }Sd}V g }t        |j                               D ]w  \  }}t        t        |            dk(  r-|j                  d
| d
|t        |      z   dz
   d
|d           J|j                  d
| dd
j                  d |D               d       y ddj                  |       dS )Nr   r   Fc                     | d   S rv  r_   )items    rX   r   z!_tt_font_widths.<locals>.<lambda>q  s    tAwrZ   r   r   Tr  r    [ c              3   D   K   | ]  }t        t        |              y wrT   r^   r   r   r  s     rX   r   z"_tt_font_widths.<locals>.<genexpr>       '@RCFR     ]
r   r   r   )r   r   r   r   r   r/  r  popr   r   r   )r'  rangeidrange_range_intervalprevcid	prevwidthintervalr   r   
cid_mappedprevknextkprevintrir]  wscwsrn   s                     rX   r  r  h  s   G#%F&(NGIH &**,2FGHF   E]
'A+&  I-$$w(::%%gr299%:K:KL7O'')%G'0%2C2C&DF7O*.w'(G','8'8&9F7O7O**5+<+<=  G$001F7OH%%	7 8 EEG	B'2"g:g1B;#'BwqE"5MF1I5F5Mq	EC7AgG1QJEG (  A'2s2w<1HHq1QR[1_-Qr!ug67HHq3sxx'@R'@@AFG	 (
 rwwqzl!rZ   r  c           
         d}i }i }d}d}d}t        | j                               D ]  \  }}||dz   k(  rx||k(  rQ|||   d   k(  r"|j                  |g       j                  |       n||   j	                          |}||g||<   d}d||<   n,|r	|}|g||<   n||   j                  |       d}n
|}|g||<   d}|}|} d}	d}
d}|}t        |j                               D ]T  \  }}t        |      }||
k(  r$|s"||vs|dk  r||v r||= ||	   ||   z   ||	<   ||= n|}	||z   }
||v r|dkD  }||= |
dz  }
Sd}V g }t        |j                               D ]w  \  }}t        t        |            dk(  r-|j                  d| d|t        |      z   dz
   d|d           J|j                  d| d	dj                  d
 |D               d       y ddj                  |       dS )Nr   r  r   Fr   Tr  r   r  c              3   D   K   | ]  }t        t        |              y wrT   r  r  s     rX   r   z#_cid_font_widths.<locals>.<genexpr>  r  r  r  r   r   r   )r   r   r/  r  r  r   r   r   )r  r  r  r  r  r  r  r  rA  r  r  r  r  r]  r  r  rn   s                    rX   r  r    sF   G#%F&(NGIHZ--/0
U7Q;	!F7OA..%%gr299%@7O'')%G'0%&8F7O*.w'!G',gF7O7O**51 G$gF7OH	/ 12 EEG	B'2"g:g1B;#'BwqE"5MF1I5F5Mq	EC7AgG1QJEG (  A'2s2w<1HHq1QR[1_-Qr!ug67HHq3sxx'@R'@@AFG	 (
 rwwqzl!rZ   r  c                 "    | \  }}d|dd|ddS )Nz[0 0 r  r   r   r_   )r  r  r  s      rX   rz  rz    s%    $Hi8C.)C22rZ   numsuffixc                 \    dD ]   }t        |       dk  r| d| | c S | dz  } " | dd| S )N)r   KiMiGiTiPiEiZii   z3.1fz.1fYi)abs)r  r  units      rX   r  r    sJ    >s8d?$ZvfX..t ? #Yb!!rZ   pathresource_catalogc                     t        | j                  |      j                  d            }| |_        t	        d      |_        t	        d      |_        t        | j                               |_	        d|_
        |S )zSConverts a PaintedSoftMask into a PDF XObject Form suitable for use as a soft mask.r  r8  rK  Formz5<</S /Transparency /CS /DeviceGray /I true /K false>>)r*   renderr;  r*  r(   rr   rj   r)   get_bounding_boxb_boxr}  )r  r  r  s      rX   r  r    sa     4D(E(L(LY(WXGGM	?GL6lGOT2245GMKGMNrZ   r}  r?   c                    | j                  |      }t        |j                  d            }| |_        d|_        t        d      |_        t        d      |_        | j                         }t        |      |_
        d|_        |S )zNConvert a blend group into a Form XObject with an isolated transparency group.r  r8  FrK  r  z+<</S /Transparency /CS /DeviceRGB /I true>>)r  r*   r;  r3  r.  r(   rr   rj   r  r)   r  r}  )r}  r  streamr  bboxs        rX   r  r  	  sq     \\*+Fi(@AG GG	?GL6lGO!!#DTNGMAGMNrZ   )Fr   N)B)rg   loggingr4  abcr   r   collectionsr   r   
contextlibr   r   r	   htmlr
   rd  ior   	fontToolsr   r  annotationsr   r   drawingr   r   drawing_primitivesr   enumsr   r   r   r   errorsr   font_type_3r   r  r   r   r   image_datastructuresr   
line_breakr   outliner   r   r    r   r!   r"   r#   r$   signr%   r&   syntaxr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r   r1   r   r2   r  utilr3   r4   endesiver5   ImportErrortypingr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   
encryptionrA   rB   rC   rD   rE   r  rF   prefsrG   transitionsrH   	getLoggerr[   r  r  rP   ra   ri   r}   r   r   r   r  r%  r,  r6  r   rO  rT  ry  r  r   r  r  r^   r   r6  r  r  ry   rM  r  r  r   r  r   rz  r  r  r  r_   rZ   rX   <module>r     s    	 $ 0 % ' '  ( 6 1 ) V V ! " 0 0 1 6 Q Q < < )    ,
 
 
 2I+((' 
		8	$ ")"s "5  5(Ci C.I Y
9 Y
x+i +22 2$/ /:9 &%$ %#% #*7! *7Z)$ ):7 7tk'i k'\
9 
?9 ?-( -`E" E"P c3j)YUVaX aXHIG IGd$ $*.
  	
    ! 	2B' Bc BJ<c3h <C <~3eUl(; 3 3
"U "C "# "

-
'
;J

+:aF  Fs   I8 8JJ