U
    ?e                     @   sB   d dl Z d dlmZ d dlmZ d dlmZmZ G dd dZdS )    N)Image)Canvas)pisaFileObjectgetFilec                   @   sL   e Zd Zedd Zedd Zei fddZedd Zed	d
 ZdS )
WaterMarksc                 C   s   | dd }| dd }| dd }|  \}}|\}	}
|	}t|| }|
}t|| }t||}t||}|r|| }|| }n|| }|| }|r|\}}n|rd|
|  }}nd\}}|r|}|r|}||||fS )Nobject_positionheightwidthr   )r   r   )getZgetSizefloatminmax)imgcontextpagesizeis_portraitr   Z	cssheightZcsswidthiwZihpwphr	   Zwfactorr   ZhfactorZ
factor_minZ
factor_maxxy r   A/tmp/pip-unpacked-wheel-35p66c5k/xhtml2pdf/builders/watermarks.pyget_size_location	   s4    



zWaterMarks.get_size_locationc                 C   s^   | dd }|rV|  }t|}|d}|td|  ||d t|	 S | 	 S )NopacityZRGBA   ZPNG)
r
   getNamedFiler   openconvertZputalphaintsaver   
getBytesIO)pisafiler   r   namer   r   r   r   get_img_with_opacity-   s    

zWaterMarks.get_img_with_opacityc                 C   sp   ddl m} tdd}|t| |}t||||\}}}	}
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
        :return: pisaFileObject as tempfile
        r   )PmlImageReaderNzapplication/pdf)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_background9   s    	

z"WaterMarks.generate_pdf_backgroundc                 c   sv   | j rrttdd | j |d g }|d d}| j D ]8\}}}| sht||| |t|d fV  |d7 }q8d S )Nc                 S   s   | d S )Nr   r   )r   r   r   r   <lambda>g       z*WaterMarks.get_watermark.<locals>.<lambda>   r   step)ZpisaBackgroundListlistmappopZnotFoundranger   )r   Zmax_numpagepagescounterpageZbgfileZ	pgcontextr   r   r   get_watermarkd   s    
zWaterMarks.get_watermarkc                 C   s   t  }t |}d}t| t|jD ]j\}}}t|D ]V\}	}
t | }|jd }|j|
d  }|	| dkr|	| |}|
| d}q:q(|r|| ||fS )NFr   r,   T)pypdfZ	PdfWriterZ	PdfReaderr   r5   lenr2   	enumerater!   Z
merge_pageZadd_pagewrite)r   Zistreamr(   Z	pdfoutputZinput1Zhas_bgr2   Zbgouterr-   indexZctrZbginputZpagebgr4   r   r   r   process_doco   s     




zWaterMarks.process_docN)	__name__
__module____qualname__staticmethodr   r$   r)   r5   r;   r   r   r   r   r      s   
#
*

r   )	r6   ZPILr   Zreportlab.pdfgen.canvasr   Zxhtml2pdf.filesr   r   r   r   r   r   r   <module>   s   