U
    =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rld 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                   @  s   e Zd ZedddddddZeddd	d
ddZeddddddddddZeddddddZedddddddZdS )
WaterMarksdictztuple[int, int]boolztuple[int, int, int, int])contextpagesizeis_portraitreturnc                C  s   | d}tt| d}tt| d}|  \}}|\}	}
|	}t|| }|
}t|| }t||}t||}|r|| }|| }n|| }|| }|r|\}}n|rd|
|  }}nd\}}|r|}|r|}||||fS )Nobject_positionheightwidthr   )r   r   )getr   intZgetSizefloatminmax)imgr   r   r   r   Z	cssheightZcsswidthiwZihpwphr   Zwfactorr   ZhfactorZ
factor_minZ
factor_maxxy r!   A/tmp/pip-unpacked-wheel-d1lgvatt/xhtml2pdf/builders/watermarks.pyget_size_location   s4    




zWaterMarks.get_size_locationr	   r
   )pisafiler   r   c                 C  s^   | dd }|rV|  }t|}|d}|td|  ||d t|	 S | 	 S )NopacityZRGBA   ZPNG)
r   getNamedFiler   openconvertZputalphar   saver   
getBytesIO)r$   r   r%   namer   r!   r!   r"   get_img_with_opacity6   s    

zWaterMarks.get_img_with_opacityN)r   zdict | None)r$   r   r   r   r   c                C  s~   ddl m} |dk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)
Zxhtml2pdf.xhtml2pdf_reportlabr.   r	   r   r-   r#   r   r'   Z	drawImager*   )r$   r   r   r   r.   outputr   r   r    r   r   Zcanvasr!   r!   r"   generate_pdf_backgroundB   s(     
   z"WaterMarks.generate_pdf_backgroundr   r   r   )r   max_numpager   c                 c  sn   | j rjdd | j D |d g }|d t| j D ]4\}\}}}| s4t||| |t|d fV  q4d 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)ZpisaBackgroundListpop	enumerateZnotFoundranger   )r   r3   pagescounterpageZbgfileZ	pgcontextr!   r!   r"   get_watermarkf   s    
zWaterMarks.get_watermarkbytesztuple[bytes, bool])r   istreamr1   r   c                 C  s   t  }t |}d}t| t|jD ]j\}}}t | }	|	jd }
t|D ]>\}}|j|d  }|| dkr|j	|
dd |
| d}qRq(|r|| ||fS )NFr   r6   )ZoverT)pypdfZ	PdfWriterZ	PdfReaderr   r>   lenr;   r+   r9   Z
merge_pageZadd_pagewrite)r   r@   r1   Z	pdfoutputZinput1Zhas_bgr;   Zbgouterr7   ZbginputZpagebgindexZctrr=   r!   r!   r"   process_docq   s$    
 


zWaterMarks.process_doc)	__name__
__module____qualname__staticmethodr#   r-   r2   r>   rE   r!   r!   r!   r"   r      s   ##
r   )
__future__r   typingr   r   r   rA   ZPILr   Zreportlab.pdfgen.canvasr   Zxhtml2pdf.filesr   r	   ior
   Zxhtml2pdf.contextr   r   r!   r!   r!   r"   <module>   s   