o
    6׾g                     @  s~   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r6d dlmZ d dlmZ G d	d
 d
ZdS )    )annotations)TYPE_CHECKINGIteratorcastN)Image)Canvas)getFilepisaFileObject)BytesIO)pisaContextc                   @  sX   e Zd Zed!d	d
Zed"ddZeddd#ddZed$ddZed%dd ZdS )&
WaterMarkscontextdictpagesizetuple[int, int]is_portraitboolreturntuple[int, int, int, int]c                C  s   | d}tt| d}tt| d}|  \}}|\}	}
|	}t|| }|
}t|| }t||}t||}|rD|| }|| }n|| }|| }|rS|\}}n|r]d|
| }}nd\}}|re|}|ri|}||||fS )Nobject_positionheightwidthr   )r   r   )getr   intgetSizefloatminmax)imgr   r   r   r   	cssheightcsswidthiwihpwphr   wfactorr   hfactor
factor_min
factor_maxxy r+   g/var/www/html/backend_erp/backend_erp_env/lib/python3.10/site-packages/xhtml2pdf/builders/watermarks.pyget_size_location   s4   




zWaterMarks.get_size_locationpisafiler	   r
   c                 C  s^   | dd }|r+|  }t|}|d}|td|  ||d t|	 S | 	 S )NopacityRGBA   PNG)
r   getNamedFiler   openconvertputalphar   saver   
getBytesIO)r.   r   r/   namer   r+   r+   r,   get_img_with_opacity6   s   

zWaterMarks.get_img_with_opacityN)r   dict | Nonec                C  s~   ddl m} |du ri }tdd}|t| |}tj||||d\}}}	}
t| |d}|j||||	|
dd |	  |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   r:   r-   r   r3   	drawImager7   )r.   r   r   r   r<   outputr   r)   r*   r   r   canvasr+   r+   r,   generate_pdf_backgroundB   s    
z"WaterMarks.generate_pdf_backgroundr   max_numpager   r   c                 c  st    | j r6dd | j D |d g }|d t| j D ]\}\}}}| s5t||| |t|d fV  qd S d S )Nc                 S  s   g | ]}|d  qS )r   r+   ).0r)   r+   r+   r,   
<listcomp>i   s    z,WaterMarks.get_watermark.<locals>.<listcomp>   r   step)pisaBackgroundListpop	enumeratenotFoundranger   )r   rD   pagescounterpagebgfile	pgcontextr+   r+   r,   get_watermarkf   s   
zWaterMarks.get_watermarkistreambytesrA   tuple[bytes, bool]c                 C  s   t  }t |}d}t| t|jD ]5\}}}t|D ]+\}	}
t | }|jd }|j|
d  }|	| dkrA|	| |}|
| d}qq|rQ|| ||fS )NFr   rG   T)pypdf	PdfWriter	PdfReaderr   rS   lenrN   rK   r8   
merge_pageadd_pagewrite)r   rT   rA   	pdfoutputinput1has_bgrN   bgouterrH   indexctrbginputpagebgrP   r+   r+   r,   process_docq   s&   




	
zWaterMarks.process_doc)r   r   r   r   r   r   r   r   )r.   r	   r   r   r   r
   )
r.   r	   r   r   r   r   r   r;   r   r	   )r   r   rD   r   r   r   )r   r   rT   rU   rA   rU   r   rV   )	__name__
__module____qualname__staticmethodr-   r:   rC   rS   rf   r+   r+   r+   r,   r      s    ##
r   )
__future__r   typingr   r   r   rW   PILr   reportlab.pdfgen.canvasr   xhtml2pdf.filesr   r	   ior
   xhtml2pdf.contextr   r   r+   r+   r+   r,   <module>   s    