U
    [e                     @   sn   d dl mZ d dlmZ d dlmZ d dlmZmZ	 G dd deZ
G dd de
Zd	d
 Zedkrje  dS )    )
Standard39)colors)cm)ascii_uppercasedigitsc                   @   sj   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      @gQkw@g(\?g_vO?
    N1Fc                 C   s   t || j| _|| _t|dks,|tt kr8td| |sHt|dksP| s\td| d|t	|phd
dt|  dd |f }t|dkrt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)ratioZ	barHeightZbarWidthgapZlquietZ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(   `/var/www/html/services/stratfitenv/lib/python3.8/site-packages/reportlab/graphics/barcode/lto.pyr      s:    
&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   setLineWidthZ	roundRect
LABELWIDTHLABELHEIGHT
LABELROUNDr   drawOnCODENOMINALWIDTHr   restoreState)r#   canvasxyr(   r(   r)   r1   D   s    
zBaseLTOLabel.drawOn)r	   Nr
   NFN)__name__
__module____qualname____doc__r   r.   r/   r0   r   r2   r   r   r    r!   r"   r   r1   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yellowZ
lightgreenZ	lightblueZgreyZ	orangeredZpinkZ	darkgreenZorangepurplec                 O   sF   d|kr|d | _ |d= nd| _ | j| j |d< tj| f|| dS )zp
        Initializes the label.

        colored : boolean to determine if blocks have to be colorized.
        coloredFr'   N)rB   r/   BLOCKHEIGHTr   r   )r#   argskwargsr(   r(   r)   r   h   s    
zVerticalLTOLabel.__init__c           
   
   C   s  t | ||| |  || j |ddd ||| | j| j| j	  d }t
| jD ]6}| j\}}| j}|| jd kr| 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|	f|  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   r1   r+   r-   	LINEWIDTHZsetStrokeColorRGBr,   r.   NBBLOCKS
BLOCKWIDTHrange	LABELFONTr   rB   isdigitZsetFillColorRGBgetattrr   COLORSCHEMEintColorrgbrectrC   ZstringWidthrotatesetFontdrawCentredStringr3   )
r#   r4   r5   r6   ZxblocksiZfontsizeZnewfontpartr(   r(   r)   r1   v   sJ    





zVerticalLTOLabel.drawOnN)r7   r8   r9   r:   rK   r   rI   rC   rG   rH   rN   r   r1   r(   r(   r(   r)   r;   T   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)ZpagesizeZ	Helvetica   r*      zSample LTO labels   r   g333333@i  ZRL3r   r=   )r   T)rB   )r   rB   N)Zreportlab.pdfgen.canvasrY   reportlab.librZ   ZA4rT   rU   r   r   r1   r;   ZshowPagesave)rY   rZ   r4   widthr   ZxposZxorigZyposZyorigcolwidthZ
lineheightcountr(   r(   r)   test   sl    
         rd   __main__N)Z!reportlab.graphics.barcode.code39r   r_   r   Zreportlab.lib.unitsr   stringr   r   r   r   r;   rd   r7   r(   r(   r(   r)   <module>   s   KI%