o
    Ê53Sð  ã                   @   sz   d dl mZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 G dd„ deƒZG dd	„ d	eƒZd
d„ Zedkr;eƒ  dS dS )é    )Ú
Standard39)Úcolors)Úcm)Údigits)Úascii_uppercasec                   @   sv   e Zd ZdZde Zde Zde ZdZde Z	de Z
de ZeZd	e Zd	e Z	
					ddd„Zdd„ ZdS )ÚBaseLTOLabela!  
    Base class for LTO labels.

    Specification taken from "IBM LTO Ultrium Cartridge Label Specification, Revision 3"
    available on  May 14th 2008 from :
    http://www-1.ibm.com/support/docview.wss?rs=543&context=STCVQ6R&q1=ssg1*&uid=ssg1S7000429&loc=en_US&cs=utf-8&lang=en+en
    gš™™™™™@g333333û?g333333Ã?g      @gQkšwœ¢@gÃõ(\�Âñ?g®Ø_vO¦?é
   Ú NÚ1Fc                 C   sÜ   t || jƒ| _|| _t|ƒdks|tt vrtd| ƒ‚|s$t|ƒdks(| ¡ s.td| ƒ‚d|t	|p4dƒ 
dt|ƒ ¡ dd… |f }t|ƒdkrTtd	|||f ƒ‚|| _tj| || j| j| j| j| j| jd
|d�
 dS )a  
           Initializes an LTO label.

           prefix : Up to six characters from [A-Z][0-9]. Defaults to "".
           number : Label's number or None. Defaults to None.
           subtype : LTO subtype string , e.g. "1" for LTO1. Defaults to "1".
           border : None, or the width of the label's border. Defaults to None.
           checksum : Boolean indicates if checksum char has to be printed. Defaults to False.
           availheight : Available height on the label, or None for automatic. Defaults to None.
        é   zInvalid subtype '%s'é   zInvalid prefix '%s'z%sL%sr   Né   z&Invalid set of parameters (%s, %s, %s)T)ÚratioÚ	barHeightÚbarWidthÚgapÚlquietÚrquietÚquietÚchecksum)ÚmaxÚCODEBARHEIGHTÚheightÚborderÚlenr   Ústring_digitsÚ
ValueErrorÚisalnumÚstrÚzfillÚlabelr   Ú__init__Ú	CODERATIOÚCODEBARWIDTHÚCODEGAPÚ
CODELQUIETÚ
CODERQUIET)ÚselfÚprefixÚnumberÚsubtyper   r   Úavailheightr    © r,   úP/var/www/html/env/lib/python3.10/site-packages/reportlab/graphics/barcode/lto.pyr!      s8   ÿ&ÿÿ
÷zBaseLTOLabel.__init__c                 C   sn   |  ¡  | ||¡ | jr| | j¡ | dd| j| j| j¡ t 	| || j| j
 d | j| j ¡ | ¡  dS )z$Draws the LTO label onto the canvas.r   ç       @N)Ú	saveStateÚ	translater   ÚsetLineWidthÚ	roundRectÚ
LABELWIDTHÚLABELHEIGHTÚ
LABELROUNDr   ÚdrawOnÚCODENOMINALWIDTHr   ÚrestoreState)r'   ÚcanvasÚxÚyr,   r,   r-   r6   E   s   ý
ýzBaseLTOLabel.drawOn)r	   Nr
   NFN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r3   r4   r5   r"   r7   r   r#   r$   r%   r&   r!   r6   r,   r,   r,   r-   r   
   s(    
û)r   c                   @   s@   e Zd ZdZdZde Zde ZdZdZ	dZ
dd	„ Zd
d„ ZdS )ÚVerticalLTOLabelzT
    A class for LTO labels with rectangular blocks around the tape identifier.
    )zHelvetica-Boldé   r   gÍÌÌÌÌÌÜ?çš™™™™™‰?é   )
ÚredÚyellowÚ
lightgreenÚ	lightblueÚgreyÚ	orangeredÚpinkÚ	darkgreenÚorangeÚpurplec                 O   sL   d|v r|d | _ |d= nd| _ | j| j |d< tj| g|¢R i |¤Ž dS )zp
        Initializes the label.

        colored : boolean to determine if blocks have to be colorized.
        ÚcoloredFr+   N)rN   r4   ÚBLOCKHEIGHTr   r!   )r'   ÚargsÚkwargsr,   r,   r-   r!   i   s   
zVerticalLTOLabel.__init__c           
   
   C   s   t  | |||¡ | ¡  | | j¡ | ddd¡ | ||¡ | j| j| j	  d }t
| jƒD ]š}| j\}}| j}|| jd krT| j|d… }	|\}}|d }||f}n| j| }	| ¡  | ||| j	  d¡ | jr…|	 ¡ r…|jtt| jt|	ƒ t ddd¡ƒ ¡ Ž  n| ddd¡ |jdd| j	| jdd� | | j	|j|	g|¢R Ž  d | jd ¡ | d¡ |j|Ž  | ddd¡ | dd|	¡ | ¡  q/| ¡  dS )z5Draws some blocks around the identifier's characters.r   r.   r   NT)Úfillg     €V@)r   r6   r/   r1   Ú	LINEWIDTHÚsetStrokeColorRGBr0   r3   ÚNBBLOCKSÚ
BLOCKWIDTHÚrangeÚ	LABELFONTr    rN   ÚisdigitÚsetFillColorRGBÚgetattrr   ÚCOLORSCHEMEÚintÚColorÚrgbÚrectrO   ÚstringWidthÚrotateÚsetFontÚdrawCentredStringr8   )
r'   r9   r:   r;   ÚxblocksÚiÚfontÚsizeÚnewfontÚpartr,   r,   r-   r6   w   sN   ý


þþÿ


zVerticalLTOLabel.drawOnN)r<   r=   r>   r?   rX   r   rV   rO   rS   rU   r\   r!   r6   r,   r,   r,   r-   r@   U   s    r@   c                  C   s|  ddl m}  ddlm} | d|jd�}| dd¡ |j\}}| |d |d	t  d
¡ dt  }}dt  }}dt }	dt }
d}td|dƒ 	|||¡ ||
7 }|d7 }td|ddd� 	|||¡ ||
7 }|d7 }t
d|dƒ 	|||¡ ||
7 }|d7 }t
d|ddd� 	|||¡ ||
7 }|d7 }t
d|ddd� 	|||¡ ||
7 }|d7 }t
d|dddd� 	|||¡ | ¡  | ¡  dS )z
Test this.r   )ÚCanvas)Ú	pagesizesz
labels.pdf)ÚpagesizeÚ	Helveticaé   r.   é   zSample LTO labelsé   r   g333333@iÒ  ÚRLÚ3r   rB   )r   T)rN   )r   rN   N)Úreportlab.pdfgen.canvasrk   Úreportlab.librl   ÚA4rc   rd   r   r   r6   r@   ÚshowPageÚsave)rk   rl   r9   Úwidthr   ÚxposÚxorigÚyposÚyorigÚcolwidthÚ
lineheightÚcountr,   r,   r-   Útestž   sR   
ÿÿÿÿr�   Ú__main__N)Ú!reportlab.graphics.barcode.code39r   ru   r   Úreportlab.lib.unitsr   Ústringr   r   Úreportlab.lib.utilsr   r   r@   r�   r<   r,   r,   r,   r-   Ú<module>   s   KI%
ÿ