
    ?i                         d Z ddlZddlmZ ddlZddlmZmZ dZdZ	dZ
ded	ed
ej                  fdZdej                  deded
dfdZded
ej                  fdZdededed
efdZy)u   
qr_merge.py — Core library for inserting QR codes into a CarrierQR blank PDF.

Shared by the CLI (add_qr_codes.py) and the HTTP service (service.py).
    N)Image)	PdfReader	PdfWriter)(      i  y  )i	  r   i  r      urlsize_pxreturnc                 0   t        j                  t         j                  j                  dd      }|j	                  |        |j                  d       |j                  dd      j                  d	      }|j                  ||ft        j                        S )
u8   Return a square QR code PIL Image at size_px × size_px.
      )error_correctionbox_sizeborderT)fitblackwhite)
fill_color
back_colorRGB)qrcodeQRCode	constantsERROR_CORRECT_Madd_datamake
make_imageconvertresizer   LANCZOS)r
   r   qrimgs       /var/www/html/qr/qr_merge.pygenerate_qr_imager&      sx    	))99
B
 KKGGG
--7w-
?
G
G
NC::w(%--88    baserectc                     |\  }}}}||z
  dt         z  z
  }||z
  dt         z  z
  }t        ||      }	t        ||	      }
|t         z   ||	z
  dz  z   }|t         z   ||	z
  dz  z   }| j                  |
||f       y)z5Paste a centred QR code into rect on base (in-place).   N)
PADDING_PXminr&   paste)r(   r
   r)   x1y1x2y2avail_wavail_hqr_sizeqr_imgpaste_xpaste_ys                r%   _composite_qrr9   #   s    NBB2gJ&G2gJ&G'7#GW-F:o7!2q 88G:o7!2q 88GJJv)*r'   	pdf_bytesc                 \   t        t        j                  |             }|j                  d   }|d   d   j	                         D ]\  \  }}|j                  d      dk(  st        j                  t        j                  |j                              j                  d      c S  t        d      )zAExtract the embedded JPEG from PDF bytes and return as PIL Image.r   z
/Resourcesz/XObjectz/Subtypez/Imager   zNo image XObject found in PDF)r   ioBytesIOpagesitemsgetr   open_datar    
ValueError)r:   readerpagenamexobjs        r%   extract_base_imagerH   /   s    rzz),-F<<?D<(4::< E
d88J8+::bjj45==eDDE 4
55r'   blank_pdf_bytessubmittal_urlproduction_urlc                    t        |       }t        ||t               t        ||t               t	        t        j                  |             }|j                  d   j                  }t        j                         }|j                  |dd       |j                  d       t        j                         }t        j                  |      j                  |dd       |j                  d       t	        |      }t               }	|	j                  |j                  d          t        j                         }
|	j                  |
       |
j!                         S )z
    Main entry point. Given the blank carrier PDF bytes and two URLs,
    return the completed carrier PDF bytes with QR codes inserted.
    r   JPEG_   )formatqualityPDFH   )rO   
resolution)rH   r9   	LEFT_RECT
RIGHT_RECTr   r<   r=   r>   mediaboxsaveseekr   rA   r   add_pagewritegetvalue)rI   rJ   rK   r(   rD   	media_boximg_bufpdf_buf
tmp_readerwriterouts              r%   build_carrier_pdfrb   9   s     o.D$y1$
3 rzz/23FQ((I jjlGIIgfbI1LLOjjlG	JJwWUrBLLO7#J[F
OOJ$$Q'(
**,C
LL<<>r'   )__doc__r<   PILr   r   pypdfr   r   rT   rU   r,   strintr&   tupler9   bytesrH   rb    r'   r%   <module>rk      s    
   &
 %	$
 

93 
9 
9 
9	+ 	+# 	+U 	+t 	+6% 6EKK 6      	 r'   