
    Xwg                        d dl mZ d dlmZmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZmZ erd dlmZ d dlmZ  G d	 d
      Zy)    )annotations)TYPE_CHECKINGIteratorcastN)Image)Canvas)getFilepisaFileObject)BytesIO)pisaContextc                      e Zd Ze	 	 	 	 	 	 	 	 dd       Zed	d       Zedd	 	 	 	 	 	 	 	 	 d
d       Zedd       Ze	 	 	 	 	 	 	 	 dd       Zy)
WaterMarksc                  |j                  d      }t        t        |j                  d            }t        t        |j                  d            }| j                         \  }}|\  }	}
|	}t	        |      |z  }|
}t	        |      |z  }t        ||      }t        ||      }|r||z  }||z  }n
||z  }||z  }|r|\  }}n|rd|
|z
  }}nd\  }}|r|}|r|}||||fS )Nobject_positionheightwidthr   )r   r   )getr   intgetSizefloatminmax)imgcontextpagesizeis_portraitr   	cssheightcsswidthiwihpwphr   wfactorr   hfactor
factor_min
factor_maxxys                      T/var/www/horilla/myenv/lib/python3.12/site-packages/xhtml2pdf/builders/watermarks.pyget_size_locationzWaterMarks.get_size_location   s     3:++>O2P $S'++h*? @	S'++g"67BBu*v+1
1
*_FOE*_FOE"DAqb6kqADAqEF!UF""    c                F   |j                  dd       }|r~| j                         }t        j                  |      }|j	                  d      }|j                  t        d|z               |j                  |d       t        |      j                         S | j                         S )NopacityRGBA   PNG)
r   getNamedFiler   openconvertputalphar   saver	   
getBytesIO)pisafiler   r-   namer   s        r)   get_img_with_opacityzWaterMarks.get_img_with_opacity6   s     Y5'446D$zz$/C++f%CLLS7]+,HHT5!4=++--""$$r+   N)r   c               *   ddl m} |i }t        dd      } |t        j	                  | |            }t        j                  ||||      \  }}}	}
t        |j                         |      }|j                  ||||	|
d       |j                          |S )	z
        Pypdf requires pdf as background so convert image to pdf in temporary file with same page dimensions
        :param pisafile:  Image File
        :param pagesize:  Page size for the new pdf
        r   )PmlImageReaderNzapplication/pdf)r   )r   auto)mask)
xhtml2pdf.xhtml2pdf_reportlabr;   r
   r   r9   r*   r   r1   	drawImager5   )r7   r   r   r   r;   outputr   r'   r(   r   r   canvass               r)   generate_pdf_backgroundz"WaterMarks.generate_pdf_backgroundB   s     	A?G!/#"
 -++Hg>
 )::( ; 
1eV ++-AaE6?r+   c              #  >  K   | j                   r| j                   D cg c]  }|d   	 c}|dz   gz   }|j                  d       t        | j                         D ]:  \  }\  }}}|j                         rt	        |||         |t        |d         f < y y c c}w w)Nr      step)pisaBackgroundListpop	enumeratenotFoundranger   )r   max_numpager'   pagescounterpagebgfile	pgcontexts           r)   get_watermarkzWaterMarks.get_watermarkf   s     %%#*#=#=>aQqT>+PQ/ARREIIaL6?**7 V22$	 (eGn5vs9VCT?UUU	V &>s   BBA
B4)Bc                   t        j                         }t        j                  |      }d}t        j	                  | t        |j                              D ]  \  }}}t        |      D ]w  \  }	}
t        j                  |j                               }|j                  d   }|j                  |
dz
     }|	|z  dk(  r|j                  |       |}|j                  |       d}y  |r|j                  |       ||fS )NFr   rD   T)pypdf	PdfWriter	PdfReaderr   rQ   lenrL   rH   r6   
merge_pageadd_pagewrite)r   istreamr@   	pdfoutputinput1has_bgrL   bgouterrE   indexctrbginputpagebgrN   s                 r)   process_doczWaterMarks.process_docq   s     &+__%6	"'//'":$.$<$<S&%
 	 E7D (. 
s+0??7;M;M;O+P+2==+;)/cAg)>4<1$%%d+!D""4(	 OOF#v~r+   )r   dictr   tuple[int, int]r   boolreturnztuple[int, int, int, int])r7   r
   r   rd   rg   r   )
r7   r
   r   re   r   rf   r   zdict | Nonerg   r
   )r   r   rK   r   rg   r   )r   r   rZ   bytesr@   rh   rg   ztuple[bytes, bool])	__name__
__module____qualname__staticmethodr*   r9   rB   rQ   rc    r+   r)   r   r      s    !#!#&5!#GK!#	"!# !#F 	% 	%   $! !!! 	!
 ! 
! !F V V ',6;	 r+   r   )
__future__r   typingr   r   r   rS   PILr   reportlab.pdfgen.canvasr   xhtml2pdf.filesr	   r
   ior   xhtml2pdf.contextr   r   rm   r+   r)   <module>ru      s/    " 0 0   * 3-v vr+   