
    Rj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dS )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    N/usr/local/lib/hermes-agent/venv/lib/python3.11/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      s~    3iiGAq!	Q166a1ffbc'!!!!!#g:::AG:::!c':::::r   c            '       &   e Zd ZdZ	 dQd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dRdej        e         deddfdZ	 	 	 dSd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d0ed1ee         d2ee         d3ed4e	ddf&d5Zdddddd ddd6d$e	d%ed&ed'ed(ed*ed+ed0ed7eeeeef                  d4e	ddfd8Zdddddd dddd9	d$e	d%ed&ed'ed(ed*ed+ed0ed1ee         d7eeeeef                  d4e	ddfd:Zdddddd dddd9	d$e	d%ed&ed'ed(ed*ed+ed0ed1ee         d7eeeeef                  d4e	ddfd;Z dddddd<d$e	d%ed&ed'ed(eded4e	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d0ed4e	ddfdAZ"dddddBd ddddddCd$e	d%ed&ed(eded*ed+ed0edDee         dEee         dFee         dGee         d4e	ddfdHZ#dddddddd d!d!d!dddId$e	d%ed&ed'ed(eded)ed*ed+ed,ed-ed.edJeeez           d0ed4e	ddf dKZ$	 	 	 	 dTdMedNedOed+eddf
dPZ%dS )U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           	         t          |t                    st          d          || _        d| _        |r|                     |           | j        | j        | j        | j	        | j
        | j        | j        | j        d| _        i | _        dS )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$$ 	HFG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 ]p}||vrj|d         dk    rK|dk    rd|v r|d         |d<   (|dk    rd|v r|d         |d<   >|dk    rd|v r|d         |d         z   |d<   ]t          d| d          qd|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                                         D ]}|d vr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%<   |
                                D ]\  }}||v rt          ||         |          slt          |t                    r|j        nd&                    d' |D                       }t          d(| d)| d*t          ||                   j         d+          | j                            |d                                                    dS ),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 c                 $    g | ]}d |j          d S )')__name__).0rM   s     r   
<listcomp>z.FlexTemplate.load_elements.<locals>.<listcomp>   s&    )G)G)G*;aj*;*;*;)G)G)Gr   zValue of element item 'z
' must be z, not ''.)strr:   intfloatobjectbooldictr   keysKeyErroritemsr(   rW   joinr)   appendlower)r6   r   
key_configektttypes          r   r+   zFlexTemplate.load_elementsI   sS   
S$t**%
 S$t**%
 3,	

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

+%
& Eld4jj)!4::.+
 
 

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

#[[)G)GQ)G)G)GHH 
 $d!dduddTRSTURVZZM`ddd   IQvY__..////e2	0 2	0r   sc                     | 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   r\   )rl   s    r   _parse_colorcodezFlexTemplate._parse_colorcode   sK     RaR5L  q"::Q43;;q!991vvr   c                 D    t          |           }|dk    rdS |dk     rdS d S )Nr   TFrt   )rl   is     r   _parse_multilinezFlexTemplate._parse_multiline   s.    FFq554q555tr   utf-8infileencodingc                    t          ||          5 }t          j        |          }|D ]}|                    d          }|rgt	          |t
                    rR|                                                    d          rt          |dd         d          |d<   nt          d          |                    d          }|rgt	          |t
                    rR|                                                    d          rt          |dd         d          |d<   t          d	          | 
                    |           ddd           dS # 1 swxY w Y   dS )
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.
        r{   rD   #r   Nrq   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(   r[   rf   
startswithr\   
ValueErrorr+   )r6   rz   r{   fdatadfgvalbgvals           r   
parse_jsonzFlexTemplate.parse_json   s    &8,,, 	%9Q<<D  l++ Zs33 {{}}//44 *-eABBi*<*<,(Y   l++ Zs33 {{}}//44 *-eABBi*<*<,(Y   t$$$'	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   D+E

EE,.	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 ]}|                    dgt          |          t          |          z
  z             i }	t          ||          D ]\  }
}|
                                }|sJ|d         r0|d          dk    r|d!         d"v r:t          d#|d           d$          |d          dk    rd |	d<   e |d!         |          |	|d          <   | j                            |	           	 ddd           n# 1 swxY w Y   d% | j        D             | _        dS )'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.
        rr   rl   defaultr   c                 r    t          |                                 p|                    d                    S )z-Convert to float with given decimal separatorr   )r]   stripreplace)rl   r   r   s     r   _varsep_floatz-FlexTemplate.parse_csv.<locals>._varsep_float   s0     !'')).w77SIIJJJr   r9   Tr:   r;   r<   r=   r>   r?   Fr@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   Nr}   )r    rn   r   r   rP   zMandatory value 'z' missing in csv datac                 B    g | ]}|d                                           S )r9   rf   )rX   vals     r   rY   z*FlexTemplate.parse_csv.<locals>.<listcomp>  s(    BBBSS[&&((BBBr   )rr   )r[   r]   r\   ru   rx   r   localegetpreferredencodingr   csvreaderextendlenzipr   r	   re   ra   )r6   rz   r   r   r{   r   rg   r   rowkargsr   cfgvss      `         r   	parse_csvzFlexTemplate.parse_csv   s   (	K 	KS 	K3 	K 	K 	K 	K 	K 	K 	K S$S$=$'=$'=$'=$'S% ]E*S% sE"#u%40%840%8c5!S% e$$/7}e,e$)

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

B43z??SXX#=>???(* #C 4 4 3 3HCB 3q6 
2"1v~~#a&M2I2I $&3$UA$U$U$U'" '" !" !Vz1101E*- )/Ar

c!f$$U+++++,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,. CBDMBBB			s   C<G##G'*G'r9   valuec                    t          |t                    s J dt          |          j         d            |                                | j        vrt          d|           || j        |                                <   d S )N!name must be of type 'str', not 'rZ   z%Element not loaded, cannot set item: )r(   r[   r:   rW   rf   ra   r	   r5   )r6   r9   r   s      r   __setitem__zFlexTemplate.__setitem__  s    #
 
 	G 	GFtDzz/BFFF	G 	G 
 ::<<ty(( N N NOOO#(
4::<<   r   c                     t          |t                    s J dt          |          j         d            |                                | j        v S )Nr   rZ   )r(   r[   r:   rW   rf   ra   )r6   r9   s     r   __contains__zFlexTemplate.__contains__&  s_    #
 
 	G 	GFtDzz/BFFF	G 	G 
 zz||ty((r   c                 4   t          |t                    s J dt          |          j         d            || j        vrt          |          |                                | j        v r| j                 S t          fd| j	        D             d           S )Nr   rZ   c              3   d   K   | ]*}|d                                           k     |d         V  +dS )r9   rG   Nr   )rX   rM   keys     r   	<genexpr>z+FlexTemplate.__getitem__.<locals>.<genexpr>8  s?      JJ161B1Bc1I1IQvY1I1I1I1IJJr   )
r(   r[   r:   rW   ra   rb   rf   r5   nextr   )r6   r9   r   s     @r   __getitem__zFlexTemplate.__getitem__,  s    #
 
 	G 	GFtDzz/BFFF	G 	G 
 ty  4.. jjll$*:c?"JJJJJJJD
 
 	
r   rG   element_namec                    t          fd| j        D                       }| j        s,t                      | _        | j                                         | j        J d}|                    d          r|dz  }|                    d          r|dz  }|                    d          r|d	z  }| j                            |d
         ||d                    | j                            |d         |d         z
  |d         |d         z
  t          |          |                    dd          dd|                    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   |   K   | ]6}|d                                                                            k    2|V  7dS )r9   Nr   )rX   elementr   s     r   r   z/FlexTemplate.split_multicell.<locals>.<genexpr>H  sV       
 
v$$&&,*<*<*>*>>> >>>>
 
r   Nr   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_cellr[   )r6   rG   r   r   styles     `  r   split_multicellzFlexTemplate.split_multicell;  si     
 
 
 
=
 
 
 
 

 ! 	*!%D'')))!---;;v 	SLE;;x   	SLE;;{## 	SLE##GFOUGFOLLL!,,dmgdm+dmgdm+T++gr**[[V4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                   |sd S | j         }|j        t          |          k    r |j        t	          |            |d}n1d}|j        t          |          k    r |j        t	          |            |                                                                }d}dD ]C}|	                    d| d          r(|
                    d| d          r|dd	         }||z  }D|	r|d
z  }|
r|dz  }|r|dz  }|                    ||||z             |                    ||           ||z
  ||z
  }}||                    |||d||           d S |r0|                    |||d||t          j        |                     d S |                    ||||t          j        |          dd          d         }|                    |||d||           d S )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   rf   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  sQ   *  	Fh>[4444CZ 0 011DDD~Z!8!888""D$4$455zz||!!##  	 	Cz3zzz** t}}[#[[[/I/I AbDz 	SLE 	SLE 	SLET5$,///

2rRbvHHuT!5tHTTTTT 	UNN!22       >>!22 "   D HHuT!5tHTTTTTr   )r;   r<   r=   r>   r@   r   rD   rL   rL   c                   | j         j        J | j         j                                                                        t	          |          k    r | j         j        t          |            | j                             ||z             || j         j        }t          |t                    rY| j                             |                    dd          |                    dd          |                    dd                     n.| j                             |d         |d         |d                    | j                             ||||           | | j         j        di | d S d S )NrR   r   rS   rT   r   rn   r   )r   
draw_color	serializerf   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  s    x"...8((**0022k*6M6MMM#DH#T*%5%566u---##'8#8 ,-- )) $$  !$$q  !$$ 
 
 
 
 )) O\!_l1o   	b"b"%%%#%DH%  &     $#r   )	r;   r<   r=   r>   r@   r   rD   rE   rL   c       	            | j         }|j        J |j                                                                        t	          |          k    r |j        t          |            |d}n1d}|j        t	          |          k    r |j        t          |            |	                    ||z             |	| j         j
        }t          |	t                    rT|                    |	                    dd          |	                    dd          |	                    dd                     n)|                    |	d         |	d         |	d                    |                    ||||z
  ||z
  |	           |	 | j         j        d
i | d S d S NDFDrR   r   rS   rT   r   rn   )r   r   )r   r   r   rf   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  s    h~)))>##%%++--Z1H1HHHCZ 0 011EEE~Z!8!888""D$4$4554%<(((##'8#8 ,-- X$$ $$  !$$q  !$$ 
 
 
 
 $$\!_l1o|TUWWWRb"r'777#%DH%  &     $#r   c       	            | j         }|j        J |j                                                                        t	          |          k    r |j        t          |            |d}n1d}|j        t	          |          k    r |j        t          |            |	                    ||z             |	| j         j
        }t          |	t                    rT|                    |	                    dd          |	                    dd          |	                    dd                     n)|                    |	d         |	d         |	d                    |                    ||||z
  ||z
  |	           |	 | j         j        d
i | d S d S r   )r   r   r   rf   r   r   r   r   r   r   rL   r(   r`   r   r   ellipser   s                  r   r0   zFlexTemplate._ellipse  s    h~)))>##%%++--Z1H1HHHCZ 0 011EEE~Z!8!888""D$4$4554%<(((##'8#8 ,-- X$$ $$  !$$q  !$$ 
 
 
 
 $$\!_l1o|TUWWWBBGR"WE:::#%DH%  &     $#r   )r;   r<   r=   r>   rG   c                Z    |r(| j                             |||||z
  ||z
  d           d S d S )Nr   )rQ   rO   link)r   image)r6   r;   r<   r=   r>   rG   r   r   s           r   r.   zFlexTemplate._image5  sG      	HHNN4R27b2gBNGGGGG	H 	Hr   interleaved 2of5 ntr   )	r;   r<   r=   r>   rG   r?   r@   r   rD   c       	         h   | j         }|j        J |j                                                                        t	          |	          k    r |j        t          |	            |                                                                }|dk    r"|                    |||||z  ||z
             d S d S )Nr   )rQ   rO   )	r   r   r   rf   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     h~)))>##%%++--Z1H1HHHCZ 0 011zz||!!##(((b"uRHHHHH )(r   g      ?)r;   r<   r>   rG   r@   r   rD   rM   rN   rQ   rO   rM   rN   rQ   rO   c                ~   ||	|
|(t          j        dt          t                                 | j        }|j        J |j                                                                        t          |          k    r |j	        t          |            ||z
  }|dk    rd}|                    |||||z  |           d S )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   rf   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M8 #*,,    h~)))>##%%++--Z1H1HHHCZ 0 011G66A

4Rq11111r   )r;   r<   r=   r>   rG   r?   r@   r   rA   rB   rC   r   rD   r   c                   |sd S | j         }|j        t          |          k    r |j        t	          |            |                                                                }d}dD ]C}|                    d| d          r(|                    d| d          r|dd         }||z  }D|	r|dz  }|
r|d	z  }|r|d
z  }|	                    ||||z             |
                    ||           |                    d||           d S )Nr   r   r   r   r   r   r   r#   r"   r   r   )r   r   r   r   r   r   rf   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=   &  	Fh>[4444CZ 0 011zz||!!##  	 	Cz3zzz** t}}[#[[[/I/I AbDz 	SLE 	SLE 	SLET5$,///

2r		!T4     r           offsetxoffsetyrJ   c           	      @   t          | j        d           }| j                                        5  |D ]I}|                                }| j                            |d                                         |                    dd                    |d<   |dk    r\|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                                         }|r| j        	                    |||          5  d|v rb|d         rZ| j        	                    |d         |d         |d                   5   | j
        |         di | ddd           n# 1 swxY w Y   n | j
        |         di | ddd           n# 1 swxY w Y   d|v rc|d         r[| j        	                    |d         |d         |d                   5   | j
        |         di | ddd           n# 1 swxY w Y   6 | j
        |         di | K	 ddd           n# 1 swxY w Y   i | _        dS )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
m r   )r   r9   rG   r   r   r;   r<   r=   r>   r   r:   rJ   Nr   )sortedr   r   local_contextcopyr5   r   rf   upperrotationr4   )	r6   r   r   rJ   r   sorted_elementsr   elehandler_names	            r   renderzFlexTemplate.render  s    !4K4KLLLX##%% 	; 	;* ; ;llnn"jnnS[->->-@-@#''&RTBUBUV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 4 #D	G 3CI #D	G 3CI 4 #D	G 3CI #D	G 3CI$G"6{0022 ;**67GDD ? ?#s??s8}?!%!2!23x=#d)SQUY!W!W C C ;l ; B Bc B B BC C C C C C C C C C C C C C C 8DM,7>>#>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  33x=!X..s8}c$iTSS ? ?7DM,7>>#>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4l3::c::::9;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;< 


s~   D?J0;G6+G	?G6GG6GG6*J6G::J=G:>?J=IJI!!J$I!%JJJ)N)ry   )r   r   N)r   r   r   r   )&rW   
__module____qualname____doc__r
   r   r   r`   r[   r   r7   r+   staticmethodr\   ru   r_   rx   osPathLiker   r   r   setr   r   listr   r]   r,   tupler-   r/   r0   r.   r1   r2   r3   r  r   r   r   r   r   #   sE	         IM( ((#+HT#s(^,D#E(	( ( ( (8S0htCH~&> S04 S0 S0 S0 S0j C C    \ C HTN    \% %S!1 %S %t % % % %D "&IC ICC IC IC 	IC
 3-IC 
IC IC 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 FU FU  SM!FU" D>#FU$ %FU& 'FU( 
)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 H 
H H H H  )I I II I 	I
 I I I I I I I I 
I I I I4 !!!! 2  2  2 2  2 	 2
  2  2  2  2  2 E? 2 E? 2 E? 2 E? 2  2 
 2  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>
    NA4portraitmmr   rz   r   formatorientationunittitleauthorsubjectcreatorkeywordsr   c                    |r(t          j        dt          t                                 dD ]<}t	          t                      |         t                    st          d| d          =t          |||          }|	                    |           |
                    |           |                    |	           |                    |           |                    |
           t                                          ||           dS )	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(   localsr[   r)   r
   	set_title
set_authorset_creatorset_subjectset_keywordssuperr7   )r6   rz   r   r  r  r  r  r  r  r  r  argr   	__class__s                r   r7   zTemplate.__init__  s   :  	MV"*,,   
	
 	J 	JC fhhsmS11 J HS H H HIIIJ&kEEEev      """S844444r   c                 x    | j         j        r|                                  | j                                          dS )z5Finish the current page, and proceed to the next one.N)r   pager  r   )r6   s    r   r   zTemplate.add_page  s5    8= 	KKMMMr   outfiledestc                 J   |r(t          j        dt          t                                 | j                            ddd           | j                            dd	           t                                                       |r| j        	                    |           d
S d
S )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#   rq   )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   s      	MT"*,,   
 	+Sr:::$$U1$555 	%HOOG$$$$$	% 	%r   )
NNr  r  r  r   r   r   r   r   )r   N)NN)rW   r  r	  r
  r   r  r  r[   r   r`   r   r7   r   r  __classcell__)r'  s   @r   r  r    sL         .27;%65 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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
   r\   r  r]   r   r[   r   r   r  r   r   r   <module>r8     sr    5
5 



   				  * * * * * * * * * * ( ( ( ( ( (       ! ! ! ! ! !      ;c ;eE5%/0 ; ; ; ;;S ;S ; ; ; ;p
 p
 p
 p
 p
 p
 p
 p
f]% ]% ]% ]% ]%| ]% ]% ]% ]% ]%r   