
    Csi.                        d dl 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
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mZ g dZ G d de j2                        ZdZ	  ed       G d de             Z G d de      Zy)    N)	dataclass)ListOptionalTuple)ConfigurationError)contentgenericlayout)pdf_name
pdf_string)BasePdfFileWriterinit_xobject_dictionary   )CoordinateSystem)	TextStampTextStampStyle)DEFAULT_QR_SCALE
QRPositionQRStampQRStampStylec                      e Zd ZdZ ej
                  ej                  j                  ej                  j                        Z	 ej
                  ej                  j                  ej                  j                        Z ej
                  ej                  j                  ej                  j                        Z ej
                  ej                  j                  ej                  j                        Zed        Zedd       Zy)r   z[
    QR positioning constants, with the corresponding default content layout
    rule.
    )x_aligny_align)r   r   c                 F    | t         j                  t         j                  fv S N)r   LEFT_OF_TEXTRIGHT_OF_TEXT)selfs    \/var/www/python-projects/worksol/worksolenv/lib/python3.12/site-packages/pyhanko/stamp/qr.pyhorizontal_flowzQRPosition.horizontal_flow'   s    
//1I1IJJJ    c                     	 t         j                  t         j                  t         j                  t         j                  d|j                            S # t        $ r t        d| d      w xY w)a  
        Convert from a configuration string.

        :param config_str:
            A string: 'left', 'right', 'top', 'bottom'
        :return:
            An :class:`.QRPosition` value.
        :raise ConfigurationError: on unexpected string inputs.
        leftrighttopbottom'zW' is not a valid QR position setting; valid values are 'left', 'right', 'top', 'bottom')r   r   r   
ABOVE_TEXT
BELOW_TEXTlowerKeyErrorr   )cls
config_strs     r   from_configzQRPosition.from_config+   sw    	"//#11!,,$//	
  " "  	$J<  > ? 	s   AA A+N)returnr   )__name__
__module____qualname____doc__r
   SimpleBoxLayoutRuleAxisAlignment	ALIGN_MIN	ALIGN_MIDr   	ALIGN_MAXr   r)   r*   propertyr    classmethodr/    r!   r   r   r      s    
 .6--$$..$$..L /F..$$..$$..M ,++$$..$$..J ,++$$..$$..J
 K K  r!   r   g?T)frozenc                        e Zd ZU dZdZeed<   	 dZeed<   	 dZ	e
e   ed<   	 ej                  Zeed<   	 dZe
ej                      ed	<   	 e fd
       Zdedej*                  deddfdZ xZS )r   z
    Style for text-based stamps together with a QR code.

    This is exactly the same as a text stamp, except that the text box
    is rendered with a QR code to the left of it.
       innsepz@Digital version available at
this url: %(url)s
Timestamp: %(ts)s
stamp_textNqr_inner_sizeqr_positionqr_inner_contentc                 ~    t         |   |       	 |d   }t        j                  |      |d<   y # t        $ r Y y w xY w)NrC   )superprocess_entriesr   r/   r,   )r-   config_dictqr_pos	__class__s      r   rG   zQRStampStyle.process_entriesx   sF    ,	 /F)3)?)?)GK& 		s   0 	<<writerboxtext_paramsr0   r   c                     	 |j                  d      }t	        || |||      S # t        $ r t        j                  d      w xY w)Nurlz7Using a QR stamp style requires a 'url' text parameter.)stylerO   rM   rL   )popr,   r
   LayoutErrorr   )r   rK   rL   rM   rO   s        r   create_stampzQRStampStyle.create_stamp   sV    	//%(C
 $C[c
 	
	  	$$I 	s	   # A)r1   r2   r3   r4   r@   int__annotations__rA   strrB   r   r   r   rC   rD   r   
PdfContentr;   rG   r   r
   BoxConstraintsdictrS   __classcell__rJ   s   @r   r   r   M   s     FCO
 	M   $(M8C=' )55K5 6:hw1129  
!
 ""
 	

 

r!   r   c            
            e Zd Z	 	 ddedededeej                     f fdZ	d Z
deee   eeef   f   f fdZd	 Z fd
Zej&                  ddef fdZ xZS )r   rK   rO   rP   rL   c                 H    t         |   ||||       || _        d | _        y )N)rM   rL   )rF   __init__rO   _qr_size)r   rK   rO   rP   rM   rL   rJ   s         r   r^   zQRStamp.__init__   s)     	KSIr!   c                 v    | j                   }|j                  |j                  S |j                  j                  S r   )rP   inner_content_layoutrC   value)r   rP   s     r   _inner_content_layout_rulez"QRStamp._inner_content_layout_rule   s7    

%%1---   &&&r!   r0   c                 
   t         |          \  }\  }}| j                         \  }}| j                  t        j
                  j                  t        d      |       | j                  }| j                  }|j                  }|j                  |j                  }	ng|j                  rI|j                  r=t        t        |j                   |      t        |j"                  |            }
|
d|z  z
  }	nt%        t&        |z        }	|	|z  }|	d|z  z   }|j(                  j*                  r||z   }t        ||      }nt        ||      }||z   }|j(                  j,                  }t/        j0                  |j2                  |j4                  t.        j6                  j9                  |      t.        j:                  j<                        }t/        j>                  ||      }|jA                  ||	|	      }d|jB                  |z  |jD                  |z  |jF                  |jH                  fz  }|j(                  tJ        jL                  k(  rt/        j6                  |ddd      }n|j(                  tJ        jN                  k(  rt/        j6                  |ddd      }nP|j(                  tJ        jP                  k(  rt/        j6                  |ddd	      }nt/        j6                  |ddd
      }t/        j0                  |j2                  jR                  |j4                  jR                  |t.        j:                  j<                        }|jA                  |||      }|d|jU                         g}|jW                  |       |jY                  d       |||ffS )Nz/QR)categorynamerb      )r   r   marginsinner_content_scalings   q %g 0 0 %g %g %g cm /QR Do Qr   r#   )r%   r$   r&   r'   )r'   r%   r$   r&   )r&   r%   r$   r'      q   Q)-rF   _inner_layout_natural_size_qr_xobjectset_resourcer   ResourceTypeXOBJECTr   rP   rL   r@   rB   width_definedheight_definedminmaxheightwidthroundr   rC   r    rb   r
   r5   r   r   MarginsuniformInnerScaling
NO_SCALINGrX   fitx_scaley_scalex_posy_posr   r   r   r*   flippedas_cmextendappend)r   text_commands
text_widthtext_heightqr_refnatural_qr_sizerP   	stamp_boxr@   qr_sizemin_dimqr_innunits_scale	qr_padded	inn_width
inn_heightdefault_layoutqr_layout_rule	inner_box
qr_inn_posdraw_qr_command
tb_marginstb_layout_ruletext_inn_poscommandsrJ   s                           r   rl   z"QRStamp._inner_layout_natural_size   sC    G.0	
 #'"2"2"4))11% 	 	
 

HH	 *))G$$)A)A I$$k2IOOZ0G F
*G,>?G#o5a&j(	 ,,!J.IY4JIz2I"[0J5:5F5F5L5L  33"**"**NN**62 #)"5"5"@"@
 )))Z@	#''	7GD
 ;!22!22	>
 
 
 7 77aQqJ *":"::aQqJ *"7"77 qJ  QQqJ  33 #**22"**22"("5"5"@"@
 &)))ZM#T<+=+=+?@&)Z000r!   c                    dd l }ddlm}m} | j                  j
                  d u}|r|j                  j                  n|j                  j                  }|j                  |      }|j                  | j                         |j                          |r3|j                  ||j                  | j                  j
                        }n|j                  |      }|j                         }|j                   d|j"                  z  z   |j$                  z  }	t'        ||	|	      }
|
j)                          | j*                  j-                  |
      |	fS )Nr   )PdfFancyQRImagePdfStreamQRImage)error_correction)image_factoryversioncenter_image)r   rg   )qrcodepyhanko.pdf_utils.qrr   r   rP   rD   	constantsERROR_CORRECT_HERROR_CORRECT_MQRCodeadd_datarO   make
make_imager   render_command_streammodules_countborderbox_sizer   compressrK   
add_object)r   r   r   r   is_fancyerr_corrqrimgcommand_stream	bbox_sizeqr_xobjs              r   rm   zQRStamp._qr_xobject  s   J::..d:  ,,!!11 	
 ]]H]5
DHH
	---

!ZZ88   C --.>-?C224%%BII5D	).)YO{{%%g.	99r!   c                 B    t         |          }| j                  |d<   |S )NrO   )rF   get_default_text_paramsrO   )r   tprJ   s     r   r   zQRStamp.get_default_text_params7  s"    W,.HH5		r!   coordsr   c                T   t         |   ||||      \  }\  }}||||z   ||z   f}t        j                  t	        d      t	        d      t	        d      t	        d      t	        d      t        j
                  t        t        t        j                  |                  t	        d      t        j                  t	        d      t	        d	      t	        d	      t        | j                        i      i      }	| j                  }
|
J |
j                  ||
j                  |	             |||ffS )
Nr   z/Typez/Annotz/Subtypez/Linkz/Rectz/Az/Sz/URI)rF   applyr	   DictionaryObjectr   ArrayObjectlistmapFloatObjectr   rO   rK   register_annotationr   )r   	dest_pagexyr   page_refwh	link_rect
link_annotwrrJ   s              r   r   zQRStamp.apply<  s    !7=Aq=H&1a1q5!a%(	--!8H#5$hw&7!7#6#6W00)<=$  8 8 (8 (*TXX*>!

 [[~~
xz)BC!Qr!   )NN)r1   r2   r3   r   rV   r   r   r
   rX   r^   rc   r   r   bytesrT   rl   rm   r   r   PAGE_DEFAULTr   rZ   r[   s   @r   r   r      s     /3
!
 
 	
 f++,
'o1E$u+uS#X2N,O o1b:: $4#@#@  !   r!   r   )enumdataclassesr   typingr   r   r   pyhanko.config.errorsr   pyhanko.pdf_utilsr   r	   r
   pyhanko.pdf_utils.genericr   r   pyhanko.pdf_utils.writerr   r   appearancesr   textr   r   __all__Enumr   r   r   r   r<   r!   r   <module>r      s{     ! ( ( 4 6 6 : O ) +
G1 1h   $C
> C
 C
LD i D r!   