
    '	4jy                         d Z dZdZdZddlZddlZddlZddlZddl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 ddlmZ dedeeeef   fdZdedefdZ G d d      Z G d de      Zy)zj
PDF template helpers for fpdf2.

Usage documentation at: <https://py-pdf.github.io/fpdf2/Templates.html>
z%Mariano Reingart <reingart@gmail.com>z#Copyright (C) 2010 Mariano ReingartzLGPL 3.0    N)AnyOptionalSequence   )get_stack_level)WrapMode)FPDFException)FPDFcolreturnc                 $    | dz  | dz  dz  | dz  fS )Ni       )r   s    :/DATA/.local/lib/python3.12/site-packages/fpdf/template.py_rgbr      s     5LC3J,c	::    c                     t        |       \  }}}|dk(  r
|dk(  r|dk(  s|dk(  r	|dz  ddS |dz  dd|dz  dd|dz  ddS )Nr      z.3fz g z rg)r   )r   rgbs       r   _rgb_as_strr      sh    3iGAq!	Q16a1fbc'#b!!#gc]!AGC=!c'#c::r   c            '          e Zd ZdZ	 dMdedeeeee	f         ddfdZ
deeee	f      ddfdZededefd	       Zededee   fd
       ZdNdej$                  e   deddfdZ	 	 	 dOdej$                  e   dededee   ddf
dZdede	ddfdZeZdedefdZdede	fdZdededee   fdZddddddddddddddddd d!e	d"ed#ed$ed%eded&ed'ed(ed)ed*ed+ed,ed-ed.ee   d/ee   d0ed1e	ddf&d2Zddddddddd3d!e	d"ed#ed$ed%ed'ed(ed-ed4eeeeef      d1e	ddfd5Zdddddddddd6	d!e	d"ed#ed$ed%ed'ed(ed-ed.ee   d4eeeeef      d1e	ddfd7Zdddddddddd6	d!e	d"ed#ed$ed%ed'ed(ed-ed.ee   d4eeeeef      d1e	ddfd8Z dddddd9d!e	d"ed#ed$ed%eded1e	ddfd:Z!dddddd;d<ddd=	d!e	d"ed#ed$ed%eded&ed'ed(ed-ed1e	ddfd>Z"ddddd?ddddddd@d!e	d"ed#ed%eded'ed(ed-edAee   dBee   dCee   dDee   d1e	ddfdEZ#ddddddddddddddFd!e	d"ed#ed$ed%eded&ed'ed(ed)ed*ed+edGeeez     d-ed1e	ddf dHZ$	 	 	 	 dPdIedJedKed(eddf
dLZ%y)QFlexTemplatez
    A flexible templating class.

    Allows to apply one or several template definitions to any page of
    a document in any combination.

    Usage documentation at: <https://py-pdf.github.io/fpdf2/Templates.html>
    Npdfelementsr   c           	      J   t        |t              st        d      || _        d| _        |r| j                  |       | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  d| _        i | _        y)aC  
        Args:
            pdf (fpdf.fpdf.FPDF): All content will be added to this `FPDF` instance.
            elements (list[dict]): A template definition in a list of dicts.
                If you omit this, then you need to call either load_elements()
                or parse_csv() before doing anything else.
        z('pdf' must be an instance of fpdf.FPDF()N)TLIBEBCC39W)
isinstancer
   	TypeErrorr   splitting_pdfload_elements_text_line_image_rect_ellipse_barcode_code39_writehandlerstexts)selfr   r   s      r   __init__zFlexTemplate.__init__-   s     #t$FGG-1x(--<<	
 &(
r   c                    i dt         t        d      fdt         t        d      fdt        t        fdt        t        fdt        t        fdt        t        fdt         t        d      fd	t        t        fd
t        dt        dt        dt        dt        dt         t        d      fdt         t        d      fdt        dt
        t        d      ft        t        ft         t        d      ft        t        d      fd}|| _        g | _        |D ]  }d|vrd|d<   dD ]Y  }||vs|d   dk(  r<|dk(  rd|v r	|d   |d<   "|dk(  rd|v r	|d   |d<   4|dk(  rd|v r|d   |d   z   |d<   Lt        d| d       d|vr|d   dv rd|d<   nt        d      d	|vr|d   dk(  rd|v r|d   |d	<   d|v r^|d   j                         D ]  }|d vst        d!| d"       d#|d   vrd|d   d#<   d$|d   vr|d   d#   |d   d$<   d%|d   vrd|d   d%<   |j                         D ]  \  }}||v st        ||   |      rt        |t              r|j                  n,d&j                  |D cg c]  }d'|j                   d' c}      }t        d(| d)| d*t        ||         j                   d+       | j                  j                  |d   j!                                 yc c}w ),z
        Load a template definition.

        Args:
            elements (list of dicts): A template definition in a list of dicts
        nameNtypex1y1x2y2fontsizebolditalic	underline
foreground
backgroundaligntextpriority	multiline)rotatewrapmodedash_patternr   )r9   r:   r;   r<   r>   r&   xyhzMandatory key 'z' missing in input datar%   r&   z(Mandatory key 'x2' missing in input datawrL   )dashgapphasezInvalid key 'z' in dash_patternrR   rS   rT   z or 'zValue of element item 'z
' must be z, not ''.)strr:   intfloatobjectbooldictr   keysKeyErroritemsr(   __name__joinr)   appendlower)r6   r   
key_configektrM   ttypes           r   r+   zFlexTemplate.load_elementsI   s   
S$t*%
 S$t*%
 3,	

 3,
 3,
 3,
 S$t*%
 S%L
 F
 f
 
 #
 #
 c4:&
  S$t*%!
" #
$ $T
+%
& Eld4j)!4:.+

0 3;!	A? !*7A:yE) 9&'fAdG$9&'fAdG$9&'g#&6AdG$"_QC7N#OPP 8" 1}V9-AdG"#MNNQ;1V9#5!8 !#AfI">*//1A 88&qc9J'KLL 2 >!2201An%f-. 11/0/@/HAn%e,!N"3312An%g."((*16*QqT1"5 &a. 

#[[Q)GQAajj\*;Q)GH 
 $1!JugWTRSTURVZM`M`Laacd  + IIQvY__./e Z *Hs   /K)sc                 f    | dd dv rt        | d      S | d   dk(  rt        | d      S t        |       S )z#Allow hex and oct values for colorsN   )0x0X   r   0   rX   )ri   s    r   _parse_colorcodezFlexTemplate._parse_colorcode   s>     Ra5L q":Q43;q!91vr   c                 2    t        |       }|dkD  ry|dk  ryy )Nr   TFrq   )ri   is     r   _parse_multilinezFlexTemplate._parse_multiline   s"    Fq5q5r   infileencodingc                 $   t        ||      5 }t        j                  |      }|D ]  }|j                  d      }|rMt	        |t
              r=|j                         j                  d      rt        |dd d      |d<   nt        d      |j                  d      }|swt	        |t
              s|j                         j                  d      rt        |dd d      |d<   t        d	       | j                  |       ddd       y# 1 sw Y   yxY w)
a  
        Load the template definition from a JSON file.
        The data must be structured as an array of objects, with names and values exactly
        equivalent to what would get supplied to load_elements(),

        Args:
            infile (str, path-like object): The filepath of the JSON file.
            encoding (str): The character encoding of the file. Default is UTF-8.
        rw   rD   #r   Nrn   z;If foreground is a string, it must have the form '#rrggbb'.rE   z;If background is a string, it must have the form '#rrggbb'.)openjsonloadgetr(   rW   rc   
startswithrX   
ValueErrorr+   )r6   rv   rw   fdatadfgvalbgvals           r   
parse_jsonzFlexTemplate.parse_json   s     &8,99Q<Dl+Zs3{{}//4*-eABi*<,(Y  l+Zs3{{}//4*-eABi*<,(Y  " t$' -,,s   BDD.ADD	delimiterdecimal_sepc                    d$dt         dt         dt        ffd}dt         dfdt         dfd|dfd	|dfd
|dfd|dfdt         dfd|dfdt        dfdt        dfdt        dfd| j                  dfd| j                  dfdt         dfdt         dfdt        dfd| j                  dfd|dfdt         dff}g | _        |t        j                         }t        ||      5 }t        j                  ||      D ]  }|j                  dgt        |      t        |      z
  z         i }	t        ||      D ]^  \  }
}|
j                         }|s6|d   r"|d   d
k(  r|d    d!v r-t        d"|d    d#      |d   dk(  sHd|	d<   N |d    |      |	|d   <   ` | j
                  j!                  |	        	 ddd       | j
                  D 
cg c]  }
|
d   j#                          c}
| _        y# 1 sw Y   :xY wc c}
w )%a  
        Load the template definition from a CSV file.

        Args:
            infile (str, path-like object): The filepath of the CSV file.
            delimiter (str): The character that separates the fields in the CSV file:
                Usually a comma, semicolon, or tab.
            decimal_sep (str): The decimal separator used in the file.
                Usually either a point or a comma.
            encoding (str): The character encoding of the file.
                Default is the system default encoding.
        ri   defaultr   c                 ^    t        | j                         xs |j                  d            S )z-Convert to float with given decimal separator.)rY   stripreplace)ri   r   r   s     r   _varsep_floatz-FlexTemplate.parse_csv.<locals>._varsep_float   s(     !'').w77SIJJr   r9   Tr:   r;   r<   r=   r>   r?   Fr@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   Nry   )r    rk   r   r   rP   zMandatory value 'z' missing in csv data)ro   )rW   rY   rX   rr   ru   r   localegetpreferredencodingr{   csvreaderextendlenzipr   r	   rb   rc   r]   )r6   rv   r   r   rw   r   rd   r   rowkargsvalcfgvss      `         r   	parse_csvzFlexTemplate.parse_csv   s?   (	KS 	K3 	K 	K S$S$=$'=$'=$'=$'S% ]E*S% sE"#u%400%8400%8c5!S% e$$//7}e,e$)

, 224H&8,zz!y9

B43z?SX#=>?(* #C 4HCBq6"1v~#a&M2I $&3&7Ax?T$U'" !" !Vz101E*- )/Ar
c!f! !5" $$U++ : -. 59MMBMSS[&&(MB	/ -,. Cs   BG$46G$G0$G-r9   valuec                     t        |t              sJ dt        |      j                   d       |j	                         | j
                  vrt        d|       || j                  |j	                         <   y )N!name must be of type 'str', not 'rV   z%Element not loaded, cannot set item: )r(   rW   r:   r`   rc   r]   r	   r5   )r6   r9   r   s      r   __setitem__zFlexTemplate.__setitem__  sr    #
 	G.tDz/B/B.C2F	G 
 ::<tyy("Gv NOO#(

4::< r   c                     t        |t              sJ dt        |      j                   d       |j	                         | j
                  v S )Nr   rV   )r(   rW   r:   r`   rc   r]   )r6   r9   s     r   __contains__zFlexTemplate.__contains__&  sN    #
 	G.tDz/B/B.C2F	G 
 zz|tyy((r   c                 *   t        |t              sJ dt        |      j                   d       || j                  vrt        |      |j                         | j                  v r| j                     S t        fd| j                  D        d       S )Nr   rV   c              3   V   K   | ]   }|d    j                         k(  s|d    " yw)r9   rG   Nrc   ).0rM   keys     r   	<genexpr>z+FlexTemplate.__getitem__.<locals>.<genexpr>8  s(     J161Bc1IQvYs   )
))
r(   rW   r:   r`   r]   r^   rc   r5   nextr   )r6   r9   r   s     @r   __getitem__zFlexTemplate.__getitem__,  s    #
 	G.tDz/B/B.C2F	G 
 tyy 4. jjl$**::c?"JJD
 	
r   rG   element_namec                 N   t        fd| j                  D              }| j                  s)t               | _        | j                  j	                          | j                  J d}|j                  d      r|dz  }|j                  d      r|dz  }|j                  d      r|dz  }| j                  j                  |d	   ||d
          | j                  j                  |d   |d   z
  |d   |d   z
  t        |      |j                  dd      dd|j                  dd            S )a  
        Split a string between words, for the parts to fit into a given element
        width. Additional splits will be made replacing any '\n' characters.

        Args:
            text (str): The input text string.
            element_name (str): The name of the template element to fit the text inside.

        Returns:
            A list of substrings, each of which will fit into the element width
            when rendered in the element font style and size.
        c              3   j   K   | ]*  }|d    j                         j                         k(  r| , yw)r9   Nr   )r   elementr   s     r   r   z/FlexTemplate.split_multicell.<locals>.<genexpr>H  s7      
(v$$&,*<*<*>> (s   03r   rA   r#   rB   r"   rC   Ur?   r@   r=   r;   r>   r<   rF   TLINESrK   WORD)rQ   rO   rG   rF   dry_runoutputrK   )	r   r   r*   r
   add_pager~   set_font
multi_cellrW   )r6   rG   r   r   styles     `  r   split_multicellzFlexTemplate.split_multicell;  s$     
==
 

 !!!%D'')!!---;;vSLE;;x SLE;;{#SLE##GFOUGFOL!!,,dmgdm+dmgdm+T++gr*[[V4 - 
 	
r   r   r   	helvetica
         ?Fr   )r;   r<   r=   r>   rG   r?   r@   scalerA   rB   rC   rF   rD   rE   rI   rK   _r;   r<   r=   r>   r?   r@   r   rA   rB   rC   rF   rD   rE   rI   rK   __c                R   |sy | j                   }|j                  t        |      k7  r |j                  t	        |        |d}n2d}|j
                  t        |      k7  r |j                  t	        |        |j                         j                         }d}dD ]8  }|j                  d| d      s|j                  d| d      s/|dd	 }||z  }: |	r|d
z  }|
r|dz  }|r|dz  }|j                  ||||z         |j                  ||       ||z
  ||z
  }}||j                  |||d||       y |r,|j                  |||d||t        j                   |             y |j                  ||||t        j                   |      dd      d   }|j                  |||d||       y )NFTr   r#   r"   r   <></   r#   r"   r   r   )rQ   rO   rG   borderrF   fill)rQ   rO   rG   r   rF   r   rK   r   )rQ   rO   rG   rF   rK   r   r   )r   
text_colorr   set_text_colorr   
fill_colorset_fill_colorr   rc   r   endswithr   set_xycellr   r   coerce)r6   r;   r<   r=   r>   rG   r?   r@   r   rA   rB   rC   rF   rD   rE   rI   rK   r   r   r   r   r   tagwidthheights                            r   r,   zFlexTemplate._textc  s   * hh>>[44CZ 01DD~~Z!88"""D$45zz|!!# C3%qz*t}}r#a[/IAbz ! SLESLESLET5$,/

2rRbvHHuT!5tHTNN!2   >>!2 "  D HHuT!5tHTr   )r;   r<   r=   r>   r@   r   rD   rL   rL   c                   | j                   j                  J | j                   j                  j                         j                         t	        |      k7  r" | j                   j
                  t        |        | j                   j                  ||z         || j                   j                  }t        |t              rN| j                   j                  |j                  dd      |j                  dd      |j                  dd             n&| j                   j                  |d   |d   |d          | j                   j                  ||||       | | j                   j                  di  y y )NrR   r   rS   rT   r   rk   r   )r   
draw_color	serializerc   r   set_draw_colorr   set_line_widthrL   r(   r\   set_dash_patternr~   line)r6   r;   r<   r=   r>   r@   r   rD   rL   r   r   restore_dash_patterns               r   r-   zFlexTemplate._line  sG    xx""...88((*002k*6MM#DHH##T*%56u-##'88#8#8 ,-)) $$ !$$q !$$
 )) O\!_l1o 	b"b"%#%DHH%% & $r   )	r;   r<   r=   r>   r@   r   rD   rE   rL   c       	            | j                   }|j                  J |j                  j                         j                         t	        |      k7  r |j
                  t        |        |d}n2d}|j                  t	        |      k7  r |j                  t        |        |j                  ||z         |	| j                   j                  }t        |	t              rD|j                  |	j                  dd      |	j                  dd      |	j                  dd             n|j                  |	d   |	d   |	d          |j                  ||||z
  ||z
  |	       |	 | j                   j                  d
i  y y NDFDrR   r   rS   rT   r   rk   )r   r   )r   r   r   rc   r   r   r   r   r   r   rL   r(   r\   r   r~   rectr6   r;   r<   r=   r>   r@   r   rD   rE   rL   r   r   r   r   r   s                  r   r/   zFlexTemplate._rect  sn    hh~~)))>>##%++-Z1HHCZ 01EE~~Z!88"""D$454%<(##'88#8#8 ,-$$ $$ !$$q !$$
 $$\!_l1o|TUWRb"r'7#%DHH%% & $r   c       	            | j                   }|j                  J |j                  j                         j                         t	        |      k7  r |j
                  t        |        |d}n2d}|j                  t	        |      k7  r |j                  t        |        |j                  ||z         |	| j                   j                  }t        |	t              rD|j                  |	j                  dd      |	j                  dd      |	j                  dd             n|j                  |	d   |	d   |	d          |j                  ||||z
  ||z
  |	       |	 | j                   j                  d
i  y y r   )r   r   r   rc   r   r   r   r   r   r   rL   r(   r\   r   r~   ellipser   s                  r   r0   zFlexTemplate._ellipse  sn    hh~~)))>>##%++-Z1HHCZ 01EE~~Z!88"""D$454%<(##'88#8#8 ,-$$ $$ !$$q !$$
 $$\!_l1o|TUWBBGR"WE:#%DHH%% & $r   )r;   r<   r=   r>   rG   c                X    |r(| j                   j                  |||||z
  ||z
  d       y y )Nr   )rQ   rO   link)r   image)r6   r;   r<   r=   r>   rG   r   r   s           r   r.   zFlexTemplate._image5  s0     HHNN4R27b2gBNG r   interleaved 2of5 ntr   )	r;   r<   r=   r>   rG   r?   r@   r   rD   c       	         P   | j                   }|j                  J |j                  j                         j                         t	        |	      k7  r |j
                  t        |	        |j                         j                         }|dk(  r|j                  |||||z  ||z
         y y )Nr   )rQ   rO   )	r   r   r   rc   r   r   r   r   interleaved2of5)r6   r;   r<   r=   r>   rG   r?   r@   r   rD   r   r   r   s                r   r1   zFlexTemplate._barcodeB  s     hh~~)))>>##%++-Z1HHCZ 01zz|!!#((b"uRH )r   g      ?)r;   r<   r>   rG   r@   r   rD   rM   rN   rQ   rO   rM   rN   rQ   rO   c                p   ||	|
|$t        j                  dt        t                      | j                  }|j
                  J |j
                  j                         j                         t        |      k7  r |j                  t        |        ||z
  }|dk  rd}|j                  |||||z  |       y )NzVcode39 arguments x/y/w/h are deprecated since v2.4.4, please use x1/y1/y2/size instead
stacklevelr      )warningswarnDeprecationWarningr   r   r   r   rc   r   r   r   code39)r6   r;   r<   r>   rG   r@   r   rD   rM   rN   rQ   rO   r   r   r   s                  r   r2   zFlexTemplate._code39Y  s      =AMQ]amMM8 #*, hh~~)))>>##%++-Z1HHCZ 01G6A

4Rq1r   )r;   r<   r=   r>   rG   r?   r@   r   rA   rB   rC   r   rD   r   c                   |sy | j                   }|j                  t        |      k7  r |j                  t	        |        |j                         j                         }d}dD ]8  }|j                  d| d      s|j                  d| d      s/|dd }||z  }: |	r|dz  }|
r|d	z  }|r|d
z  }|j                  ||||z         |j                  ||       |j                  d||       y )Nr   r   r   r   r   r   r   r#   r"   r   r   )r   r   r   r   r   r   rc   r   r   r   r   write)r6   r;   r<   r=   r>   rG   r?   r@   r   rA   rB   rC   r   rD   r   r   r   r   r   s                      r   r3   zFlexTemplate._write}  s    & hh>>[44CZ 01zz|!!# C3%qz*t}}r#a[/IAbz ! SLESLESLET5$,/

2r		!T4 r   offsetxoffsetyrJ   c           	         t        | j                  d       }| j                  j                         5  |D ]  }|j	                         }| j
                  j                  |d   j                         |j                  dd            |d<   |dk7  rD|d   |z  |d<   |d   |z  |d<   |d   |d	   |d   z
  |z  z   |d	<   |d   |d
   |d   z
  |z  z   |d
<   |r|d   |z   |d<   |d	   |z   |d	<   |r|d   |z   |d<   |d
   |z   |d
<   ||d<   |d   j                         }|r| j                  j                  |||      5  d|v rJ|d   rE| j                  j                  |d   |d   |d         5   | j                  |   di | ddd       n | j                  |   di | ddd       rd|v rK|d   rF| j                  j                  |d   |d   |d         5   | j                  |   di | ddd        | j                  |   di |  	 ddd       i | _        y# 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   i | _        yxY w)aX  
        Add the contents of the template to the PDF document.

        Args:
            offsetx, offsety (float): Place the template to move its origin to the given coordinates.
            rotate (float): Rotate the inserted template around its (offset) origin.
            scale (float): Scale the inserted template by this factor.
        c                     | d   S )NrH   r   )rM   s    r   <lambda>z%FlexTemplate.render.<locals>.<lambda>  s    a
mr   )r   r9   rG   r   r   r;   r<   r=   r>   r   r:   rJ   Nr   )sortedr   r   local_contextcopyr5   r~   rc   upperrotationr4   )	r6   r   r   rJ   r   sorted_elementsr   elehandler_names	            r   renderzFlexTemplate.render  ss    !4KLXX##%*lln"jjnnS[->->-@#''&RTBUVFC< #D	E 1CI #D	E 1CI #D	c$i'$-.G5-P QCI #D	c$i'$-.G5-P QCI #D	G 3CI #D	G 3CI #D	G 3CI #D	G 3CI$G"6{002**67GD#s?s8}!%!2!23x=#d)SQUY!W ;l ; Bc B "X!W 8DMM,7>#> ED  33x=!XX..s8}c$iTS7DMM,7>#> TS 4l3:c:9 + &< 
 "X!W ED TS5 &< 
sT   DI:0H,*H 	 H,9IH9-"I H)%H,,H61I9I>II)N)zutf-8),r   N)        r  r  r   )&r`   
__module____qualname____doc__r
   r   r   r\   rW   r   r7   r+   staticmethodrX   rr   r[   ru   osPathLiker   r   r   setr   r   listr   rY   r,   tupler-   r/   r0   r.   r1   r2   r3   r  r   r   r   r   r   #   s    IM((#+HT#s(^,D#E(	(8S0htCH~&> S04 S0j C C   C HTN  %S!1 %S %t %D "&ICC IC IC 	IC
 3-IC 
ICV) )C )D ) C) ) )
 
 
&
C &
s &
tCy &
V $($(%FUFU FU 	FU
 FU FU FU FU FU FU FU FU FU FU FU  SM!FU" D>#FU$ %FU& 'FU( 
)FUV =A(( ( 	(
 ( ( ( ( ( uUE5%89:( ( 
(Z $(=A.. . 	.
 . . . . . SM. uUE5%89:. . 
.f $(=A.. . 	.
 . . . . . SM. uUE5%89:. . 
.f HH H 	H
 H H H H 
H  )II I 	I
 I I I I I I I I 
I4 !!!! 2 2  2 	 2
  2  2  2  2  2 E? 2 E? 2 E? 2 E? 2  2 
 2N $&&!&! &! 	&!
 &! &! &! &! &! &! &! &! &! sSy!&! &!  !&!" 
#&!T .. . 	.
 . 
.r   r   c                        e Zd ZdZ	 	 	 	 	 	 	 	 	 	 ddeej                  e      deee	ee
f         dedededed	ed
edededdf fdZddZddee   dee   ddf fdZ xZS )Templatez
    A simple templating class.

    Allows to apply a single template definition to all pages of a document.

    Usage documentation at: <https://py-pdf.github.io/fpdf2/Templates.html>
    Nrv   r   formatorientationunittitleauthorsubjectcreatorkeywordsr   c                    |r$t        j                  dt        t                      dD ],  }t	        t               |   t              rt        d| d       t        |||      }|j                  |       |j                  |       |j                  |	       |j                  |       |j                  |
       t        | =  ||       y)	a  
        Args:
            infile (str): [**DEPRECATED since 2.2.0**] unused, will be removed in a later version
            elements (list[dict]): A template definition in a list of dicts.
                If you omit this, then you need to call either load_elements()
                or parse_csv() before doing anything else.
            format (str): The page format of the document (eg. "A4" or "letter").
            orientation (str): The orientation of the document.
                Possible values are "portrait"/"P" or "landscape"/"L"
            unit (str): The units used in the template definition.
                One of "mm", "cm", "in", "pt", or a number for points per unit.
            title (str): The title of the document.
            author (str): The author of the document.
            subject (str): The subject matter of the document.
            creator (str): The creator of the document.
        zD"infile" is deprecated since v2.2.0, unused and will soon be removedr   )r  r  r  r  r  r  r  r  z
Argument "z" must be of type str.)r  r  r  )r   r   N)r   r   r   r   r(   localsrW   r)   r
   	set_title
set_authorset_creatorset_subjectset_keywordssuperr7   )r6   rv   r   r  r  r  r  r  r  r  r  argr   	__class__s                r   r7   zTemplate.__init__  s    : MMV"*,
	
C fhsmS1*SE1G HII	
 &kEev  "S84r   c                     | j                   j                  r| j                          | j                   j                          y)z5Finish the current page, and proceed to the next one.N)r   pager  r   )r6   s    r   r   zTemplate.add_page  s&    88==KKMr   outfiledestc                     |r$t        j                  dt        t                      | j                  j                  ddd       | j                  j                  dd	       t        | !          |r| j                  j                  |       y
y
)aZ  
        Finish the document and process all pending data.

        Args:
            outfile (str): If given, the PDF file will be written to this file name.
                Alternatively, the `.pdf.output()` method can be manually called.
            dest (str): [**DEPRECATED since 2.2.0**] unused, will be removed in a later version.
        zB"dest" is deprecated since v2.2.0, unused and will soon be removedr   r   r#   rn   )r   r@   Fr   )marginN)
r   r   r   r   r   r   set_auto_page_breakr  r  r   )r6   r#  r$  r   s      r   r  zTemplate.render   st     MMT"*,
 	+Sr:$$U1$5HHOOG$ r   )
NNA4portraitmmr   r   r   r   r   )r   N)NN)r`   r  r  r  r   r  r	  rW   r   r\   r   r7   r   r  __classcell__)r   s   @r   r  r    s     .27;%65S)*65 8DcN3465 	65
 65 65 65 65 65 65 65 
65p%hsm %(3- %SW % %r   r  )r  
__author____copyright____license__r   r|   r   r  r   typingr   r   r   deprecationr   enumsr   errorsr	   fpdfr
   rX   r  rY   r   rW   r   r   r  r   r   r   <module>r4     s    5
5 
   	  * * (  ! ;c ;eE5%/0 ;;S ;S ;p
 p
f]%| ]%r   