o
    Fzc                     @   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||}|rA|| }|| }n|| }|| }|rP|\}}n|rZd|
| }}nd\}}|rb|}|rf|}||||fS )Nobject_positionheightwidthr   )r   r   )getZgetSizefloatminmax)imgcontextpagesizeis_portraitr   Z	cssheightZcsswidthiwZihZpwphr	   Zwfactorr   ZhfactorZ
factor_minZ
factor_maxxy r   !/xhtml2pdf/builders/watermarks.pyget_size_location	   s4   



zWaterMarks.get_size_locationc                 C   s^   | dd }|r+|  }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   sr   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   s|    | j r:ttdd | j |d g }|d d}| j D ]\}}}| s5t||| |t|d fV  |d7 }qd S d S )Nc                 S   s   | d S )Nr   r   )r   r   r   r   <lambda>g   s    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 ]5\}}}t|D ]+\}	}
t | }|jd }|j|
d  }|	| dkrA|	| |}|
| d}qq|rQ|| ||fS )NFr   r*   T)pypdfZ	PdfWriterZ	PdfReaderr   r3   lenr0   	enumerater    Z
merge_pageZadd_pagewrite)r   Zistreamr'   Z	pdfoutputZinput1Zhas_bgr0   Zbgouterr+   indexZctrZbginputZpagebgr2   r   r   r   process_doco   s"   



	
zWaterMarks.process_docN)	__name__
__module____qualname__staticmethodr   r#   r(   r3   r9   r   r   r   r   r      s    
#
*

r   )	r4   ZPILr   Zreportlab.pdfgen.canvasr   Zxhtml2pdf.filesr   r   r   r   r   r   r   <module>   s
    