
    [gQ'                         d dl mZmZmZ ddlmZmZmZmZ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  G d d	          Zd
S )    )OptionalTupleUnion   )BooleanObjectFloatObject
NameObjectNumberObjectTextStringObject)ArrayObjectDictionaryObject)DEFAULT_FITFit)RectangleObject)
hex_to_rgbc                   @   e Zd ZdZddlmZmZ e	 	 d%dee	e
eeeef         f         deded	ed
ef
d            Ze	 	 	 	 	 	 	 d&dedee	e
eeeef         f         dededededededed
efd            Ze	 	 d'de
eef         de
eef         dee	e
eeeef         f         deded
efd            Ze	 d(dee	e
eeeef         f         dee         d
efd            Zedddefdee	e
eeeef         f         d ee         d!ee         d"ee         d#ed
efd$            ZdS ))AnnotationBuildera>  
    The AnnotationBuilder creates dictionaries representing PDF annotations.

    Those dictionaries can be modified before they are added to a PdfWriter
    instance via `writer.add_annotation`.

    See `adding PDF annotations <../user/adding-pdf-annotations.html>`_ for
    it's usage combined with PdfWriter.
       )FitTypeZoomArgTypeFr   recttextopenflagsreturnc                 t   t          t          d          t          d          t          d          t          d          t          d          t          |           t          d          t          |          t          d          t	          |          t          d          t          |          i          }|S )	z
        Add text annotation.

        :param Tuple[int, int, int, int] rect:
            or array of four integers specifying the clickable rectangular area
            ``[xLL, yLL, xUR, yUR]``
        :param bool open:
        :param int flags:
        /Type/Annot/Subtypez/Text/Rect	/Contentsz/Openz/Flags)r   r	   r   r   r   r
   )r   r   r   r   text_objs        V/var/www/pdf_extract/myenv/lib/python3.11/site-packages/PyPDF2/generic/_annotations.pyr   zAnnotationBuilder.text   s    " $7##Z%9%9:&&
7(;(;7##_T%:%:;'')9$)?)?7##]4%8%88$$l5&9&9	
 	
     	Helvetica14pt000000fffffffontbolditalic	font_size
font_colorborder_colorbackground_colorc	                    d}	|du r|	dz   }	|du r|	dz   }	|	|z   dz   |z   }	|	dz   |z   }	d}
t          |          D ]}|
t          |          z   dz   }
|
dz   }
t                      }|                    t	          d	          t	          d
          t	          d          t	          d          t	          d          t          |          t	          d          t          |           t	          d          t          |	          t	          d          t          |
          t	          d          t          d t          |          D                       i           |S )a  
        Add text in a rectangle to a page.

        :param str text: Text to be added
        :param RectangleObject rect: or array of four integers
            specifying the clickable rectangular area ``[xLL, yLL, xUR, yUR]``
        :param str font: Name of the Font, e.g. 'Helvetica'
        :param bool bold: Print the text in bold
        :param bool italic: Print the text in italic
        :param str font_size: How big the text will be, e.g. '14pt'
        :param str font_color: Hex-string for the color
        :param str border_color: Hex-string for the border color
        :param str background_color: Hex-string for the background of the annotation
        zfont: Tzbold zitalic  z;text-align:left;color:# rgr   r   r   z	/FreeTextr    r!   z/DSz/DAz/Cc                 ,    g | ]}t          |          S  r   .0ns     r#   
<listcomp>z/AnnotationBuilder.free_text.<locals>.<listcomp>n   s    JJJ[^^JJJr$   )r   strr   updater	   r   r   r   )r   r   r)   r*   r+   r,   r-   r.   r/   font_strbg_color_strst	free_texts                r#   r@   zAnnotationBuilder.free_text:   sq   4 4<<')HT>>)+Hd?S(9488:E\** 	8 	8B'#b''1C7LL#d*$&&	7##Z%9%9:&&
;(?(?7##_T%:%:;'')9$)?)?5!!#3H#=#=5!!#3L#A#A4  +JJZ8H-I-IJJJ# #	
 	
 	
  r$   r2   p1p2	title_barc                    t          t          d          t          d          t          d          t          d          t          d          t          |          t          d          t          |          t          d          t	          t          | d                   t          | d	                   t          |d                   t          |d	                   g          t          d
          t	          t          d          t          d          g          t          d          t	          t          d          t          d          t          d          g          t          d          t          |          i          }|S )a  
        Draw a line on the PDF.

        :param Tuple[float, float] p1: First point
        :param Tuple[float, float] p2: Second point
        :param RectangleObject rect: or array of four
                integers specifying the clickable rectangular area
                ``[xLL, yLL, xUR, yUR]``
        :param str text: Text to be displayed as the line annotation
        :param str title_bar: Text to be displayed in the title bar of the
            annotation; by convention this is the name of the author
        r   r   r   z/Liner    z/Tz/Lr   r   z/LEN/ICg      ?r!   )r   r	   r   r   r   r   )rA   rB   r   r   rC   line_objs         r#   linezAnnotationBuilder.linet   sW   ( $7##Z%9%9:&&
7(;(;7##_T%:%:4  "29"="=4  +#BqE**#BqE**#BqE**#BqE**	# # 5!!;"4(("4(($ $ 5!!;#C((#C((#C(($ $ ;'')9$)?)?5
 
< r$   Ninteriour_colorc           
      <   t          t          d          t          d          t          d          t          d          t          d          t          |           i          }|r6t          d t	          |          D                       |t          d          <   |S )z
        Draw a rectangle on the PDF.

        :param RectangleObject rect: or array of four
                integers specifying the clickable rectangular area
                ``[xLL, yLL, xUR, yUR]``
        r   r   r   z/Squarer    c                 ,    g | ]}t          |          S r5   r6   r7   s     r#   r:   z/AnnotationBuilder.rectangle.<locals>.<listcomp>   s    EEEAQEEEr$   rE   )r   r	   r   r   r   )r   rH   
square_objs      r#   	rectanglezAnnotationBuilder.rectangle   s     &7##Z%9%9:&&
9(=(=7##_T%:%:
 

  	,7EEO)D)DEEE- -Jz%(() r$   borderurltarget_page_indexfitc                    ddl m} |du}|du}|s|st          d          |r|rt          d| d|           |\d |dd         D             }t          |          d	k    r4t	          d
 |d         D                       }	|                    |	           nt          d          gdz  }t          t          d          t          d          t          d          t          d          t          d          t          |           t          d          t	          |          i          }
|rst          t          d          t          d          t          d          t          d          t          d          t          |          i          |
t          d          <   |rIt          t          |          t          |j                  |j        d          }||
t          d          <   |
S )a  
        Add a link to the document.

        The link can either be an external link or an internal link.

        An external link requires the URL parameter.
        An internal link requires the target_page_index, fit, and fit args.


        :param RectangleObject rect: or array of four
            integers specifying the clickable rectangular area
            ``[xLL, yLL, xUR, yUR]``
        :param border: if provided, an array describing border-drawing
            properties. See the PDF spec for details. No border will be
            drawn if this argument is omitted.
            - horizontal corner radius,
            - vertical corner radius, and
            - border width
            - Optionally: Dash
        :param str url: Link to a website (if you want to make an external link)
        :param int target_page_index: index of the page to which the link should go
                                (if you want to make an internal link)
        :param Fit fit: Page fit or 'zoom' option.
        r   )BorderArrayTypeNzHEither 'url' or 'target_page_index' have to be provided. Both were None.z=Either 'url' or 'target_page_index' have to be provided. url=z, target_page_index=c                 ,    g | ]}t          |          S r5   r	   r7   s     r#   r:   z*AnnotationBuilder.link.<locals>.<listcomp>   s    <<<A*Q--<<<r$         c                 ,    g | ]}t          |          S r5   rT   r7   s     r#   r:   z*AnnotationBuilder.link.<locals>.<listcomp>   s    +M+M+MaJqMM+M+M+Mr$   r   r   r   r   z/Linkr    z/Borderz/Sz/URIz/Actionz/A)rO   rP   fit_argsz/Dest)typesrR   
ValueErrorlenr   appendr
   r   r	   r   r   fit_typerX   )r   rM   rN   rO   rP   rR   is_externalis_internal
border_arrdash_patternlink_objdest_deferreds               r#   linkzAnnotationBuilder.link   s/   @ 	,+++++o't3 	; 	Z    	; 	|PS||iz||  
 <<<<<J6{{a*+M+M6!9+M+M+MNN!!,///&q//*Q.J#7##Z%9%9:&&
7(;(;7##_T%:%:9%%{:'>'>	
 
  	)9t$$j&8&8w''I)>)>v&&(8(=(=* *HZ%%&  		:,)56G)H)H%cl33 #  M -:HZ(()r$   )Fr   )r%   FFr&   r'   r'   r(   )r2   r2   )N)__name__
__module____qualname____doc__rY   r   r   staticmethodr   r   r   floatr;   boolintr   r   r@   rG   r   rL   r   r   r   rd   r5   r$   r#   r   r      s         -,,,,,,, 	 OU5%+E%FFG  	
 
   \8   "$ (7 77OU5%+E%FFG7 7 	7
 7 7 7 7 7 
7 7 7 \7r 
 1 1%,1%,1 OU5%+E%FFG1 	1
 1 
1 1 1 \1f  *. OU5%+E%FFG!# 
   \4  )-!+/O OOU5%+E%FFGO%O c]O $C=	O
 O 
O O O \O O Or$   r   N)typingr   r   r   _baser   r   r	   r
   r   _data_structuresr   r   _fitr   r   
_rectangler   _utilsr   r   r5   r$   r#   <module>rs      s    ) ) ) ) ) ) ) ) ) )              < ; ; ; ; ; ; ; " " " " " " " " ' ' ' ' ' '      C C C C C C C C C Cr$   