U
    L»{jh' ã                   @   s  d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dl
Z
ddlmZ ddlmZ ddlmZmZmZmZmZ dd	lmZmZmZmZmZmZmZmZm Z  d
Z!ej" #ej" $e%¡d¡Z&d a'da(da)dd„ Z*G dd„ de+ƒZ,dS )é    )Údivision)Údatetime©ÚwrapsNé   )Ú
TTFontFile)Úfpdf_charwidths)ÚsubstrÚsprintfÚprint_rÚUTF8ToUTF16BEÚUTF8StringToArray)	ÚPY3KÚpickleÚurlopenÚImageÚ
basestringÚunicodeÚ	exceptionÚbÚhashpathz1.7.2Úfontc                 C   s   |t ƒ | < d S )N)Úglobals)ÚvarÚval© r   úH/var/www/html/bwave/python/venv/lib/python3.8/site-packages/fpdf/fpdf.pyÚ
set_global%   s    r   c                   @   s  e Zd ZdZd¶dd„Zdd„ Zd·d
d„Zdd„ Zdd„ Zdd„ Z	d¸dd„Z
d¹dd„Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zdºd%d&„Zd'd(„ Zd)d*„ Zd+d,„ Zd»d.d/„Zd0d1„ Zd2d3„ Zd4d5„ Zd¼d6d7„Zd½d8d9„Zd¾d:d;„Zd<d=„ Zd>d?„ Zed@dA„ ƒZd¿dCdD„Z edÀdFdG„ƒZ!edÁdHdI„ƒZ"edÂdJdK„ƒZ#dÃdLdM„Z$dÄdNdO„Z%dPdQ„ Z&dRdS„ Z'dÅdTdU„Z(dVdW„ Z)edÆdXdY„ƒZ*edÇd[d\„ƒZ+d]d^„ Z,edÈd_d`„ƒZ-edÉdbdc„ƒZ.edÊddde„ƒZ/edËdfdg„ƒZ0edÌdhdi„ƒZ1djdk„ Z2dldm„ Z3dndo„ Z4dpdq„ Z5drds„ Z6dÍdtdu„Z7dvdw„ Z8dxdy„ Z9dzd{„ Z:d|d}„ Z;d~d„ Z<d€d�„ Z=d‚dƒ„ Z>d„d…„ Z?d†d‡„ Z@dˆd‰„ ZAdŠd‹„ ZBdŒd�„ ZCdŽd�„ ZDd�d‘„ ZEd’d“„ ZFd”d•„ ZGd–d—„ ZHd˜d™„ ZIdšd›„ ZJdœd�„ ZKdždŸ„ ZLd d¡„ ZMd¢d£„ ZNd¤d¥„ ZOd¦d§„ ZPd¨d©„ ZQdªd«„ ZRd¬d­„ ZSedÎd°d±„ƒZTedÏd´dµ„ƒZUdZS )ÐÚFPDFzPDF Generation classÚPÚmmÚA4c                 C   sÈ  |   ¡  i | _d| _d| _d| _i | _i | _d| _i | _i | _	i | _
i | _i | _i | _d| _d| _d| _d| _d| _d| _d| _d| _d| _d| _d| _d| _d| _ddd	d
dddddddddddœ| _|dkrØd| _n@|dkrèd| _n0|dkrød| _n |dk�r
d| _n|  d| ¡ t|tƒ�r |  ¡ }|dk�r<d }nN|d!k�rLd"}n>|d#k�r\d$}n.|d%k�rld&}n|d'k�r|d(}n|  d)| ¡ |d | _!|d | _"n |d | j | _!|d | j | _"| j!| j | _#| j"| j | _$|  ¡ }|d*k�sø|d+k�rd,| _%| j!| _&| j"| _'n:|d-k�s$|d.k�r<d/| _%| j"| _&| j!| _'n|  d0| ¡ | j%| _(| j&| j | _)| j'| j | _*d1| j }|  +||¡ |d2 | _,d3| j | _-|  .dd| ¡ |  /d4¡ |  0d¡ d5| _1d S )6Nr   é   Ú é   ú0 Gú0 gZCourierzCourier-BoldzCourier-ObliquezCourier-BoldObliqueZ	HelveticazHelvetica-BoldzHelvetica-ObliquezHelvetica-BoldObliquezTimes-Romanz
Times-BoldzTimes-ItaliczTimes-BoldItalicÚSymbolÚZapfDingbats)ZcourierZcourierBZcourierIZ	courierBIÚ	helveticaZ
helveticaBZ
helveticaIZhelveticaBIÚtimesZtimesBZtimesIZtimesBIÚsymbolÚzapfdingbatsÚptr   r    g¬ÕjµZ­@Úcmg‹Åb±X<@Úing      R@zIncorrect unit: Úa3)ç…ëQ¸OŠ@g33333š’@Za4)ç
×£p=š‚@r1   Za5)g×£p=
Oz@r2   Úletter)éd  i  Zlegal)r4   ið  zUnknown page format: ÚpZportraitr   ÚlZ	landscapeÚLzIncorrect orientation: gš™™™™Y<@ç      $@g¾Ÿ/Ý$â?Ú	fullwidthú1.3)2Ú	_dochecksÚoffsetsÚpageÚnÚbufferÚpagesÚorientation_changesÚstateÚfontsÚ
font_filesÚdiffsÚimagesÚ
page_linksÚlinksÚ	in_footerZlastwÚlasthÚfont_familyÚ
font_styleÚfont_size_ptÚ	underlineÚ
draw_colorÚ
fill_colorÚ
text_colorÚ
color_flagÚwsÚangleÚ
core_fontsÚkÚerrorÚ
isinstancer   ÚlowerÚfw_ptÚfh_ptÚfwÚfhÚdef_orientationÚw_ptÚh_ptÚcur_orientationÚwÚhÚset_marginsÚc_marginÚ
line_widthÚset_auto_page_breakÚset_display_modeÚset_compressionÚpdf_version)ÚselfÚorientationÚunitÚformatÚmarginr   r   r   Ú__init__,   s°           ý












zFPDF.__init__c                    s   t ˆ ƒ‡ fdd„ƒ}|S )z$Decorator to protect drawing methodsc                    s0   | j s| d¡s|  d¡ nˆ | f|ž|ŽS d S )NÚ
split_onlyz/No page open, you need to call add_page() first)r=   ÚgetrW   )rk   ÚargsÚkwargs©Úfnr   r   Úwrapper‘   s    z FPDF.check_page.<locals>.wrapperr   )rv   rw   r   ru   r   Ú
check_page�   s    zFPDF.check_pageéÿÿÿÿc                 C   s"   || _ || _|dkr|}|| _dS )zSet left, top and right marginsry   N)Úl_marginÚt_marginÚr_margin)rk   ÚleftÚtopÚrightr   r   r   rd   ™   s
    zFPDF.set_marginsc                 C   s$   || _ | jdkr | j|k r || _dS )zSet left marginr   N)rz   r=   Úx©rk   ro   r   r   r   Úset_left_margin¡   s    zFPDF.set_left_marginc                 C   s
   || _ dS )zSet top marginN)r{   r�   r   r   r   Úset_top_margin§   s    zFPDF.set_top_marginc                 C   s
   || _ dS )zSet right marginN)r|   r�   r   r   r   Úset_right_margin«   s    zFPDF.set_right_marginr   c                 C   s   || _ || _| j| | _dS )z.Set auto page break mode and triggering marginN)Úauto_page_breakÚb_marginrc   Úpage_break_trigger)rk   Úautoro   r   r   r   rg   ¯   s    zFPDF.set_auto_page_breakÚ
continuousc                 C   sz   |dks*|dks*|dks*|dks*t |tƒs2|| _n|  d| ¡ |dks`|dks`|dks`|dkrh|| _n|  d	| ¡ d
S )z¤Set display mode in viewer
        
        The "zoom" argument may be 'fullpage', 'fullwidth', 'real',
        'default', or a number, interpreted as a percentage.Úfullpager9   ÚrealÚdefaultzIncorrect zoom display mode: Úsingler‰   ÚtwozIncorrect layout display mode: N)rX   r   Ú	zoom_moderW   Úlayout_mode)rk   ZzoomZlayoutr   r   r   rh   µ   s    * zFPDF.set_display_modec                 C   s
   || _ dS )zSet page compressionN)Úcompress)rk   r‘   r   r   r   ri   Ä   s    zFPDF.set_compressionc                 C   s
   || _ dS )zTitle of documentN)Útitle)rk   r’   r   r   r   Ú	set_titleÈ   s    zFPDF.set_titlec                 C   s
   || _ dS )zSubject of documentN)Úsubject)rk   r”   r   r   r   Úset_subjectÌ   s    zFPDF.set_subjectc                 C   s
   || _ dS )zAuthor of documentN)Úauthor)rk   r–   r   r   r   Ú
set_authorÐ   s    zFPDF.set_authorc                 C   s
   || _ dS )zKeywords of documentN)Úkeywords)rk   r˜   r   r   r   Úset_keywordsÔ   s    zFPDF.set_keywordsc                 C   s
   || _ dS )zCreator of documentN)Úcreator)rk   rš   r   r   r   Úset_creatorØ   s    zFPDF.set_creatorú{nb}c                 C   s
   || _ |S )z)Define an alias for total number of pages)Ústr_alias_nb_pages)rk   Úaliasr   r   r   Úalias_nb_pagesÜ   s    zFPDF.alias_nb_pagesc                 C   s   t d| ƒ‚dS )zFatal errorzFPDF error: N)ÚRuntimeError)rk   Úmsgr   r   r   rW   á   s    z
FPDF.errorc                 C   s
   d| _ dS )zBegin documentr   N©rB   ©rk   r   r   r   Úopenå   s    z	FPDF.openc                 C   sH   | j dkrdS | jdkr |  ¡  d| _|  ¡  d| _|  ¡  |  ¡  dS )zTerminate documenté   Nr   r   )rB   r=   Úadd_pagerI   ÚfooterÚ_endpageÚ_enddocr£   r   r   r   Úcloseé   s    

z
FPDF.closer#   c           
      C   s„  | j dkr|  ¡  | j}| jr*| jd }n| j}| j}| j}| j}| j}| j	}| j
}	| jdkrzd| _|  ¡  d| _|  ¡  |  |¡ |  d¡ || _|  td|| j ƒ¡ |r¼|  |||¡ || _|dkrÔ|  |¡ || _|dkrì|  |¡ || _	|	| _
|  ¡  | j|k�r(|| _|  td|| j ƒ¡ |�r<|  |||¡ | j|k�rX|| _|  |¡ | j|k�rt|| _|  |¡ || _	|	| _
dS )	zStart a new pager   ÚUr   z2 Jú%.2f wr%   r&   N)rB   r¤   rK   rN   rL   rM   rf   rO   rP   rQ   rR   r=   rI   r§   r¨   Ú
_beginpageÚ_outr
   rV   Úset_fontÚheader)
rk   rl   ÚfamilyÚstyleÚsizeZlwZdcÚfcZtcÚcfr   r   r   r¦   ø   sZ    







zFPDF.add_pagec                 C   s   dS )z4Header to be implemented in your own inherited classNr   r£   r   r   r   r°   4  s    zFPDF.headerc                 C   s   dS )z4Footer to be implemented in your own inherited classNr   r£   r   r   r   r§   8  s    zFPDF.footerc                 C   s   | j S )zGet current page number)r=   r£   r   r   r   Úpage_no<  s    zFPDF.page_noc                 C   sh   |dkr|dkr|dks |dkr2t d|d ƒ| _nt d|d |d |d ƒ| _| jdkrd|  | j¡ dS )z%Set color for all stroking operationsr   ry   z%.3f Gç     ào@z%.3f %.3f %.3f RGN)r
   rO   r=   r®   ©rk   ÚrÚgr   r   r   r   Úset_draw_color@  s
     
zFPDF.set_draw_colorc                 C   sv   |dkr|dkr|dks |dkr2t d|d ƒ| _nt d|d |d |d ƒ| _| j| jk| _| jdkrr|  | j¡ dS )z$Set color for all filling operationsr   ry   ú%.3f gr·   ú%.3f %.3f %.3f rgN)r
   rP   rQ   rR   r=   r®   r¸   r   r   r   Úset_fill_colorI  s     
zFPDF.set_fill_colorc                 C   s`   |dkr|dkr|dks |dkr2t d|d ƒ| _nt d|d |d |d ƒ| _| j| jk| _dS )zSet color for textr   ry   r¼   r·   r½   N)r
   rQ   rP   rR   r¸   r   r   r   Úset_text_colorS  s     zFPDF.set_text_colorc                 C   s°   |   |¡}| jd }d}t|ƒ}| jr~|D ]P}t|ƒ}t|ƒ|krP||| 7 }q*| jd d rr|| jd d 7 }q*|d7 }q*n$td|ƒD ]}|| || d¡7 }qˆ|| j d S )z)Get width of a string in the current fontÚcwr   ÚdescÚMissingWidthiô  ç     @�@)Únormalize_textÚcurrent_fontÚlenÚunifontsubsetÚordÚrangerr   Ú	font_size)rk   ÚsrÀ   rb   r6   ÚcharÚir   r   r   Úget_string_width[  s    

zFPDF.get_string_widthc                 C   s*   || _ | jdkr&|  td|| j ƒ¡ dS )zSet line widthr   r¬   N)rf   r=   r®   r
   rV   )rk   Úwidthr   r   r   Úset_line_widthq  s    
zFPDF.set_line_widthc              	   C   s>   |   td|| j | j| | j || j | j| | j ƒ¡ dS )zDraw a linez%.2f %.2f m %.2f %.2f l SN©r®   r
   rV   rc   )rk   Úx1Úy1Úx2Úy2r   r   r   Úlinew  s    z	FPDF.lineFc                 C   s4   |r"|r"t d|| j || j ƒ}nd}|  |¡ d S )Nz[%.3f %.3f] 0 dz[] 0 d)r
   rV   r®   )rk   Údash_lengthÚspace_lengthrË   r   r   r   Ú	_set_dash|  s    zFPDF._set_dashr   c                 C   s(   |   ||¡ |  ||||¡ |   ¡  dS )zŸDraw a dashed line. Same interface as line() except:
           - dash_length: Length of the dash
           - space_length: Length of the space between dashesN)rÙ   rÖ   )rk   rÒ   rÓ   rÔ   rÕ   r×   rØ   r   r   r   Údashed_lineƒ  s    zFPDF.dashed_linec              	   C   sd   |dkrd}n|dks|dkr$d}nd}|   td|| j | j| | j || j | | j |ƒ¡ dS )	zDraw a rectangleÚFÚfÚFDÚDFÚBÚSz%.2f %.2f %.2f %.2f re %sNrÑ   )rk   r€   Úyrb   rc   r²   Úopr   r   r   ÚrectŒ  s    z	FPDF.rectc                 C   s,  |dkrd}n|dks|dkr$d}nd}||d  }||d  }|d }	|d }
dt  d	¡d
  |	 }dt  d	¡d
  |
 }|  td||	 | j | j| | j ||	 | j | j||  | j || | j | j||
  | j || j | j||
  | j ƒ	¡ |  td|| | j | j||
  | j ||	 | j | j||  | j ||	 | j | j| | j ƒ¡ |  td||	 | j | j||  | j || | j | j||
  | j || j | j||
  | j ƒ¡ |  td|| | j | j||
  | j ||	 | j | j||  | j ||	 | j | j| | j |ƒ¡ dS )zDraw a ellipserÛ   rÜ   rÝ   rÞ   rß   rà   ç       @gUUUUUUõ?r"   r   z+%.2f %.2f m %.2f %.2f %.2f %.2f %.2f %.2f cz%.2f %.2f %.2f %.2f %.2f %.2f cz"%.2f %.2f %.2f %.2f %.2f %.2f c %sN)ÚmathÚsqrtr®   r
   rV   rc   )rk   r€   rá   rb   rc   r²   râ   ÚcxÚcyÚrxZryÚlxZlyr   r   r   Úellipse—  s\        ü   ý   ý   üzFPDF.ellipsec                 C   s,  |  ¡ }|dkr(| dd¡|  ¡  d }|dkr4d}| ¡ }|dkrHd}|| }|| jkr^dS |�r6tj |¡rv|}n`tr tj tj t|¡¡r tj t|¡}n6t	rÊtj tj t	|¡¡rÊtj t	|¡}nt
d	| ƒ‚d}td
krøtj |¡d
 d }n&tdk�rtj tt|ƒd ¡}nd}|�rZtj |¡�rZt|dƒ}	zt |	¡}
W 5 |	 ¡  X �nDtƒ }| |¡ tt|jd
ƒƒtt|jd
ƒƒtt|jd
ƒƒ|jdtt|jd
 d
ƒƒtt|jd d
ƒƒtt|jd d
ƒƒtt|jd d
ƒƒf t|jƒtt|jd
ƒƒtt|jd
ƒƒdœ}t  dd|j!¡d|t|j"ƒt|j#ƒ||t $|¡j%|j&dœ	}
|�rœz"t|dƒ}	t '|
|	¡ |	 ¡  W n( t(k
�rš   t)ƒ j*t*j+k�s–‚ Y nX ~t,| dƒ�rºt-t.d
dƒƒ}nt-t.d
dƒƒ}t/| jƒd |
d |
d |
d |
d |
d |
d |
d |||dœ| j|< |
d  d|d!œ| j0|< ddi| j0|< nòt|ƒ}zt |¡}
W 5 | ¡  X d"t/| jƒd i| j|< | j|  1|
¡ t2�rîd
}t/| j3ƒ}t.d|d ƒD ] }| j3| t2k�r¢|} �qÄ�q¢|d
k�rà|d }t2| j3|< || j| d#< |
 4d$¡}|�r(t5d%k�rd&t6i| j0|< nt7t8d'œ| j0|< dS )(zAdd a TrueType or Type1 fontr#   ú z.pklÚarialr)   ÚIBÚBINzTTF Font file not found: %sr   r"   Úrbz[%s %s %s %s]r   r¥   ©ÚAscentÚDescentÚ	CapHeightÚFlagsÚFontBBoxÚItalicAngleÚStemVrÂ   z[ ()]ÚTTF)	ÚnameÚtyperÁ   ÚupÚutÚttffileÚfontkeyÚoriginalsizerÀ   Úwbr�   é9   é    rû   rú   rÁ   rü   rý   rÀ   rþ   )rÍ   rû   rú   rÁ   rü   rý   rÀ   rþ   rÿ   ÚsubsetÚunifilenamer   )Úlength1rû   rþ   rÍ   ÚdiffÚfilenameÚTrueTyper  )r  Úlength2)9rY   ÚreplaceÚupperrC   ÚosÚpathÚexistsÚFPDF_FONT_DIRÚjoinÚSYSTEM_TTFONTSr    ÚFPDF_CACHE_MODEÚsplitextÚFPDF_CACHE_DIRr   r¤   rª   r   Úloadr   Z
getMetricsÚintÚroundZascentZdescentZ	capHeightÚflagsZbboxZitalicAngleZstemVZdefaultWidthÚreÚsubZfullNameZunderlinePositionZunderlineThicknessÚstatÚst_sizeZ
charWidthsÚdumpÚIOErrorr   ÚerrnoÚEACCESÚhasattrÚlistrÉ   rÆ   rD   Úupdater  rE   rr   rû   r   Zsize1Zsize2)rk   r±   r²   ÚfnameÚunirÿ   Zttffilenamerú   r  r]   Ú	font_dictÚttfrÁ   ZsbarrZfontfileÚdÚnbrÍ   r  r   r   r   Úadd_font¼  sæ    
ÿÿ

ÿ

üô
÷
     ú ÿ






ÿzFPDF.add_fontc                 C   sÚ  |  ¡ }|dkr| j}|dkr$d}n|dks4|dkr8d}| ¡ }d|kr\d| _| dd¡}nd| _|d	krnd
}|dkr|| j}| j|krž| j|krž| j|krždS || }|| jk�rr|| jk�r\|t	k�r*t
j t|¡}|dksæ|dkrò||  ¡ 7 }ttt|d ƒ ¡ |d dƒƒ |t	k�r*|  d| ¡ t| jƒd }|d| j| ddt	| dœ| j|< n|  d| d | ¡ || _|| _|| _|| j | _| j| | _| j| d dk| _| jdk�rÖ|  td| jd | jƒ¡ dS )z#Select a font; size given in pointsr#   rí   r)   r+   r,   r«   r   r   rî   rï   Nr*   z.fontÚexecz&Could not include font metric file forÚcoreiœÿÿÿé2   )rÍ   rû   rú   rü   rý   rÀ   zUndefined font: rì   rû   rù   úBT /F%d %.2f Tf ETrÍ   )rY   rK   r  rN   r  rM   rL   rC   rU   r   r  r  r  r  r,  Úcompiler¤   ÚreadrW   rÆ   rV   rÊ   rÅ   rÇ   r=   r®   r
   )rk   r±   r²   r³   rÿ   rú   rÍ   r   r   r   r¯   5  sN    
 
$zFPDF.set_fontc                 C   sH   | j |krdS || _ || j | _| jdkrD|  td| jd | j ƒ¡ dS )zSet font size in pointsNr   r/  rÍ   )rM   rV   rÊ   r=   r®   r
   rÅ   )rk   r³   r   r   r   Úset_font_sizef  s    

zFPDF.set_font_sizec                 C   s   t | jƒd }d| j|< |S )zCreate a new internal linkr   )r   r   )rÆ   rH   )rk   r>   r   r   r   Úadd_linko  s    
zFPDF.add_linkc                 C   s.   |dkr| j }|dkr| j}||g| j|< dS )z Set destination of internal linkry   N)rá   r=   rH   )rk   Úlinkrá   r=   r   r   r   Úset_linku  s
    zFPDF.set_linkc                 C   sZ   | j | jkrg | j| j < | j| j   || j | j|| j  || j || j |fg7  < dS )zPut a link on the pageN)r=   rG   rV   r`   )rk   r€   rá   rb   rc   r4  r   r   r   r4  }  s    z	FPDF.linkc                 C   s¸   |   |¡}| jr@|  t|dƒ¡}t|ƒD ]}| jd  |¡ q(n
|  |¡}td|| j | j	| | j |ƒ}| j
rŽ|dkrŽ|d|  |||¡ 7 }| jrªd| j d | d }|  |¡ dS )	zOutput a stringFr  úBT %.2f %.2f Td (%s) Tj ETr#   rì   úq ú QN)rÄ   rÇ   Ú_escaper   r   rÅ   Úappendr
   rV   rc   rN   Ú_dounderlinerR   rQ   r®   )rk   r€   rá   ÚtxtÚtxt2r&  rË   r   r   r   Útextƒ  s    

 z	FPDF.textNc              
   C   s¦   |d kr| j }|d kr| j}| jdkr0|  d¡ || _|dkr¢|tjd 9 }t |¡}t |¡}|| j }| j	| | j }t
d||| |||| | ƒ	}|  |¡ d S )Nr   ÚQé´   z7q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm)r€   rá   rT   r®   rå   ÚpiÚcosÚsinrV   rc   r
   )rk   rT   r€   rá   ÚcrË   rç   rè   r   r   r   Úrotate”  s    




zFPDF.rotatec                 C   s   | j S )z"Accept automatic page break or not)r…   r£   r   r   r   Úaccept_page_break¦  s    zFPDF.accept_page_breakc	              	   C   sð  |   |¡}| j}	| j| | jkr†| js†|  ¡ r†| j}
| j}|dkrRd| _|  d¡ |  	| j
¡ |
| _|dkr†|| _|  td||	 ƒ¡ |dkr | j| j | j }d}|dks¶|dk�r|dkrÒ|dkrÌd}qÖd}nd}td	| j|	 | j| j |	 ||	 | |	 |ƒ}t|tƒ�r$| j}
| j}d
|k�rZ|td|
|	 | j| |	 |
|	 | j||  |	 ƒ7 }d|k�r˜|td|
|	 | j| |	 |
| |	 | j| |	 ƒ7 }d|k�rÞ|td|
| |	 | j| |	 |
| |	 | j||  |	 ƒ7 }d|k�r$|td|
|	 | j||  |	 |
| |	 | j||  |	 ƒ7 }|dk�rœ|dk�rN|| j |  |¡ }n$|dk�rl||  |¡ d }n| j}| j�rŒ|d| j d 7 }| j�rœ| j�rœt|ƒD ]}| jd  |¡ �q¤|  tddƒ¡}|td| j| |	 | j| jd|  d| j   |	 ƒ7 }| d¡}t|ƒ}t|ƒD ]j}|| }d|  t|dƒ¡ d }|td|ƒ7 }|d |k �r| j| j  d | j }|td||ƒ7 }�q|d7 }|d7 }n~| j�rÖ|  t|dƒ¡}t|ƒD ]}| jd  |¡ �q¼n
|  |¡}|td| j| |	 | j| jd|  d| j   |	 |ƒ7 }| j �rR|d|  !| j| | jd|  d| j  |¡ 7 }| j�rb|d7 }|�rœ|  "| j| | jd|  d| j  |  |¡| j|¡ |�r¬|  |¡ || _#|dk�rÞ|  j|7  _|dk�rì| j$| _n|  j|7  _d S )!zOutput a cellr   ú0 Twú%.3f Twr#   r   rß   rÜ   rà   z%.2f %.2f %.2f %.2f re %s r7   z%.2f %.2f m %.2f %.2f l S ÚTÚRÚCrä   r7  rì   r  FzBT 0 Tw %.2F %.2F Td [g      à?g333333Ó?ú(ú)z%s iè  z%d(%s) z] TJz ETr6  r8  N)%rÄ   rV   rá   r‡   rI   rF  r€   rS   r®   r¦   ra   r
   rb   r|   rc   rX   r   re   rÎ   rR   rQ   rÇ   r   rÅ   r:  r9  r   rÊ   ÚsplitrÆ   rÉ   rM   rN   r;  r4  rJ   rz   )rk   rb   rc   r<  ÚborderÚlnÚalignÚfillr4  rV   r€   rS   rË   râ   rá   Zdxr&  ÚspaceÚtZnumtrÍ   ZtxZadjr=  r   r   r   Úcellª  sœ    

.
4
4
<
<


8


:04



z	FPDF.cellÚJc              	   C   sÐ  |   |¡}g }| jd }	|dkr2| j| j | j }|d| j  d | j }
| dd¡}t|ƒ}|dkr~||d  dkr~|d8 }d}|rÖ|dkrœd	}d
}d}n:d}d|kr°|d7 }d|krÀ|d7 }d|krÒ|d }n|}d}d}d}d}d}d}||k �rJ|| }|dk�rž| j	dk�r,d| _	|�s,|  
d¡ |�sV|  ||t|||| ƒ|d||¡ n| t|||| ƒ¡ |d7 }d}|}d}d}|d7 }|rî|dkrî|}qî|dk�r¸|}|}|d7 }| j�rÚ||  |¡| j d 7 }n||	 |d¡7 }||
k�r@|dk�rt||k�r|d7 }| j	dk�r2d| _	|�s2|  
d¡ |�s\|  ||t|||| ƒ|d||¡ n| t|||| ƒ¡ nž|dk�rÊ|dk�r¦|
| d | j |d  | _	nd| _	|�sÊ|  
td| j	| j ƒ¡ |�sô|  ||t|||| ƒ|d||¡ n| t|||| ƒ¡ |d }d}|}d}d}|d7 }|�rH|dk�rH|}qî|d7 }qî| j	dk�rld| _	|�sl|  
d¡ |�r„d|k�r„|d7 }|�s¶|  ||t|||| ƒ|d||¡ | j| _n| t|||| ƒ¡ |S )z2Output text with automatic or explicit line breaksrÀ   r   r"   rÃ   úr#   r   Ú
ZLTRBZLRTZLRr7   rJ  rI  ry   rG  rì   rV  rH  rß   )rÄ   rÅ   rb   r|   r€   re   rÊ   r  rÆ   rS   r®   rU  r	   r:  rÇ   rÎ   rr   r
   rV   rz   )rk   rb   rc   r<  rO  rQ  rR  rq   ÚretrÀ   ÚwmaxrË   r*  r   Úb2ÚseprÍ   Újr6   ÚnsÚnlrD  Zlsr   r   r   Ú
multi_cell  sÀ    





$




$

$

"
zFPDF.multi_cellc              
   C   s¦  |   |¡}| jd }| j| j | j }|d| j  d | j }| dd¡}t|ƒ}d}	d}
d}d}d}|
|k �rp||
 }|d	krü|  	||t
|||
| ƒdddd|¡ |
d7 }
d}	|
}d}|dkrò| j| _| j| j | j }|d| j  d | j }|d7 }qf|d
k�r
|
}	| j�r,||  |¡| j d 7 }n|| |d¡7 }||k�rf|	dk�rè| j| jk�r°| j| _|  j|7  _| j| j | j }|d| j  d | j }|
d7 }
|d7 }qf|
|k�rÂ|
d7 }
|  	||t
|||
| ƒdddd|¡ n,|  	||t
|||	| ƒdddd|¡ |	d }
d}	|
}d}|dk�r\| j| _| j| j | j }|d| j  d | j }|d7 }qf|
d7 }
qf|
|k�r¢|  	|d | j |t
||ƒdddd|¡ dS )zOutput text in flowing moderÀ   r"   rÃ   rW  r#   ry   r   r   rX  rì   N)rÄ   rÅ   rb   r|   r€   re   rÊ   r  rÆ   rU  r	   rz   rÇ   rÎ   rr   rá   )rk   rc   r<  r4  rÀ   rb   rZ  rË   r*  r\  rÍ   r]  r6   r_  rD  r   r   r   Úwritey  sp    


$



&$



z
FPDF.writec              
   C   sv  || j k�r8|dkr>| d¡}|s0|  d| ¡ t||d ƒ}| ¡ }|dksV|dkrb|  |¡}	n¸|dkrv|  |¡}	n¤d}
| j| j| jg}|D ](}z||ƒ}	d	}
W  q¸W qŽ   Y qŽX qŽ|
sêd
| }t| |ƒsÜ|  d| ¡ t	| |ƒ|ƒ}	d
| }t| |ƒ�s|  d| ¡ t	| |ƒ|ƒ}	t
| j ƒd |	d< |	| j |< n
| j | }	|dk�rt|dk�rt|	d | j }|	d | j }n>|dk�r”||	d  |	d  }n|dk�r²||	d  |	d  }|dk�r| j| | jk�rø| j�sø|  ¡ �rø| j}|  | j¡ || _| j}|  j|7  _|dk�r| j}|  td|| j || j || j | j||  | j |	d ƒ¡ |�rr|  |||||¡ dS )zPut an image on the pager#   Ú.z7image file has no extension and no type was specified: r   ZjpgZjpegZpngFTÚ_parsezUnsupported image type: rÍ   r   rb   rc   Nz&q %.2f 0 0 %.2f %.2f %.2f cm /I%d Do Q)rF   ÚrfindrW   r	   rY   Ú	_parsejpgÚ	_parsepngÚ	_parsegifr"  ÚgetattrrÆ   rV   rá   r‡   rI   rF  r€   r¦   ra   r®   r
   rc   r4  )rk   rú   r€   rá   rb   rc   rû   r4  ÚposÚinfoZsucceed_parsingZparsing_functionsÚpfÚmtdr   r   r   Úimage½  sf    






$
>z
FPDF.imagec                 C   s6   | j | _t|tƒr$|  j| j7  _n|  j|7  _dS )z,Line Feed; default value is last cell heightN)rz   r€   rX   r   rá   rJ   )rk   rc   r   r   r   rP     s    
zFPDF.lnc                 C   s   | j S )zGet x position)r€   r£   r   r   r   Úget_x	  s    z
FPDF.get_xc                 C   s    |dkr|| _ n| j| | _ dS )zSet x positionr   N)r€   rb   )rk   r€   r   r   r   Úset_x  s    z
FPDF.set_xc                 C   s   | j S )zGet y position)rá   r£   r   r   r   Úget_y  s    z
FPDF.get_yc                 C   s(   | j | _|dkr|| _n| j| | _dS )zSet y position and reset xr   N)rz   r€   rá   rc   )rk   rá   r   r   r   Úset_y  s    z
FPDF.set_yc                 C   s   |   |¡ |  |¡ dS )zSet x and y positionsN)rq  ro  )rk   r€   rá   r   r   r   Úset_xy   s    
zFPDF.set_xyc                 C   sÒ   | j dk r|  ¡  | ¡ }|dkr8|dkr4d}d}nd}|dkrLt| jƒ n‚|dkr`t| jƒ nn|dkr²t|dƒ}|s„|  d| ¡ trœ| | j 	d	¡¡ n| | j¡ | ¡  n|d
krÀ| jS |  d| ¡ dS )zOutput PDF to some destinationr¥   r#   zdoc.pdfÚIrÛ   ÚDr  zUnable to create output file: Úlatin1rà   zIncorrect output destination: )
rB   rª   r  Úprintr?   r¤   rW   r   ra  Úencode)rk   rú   ÚdestrÜ   r   r   r   Úoutput%  s0    


zFPDF.outputc                 C   sB   | j r t|tƒr ts | d¡}n| j s>t|tƒr>ts>| d¡}|S )z7Check that text input is in the correct format/encodingÚutf8ru  )rÇ   rX   Ústrr   Údecoder   rw  )rk   r<  r   r   r   rÄ   G  s
    
zFPDF.normalize_textc                 C   s(   t ddƒdkr$dd l}| |jd¡ d S )Nz%.1fç      ð?z1.0r   rK  )r
   ÚlocaleÚ	setlocaleÚ
LC_NUMERIC)rk   r~  r   r   r   r;   R  s    zFPDF._dochecksc                 C   s   t d S )Nú/)r  r£   r   r   r   Ú_getfontpath[  s    zFPDF._getfontpathc              
   C   s`  | j }t| dƒrˆt| jdƒ}tt|ƒdƒ}td|d ƒD ]}| j|  ||¡| j|< q8td|d ƒD ]"}| j|  | jt|ƒ¡| j|< qd| jdkr | j	}| j
}n| j
}| j	}| jr¸d}nd}td|d ƒD �]ö}|  ¡  |  d¡ |  d¡ || jk�r
|  td	||ƒ¡ |  d
¡ | j�r
|| jk�r
d}| j| D ]Ä}	td|	d |	d |	d |	d  |	d |	d  ƒ}
|d|
 d 7 }t|	d tƒ�r¦|d|  |	d ¡ d 7 }nR| j|	d  }|d | jk�rÊ|}n|}|tddd|d   ||d | j  ƒ7 }�q6|  |d ¡ | jdk�r |  d¡ |  dt| jd ƒ d ¡ |  d¡ | j�rzt�rd| j|  d¡n| j| }t |¡}n
| j| }|  ¡  |  d| d tt|ƒƒ d ¡ |  |¡ |  d¡ qÊt| jƒ| jd< |  d ¡ |  d!¡ d"}td|ƒD ]}|tdd|  ƒd# 7 }�qö|  |d ¡ |  d$t|ƒ ¡ |  td	||ƒ¡ |  d¡ |  d¡ d S )%Nr�   Fr   r   ú/Filter /FlateDecode r#   z<</Type /Pagez/Parent 1 0 Rz/MediaBox [0 0 %.2f %.2f]z/Resources 2 0 Rz	/Annots [z%.2f %.2f %.2f %.2fr   r"   r¥   z%<</Type /Annot /Subtype /Link /Rect [z] /Border [0 0 0] é   z/A <</S /URI /URI z>>>>z!/Dest [%d 0 R /XYZ 0 %.2f null]>>ú]r:   z7/Group <</Type /Group /S /Transparency /CS /DeviceRGB>>z
/Contents z 0 R>>Úendobjru  ú<<ú/Length ú>>z1 0 objz<</Type /Pagesz/Kids [z 0 R z/Count )r=   r"  r   r�   r{  rÉ   r@   r  r^   rZ   r[   r‘   Ú_newobjr®   rA   r
   rG   rX   r   Ú_textstringrH   rV   rj   r>   r   rw  ÚzlibrÆ   Ú
_putstreamr?   r<   )rk   r*  rž   r¹   r>   r_   r`   ÚfilterZannotsÚplrã   r6   rc   r5   ZkidsrÍ   r   r   r   Ú	_putpages^  sv    
 



0.

 
"



zFPDF._putpagesc                 C   sD  | j }| jD ].}|  ¡  |  d| j|  d ¡ |  d¡ q| j ¡ D �]b\}}d|krF|d dkrF|  ¡  | j | j| d< d}t|  ¡ | dd	ƒ}|s¢|  d
¡ | 	¡ }| 
¡  t|dƒdk}|�s,d|k�r,t|d ƒdk}|rît|dƒ}|�r,t||d  ƒdk�r,t|d|d ƒt||d d ƒ }|  dtt|ƒƒ ¡ |�rR|  d¡ |  dt|d ƒ ¡ d|k�rŒ|  dt|d ƒ d ¡ |  d¡ |  |¡ |  d¡ qFdd„ | j ¡ D ƒ}	|	 ¡  |	D �]p\}
}}| j d	 | j| d< |d }|d }|dk�rf|  ¡  |  d¡ |  d| ¡ |  d¡ |dk�rN|d k�rN|  d!¡ |  d¡ |  d¡ �qÌ|d"k�sz|d#k�r0|  ¡  |  d¡ |  d| ¡ |  d$| ¡ |  d%¡ |  d&t| j d	 ƒ d' ¡ |  d(t| j d) ƒ d' ¡ |d* �r(d+|k�r|  d,t||d+  ƒ d' ¡ n
|  d!¡ |  d¡ |  d¡ |  ¡  |d- }d.}td/d0ƒD ]&}|t| t|ƒ¡�ptdƒd1 7 }�qZ|  |d2 ¡ |  d¡ |  ¡  d3| }d4D ]}|d5||d6 | f 7 }�q®|d7 }|�r|d87 }|d"k�rö|d97 }|d1t| j| d ƒ d' 7 }|  |d ¡ |  d¡ �qÌ|dk�r| j d	 | j| d< tƒ }d:|d  }|d; }|d= | |d< |¡}t|ƒ}t |¡}|j}|  ¡  |  d¡ |  d=¡ |  d| d ¡ |  d>¡ |  d?t| j d	 ƒ d@ ¡ |  dAt| j d) ƒ d' ¡ |  d¡ |  d¡ |  ¡  |  d¡ |  dB¡ |  d| d ¡ |  dCt| j d) ƒ d' ¡ |  d(t| j dD ƒ d' ¡ |d6  dE¡�r¦|  dF|d6 dE  ¡ |  ||j¡ |  dGt| j dH ƒ d' ¡ |  d¡ |  d¡ |  ¡  dI}|  dtt|ƒƒ d ¡ |  |¡ |  d¡ |  ¡  |  dJ¡ |  dK¡ |  dL¡ |  d¡ |  d¡ |  ¡  |  dM¡ |  dN| ¡ dOD ]>}|d6 | }|dPk�r¦|dHB }|dQ@ }|  d5||f ¡ �q||  dRt| j d) ƒ d' ¡ |  d¡ |  d¡ d}dSgd0 d0 d) }| ¡ D ]6\}}t|dT? ƒ||d) < t|dU@ ƒ||d) d	 < �q
d |¡}t�r\| dV¡}t |¡}|  ¡  |  dtt|ƒƒ d ¡ |  d¡ |  d¡ |  |¡ |  d¡ |  ¡  |  dtt|ƒƒ ¡ |  d¡ |  dt|ƒ ¡ |  d¡ |  |¡ |  d¡ ~n0dW| ¡  }t | |ƒ�s2|  dX| ¡ |  !|¡ �qÌd S )YNz?<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [z]>>r†  rû   rù   r>   r#   rð   r   zFont file not foundéþÿÿÿz.zr
  r   é€   é   r  z
<</Length z/Filter /FlateDecodez	/Length1 z	/Length2 z /Length3 0r‰  c                 S   s&   g | ]}|d  d |d |d  f‘qS )r   rÍ   r   r   ©Ú.0r€   r   r   r   Ú
<listcomp>Ë  s     z"FPDF._putfonts.<locals>.<listcomp>rú   r-  z<</Type /Fontz/BaseFont /z/Subtype /Type1r'   r(   z/Encoding /WinAnsiEncodingZType1r	  z
/Subtype /z/FirstChar 32 /LastChar 255z/Widths ú 0 Rz/FontDescriptor r"   Úencr  z
/Encoding rÀ   ú[r  é   rì   r…  z#<</Type /FontDescriptor /FontName /)rò   ró   rô   ZFalgsrö   r÷   rø   rÂ   z /%s %srÁ   Úfilez
 /FontFileÚ2zMPDFAA+r  rþ   z/Subtype /Type0z/Encoding /Identity-Hz/DescendantFonts [ú 0 R]z/ToUnicode z/Subtype /CIDFontType2z/CIDSystemInfo r¥   rÂ   z/DW %dz/CIDToGIDMap r„  aY  /CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<</Registry (Adobe)
/Ordering (UCS)
/Supplement 0
>> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 beginbfrange
<0000> <FFFF> <0000>
endbfrange
endcmap
CMapName currentdict /CMap defineresource pop
end
endz<</Registry (Adobe)z/Ordering (UCS)z/Supplement 0z<</Type /FontDescriptorz/FontName /rñ   rõ   ißÿÿÿz/FontFile2 ú é   éÿ   ru  Ú_putzUnsupported font type: )"r>   rE   rŠ  r®   rD   Úitemsr¤   r‚  rW   r1  rª   r	   rÈ   r{  rÆ   r�  rC   ÚsortrÉ   rr   Úchrr   Z
makeSubsetrŒ  r‘   ÚcodeToGlyphÚ_putTTfontwidthsÚmaxUnir  r   rw  rY   Zmethod_existsrl  )rk   Únfr  rú   rj  r   rÜ   Ú
compressedr°   ÚflistÚidxrV   rû   rÀ   rË   rÍ   r  r(  Zfontnamer  ZttfontstreamZ
ttfontsizeZ
fontstreamr¥  ZtoUniÚkdÚvZcidtogidmapÚccZglyphrl  r   r   r   Ú	_putfonts§  s@   


"












 


$


































zFPDF._putfontsc              	   C   s¶  |d r"t j |d ¡d d }nd }|r�t j |¡r�t|dƒ}zt |¡}W 5 | ¡  X |d }|d }|d }|d }	|d	 }
|d
 }d}nd}i }i }d}d}	d}
d}|d }t||ƒD �]¸}|dk�rb|�rbt j |¡�sbzVt|dƒ}i }||d< ||d< |	|d< |
|d	< ||d
< ||d< t 	||¡ | ¡  W n( t
k
�r`   tƒ jtjk�s\‚ Y nX |d | dk�rvq¾|d | }|dk�r�d}|dk�r¦||d ks¾|�s®q¾d|k�sÌ|d r¾||d kr¾||d k�r^||	k�r4||| d k�r
| |g ¡ |¡ n||  ¡  |}|	|g||< d}
d||< n(|
�rJ|}|g||< n||  |¡ d}
n|}|g||< d}
|}|}	q¾d}d}d}t| ¡ ƒD ]”\}}t|ƒ}||k�rò|�sò||k�sÆ|dk �rò||k�rÖ||= || ||  ||< ||= n|}|| }||k�r |dk}||= |d8 }nd}�q’g }t| ¡ ƒD ]d\}}tt|ƒƒdk�rx| d||t|ƒ d |d f ¡ n"| d|d dd„ |D ƒ¡f ¡ �q8|  dd |¡ ¡ d S )Nr  r   z
.cw127.pklrð   ÚrangeidrÉ   ÚprevcidÚ	prevwidthÚintervalÚrange_intervalr’  r‘  ry   Fr   r  rÀ   iÿÿ  r   r  ZdwTr¥   z	 %s %s %sz %s [ %s ]
rì   c                 S   s   g | ]}t t|ƒƒ‘qS r   )r{  r  )r•  rc   r   r   r   r–  à  s     z)FPDF._putTTfontwidths.<locals>.<listcomp>z/W [%s]r#   )r  r  r  r  r¤   rª   r   r  rÉ   r  r  r   r   r!  Ú
setdefaultr:  ÚpopÚsortedr¢  rÆ   Úsetr  r®   )rk   r   r§  Z
cw127fnamer]   r'  r°  Zrange_r±  r²  r³  r´  ZstartcidZcwlenZcidrÏ   ZprevkZnextkZprevintrV   rS   Zcwsrb   r   r   r   r¦  {  s²    



 


$


&&zFPDF._putTTfontwidthsc                 C   sZ   d}| j rd}dd„ | j ¡ D ƒ}| ¡  |D ]&\}}|  |¡ |d= d|kr.|d= q.d S )Nr#   rƒ  c                 S   s    g | ]}|d  d |d  f‘qS )r   rÍ   r   r”  r   r   r   r–  ç  s     z#FPDF._putimages.<locals>.<listcomp>ÚdataÚsmask)r‘   rF   r¢  r£  Ú	_putimage)rk   rŽ  rÍ   r«  rj  r   r   r   Ú
_putimagesã  s    
zFPDF._putimagesc                 C   sº  d|k�r¶|   ¡  | j|d< |  d¡ |  d¡ |  dt|d ƒ ¡ |  dt|d ƒ ¡ |d	 d
kr¦|  dttt|d ƒd ƒd ƒ d t| jd ƒ d ¡ n(|  d|d	  ¡ |d	 dkrÎ|  d¡ |  dt|d ƒ ¡ d|krþ|  d|d  ¡ d|k�r|  d|d  d ¡ d|k�r”t|d tƒ�r”d}tdt|d ƒƒD ]2}|t|d | ƒd t|d | ƒ d 7 }�qN|  d| d ¡ d |k�rº|  d!t| jd ƒ d" ¡ |  d#tt|d ƒƒ d ¡ |  	|d ¡ |  d$¡ d |k�r8d%t|d ƒ }|d |d d&d'|d ||d  d(œ}|  
|¡ |d	 d
k�r¶|   ¡  | j�r\d)�p^d}| j�rxt |d ¡}n|d }|  d*| d# tt|ƒƒ d ¡ |  	|¡ |  d$¡ d S )+Nr¹  r>   z<</Type /XObjectz/Subtype /Imagez/Width rb   z/Height rc   ÚcsÚIndexedz!/ColorSpace [/Indexed /DeviceRGB Úpalr¥   r   rì   r�  z/ColorSpace /Ú
DeviceCMYKz/Decode [1 0 1 0 1 0 1 0]z/BitsPerComponent ÚbpcrÜ   z	/Filter /Údpz/DecodeParms <<r‰  Útrnsr#   r   z/Mask [r…  rº  z/SMask r—  rˆ  r†  z5/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns Ú
DeviceGrayrŸ  )rb   rc   r½  rÁ  rÜ   rÂ  r¹  rƒ  r‡  )rŠ  r>   r®   r{  r  rÆ   rX   r#  rÉ   r�  r»  r‘   rŒ  )rk   rj  rÃ  rÍ   rÂ  rº  rŽ  r¿  r   r   r   r»  ï  sP    



>

0


$
"
zFPDF._putimagec                 C   sP   dd„ | j  ¡ D ƒ}| ¡  |D ]*\}}|  dt|ƒ d t|ƒ d ¡ q d S )Nc                 S   s   g | ]}|d  |d f‘qS ©rÍ   r>   r   r”  r   r   r   r–    s     z(FPDF._putxobjectdict.<locals>.<listcomp>z/Irì   r—  )rF   Úvaluesr£  r®   r{  )rk   rÍ   r«  r>   r   r   r   Ú_putxobjectdict  s    zFPDF._putxobjectdictc                 C   sŠ   |   d¡ |   d¡ dd„ | j ¡ D ƒ}| ¡  |D ]*\}}|   dt|ƒ d t|ƒ d ¡ q4|   d¡ |   d	¡ |  ¡  |   d¡ d S )
Nz-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]z/Font <<c                 S   s   g | ]}|d  |d f‘qS rÅ  r   r”  r   r   r   r–  &  s     z)FPDF._putresourcedict.<locals>.<listcomp>z/Frì   r—  r‰  z/XObject <<)r®   rC   rÆ  r£  r{  rÇ  )rk   rÜ   r«  r>   r   r   r   Ú_putresourcedict#  s    

$

zFPDF._putresourcedictc                 C   sT   |   ¡  |  ¡  t| jƒ| jd< |  d¡ |  d¡ |  ¡  |  d¡ |  d¡ d S )Nr"   z2 0 objr‡  r‰  r†  )r¯  r¼  rÆ   r?   r<   r®   rÈ  r£   r   r   r   Ú_putresources/  s    


zFPDF._putresourcesc              	   C   sâ   |   d|  dt d ¡ ¡ t| dƒr<|   d|  | j¡ ¡ t| dƒr\|   d|  | j¡ ¡ t| dƒr||   d	|  | j¡ ¡ t| d
ƒrœ|   d|  | j¡ ¡ t| dƒr¼|   d|  | j¡ ¡ |   d|  dt	 
¡  d¡ ¡ ¡ d S )Nz
/Producer zPyFPDF z http://pyfpdf.googlecode.com/r’   z/Title r”   z	/Subject r–   z/Author r˜   z
/Keywords rš   z	/Creator z/CreationDate zD:z%Y%m%d%H%M%S)r®   r‹  ÚFPDF_VERSIONr"  r’   r”   r–   r˜   rš   r   ÚnowÚstrftimer£   r   r   r   Ú_putinfo:  s    




zFPDF._putinfoc                 C   s¼   |   d¡ |   d¡ | jdkr*|   d¡ nN| jdkr@|   d¡ n8| jdkrV|   d¡ n"t| jtƒsx|   td	| jd
 ƒ¡ | jdkrŽ|   d¡ n*| jdkr¤|   d¡ n| jdkr¸|   d¡ d S )Nz/Type /Catalogz/Pages 1 0 RrŠ   z/OpenAction [3 0 R /Fit]r9   z/OpenAction [3 0 R /FitH null]r‹   z$/OpenAction [3 0 R /XYZ null null 1]z%/OpenAction [3 0 R /XYZ null null %s]éd   r�   z/PageLayout /SinglePager‰   z/PageLayout /OneColumnrŽ   z/PageLayout /TwoColumnLeft)r®   r�   rX   r   r
   r�   r£   r   r   r   Ú_putcatalogH  s     







zFPDF._putcatalogc                 C   s   |   d| j ¡ d S )Nz%PDF-)r®   rj   r£   r   r   r   Ú
_putheaderZ  s    zFPDF._putheaderc                 C   sP   |   dt| jd ƒ ¡ |   dt| jƒ d ¡ |   dt| jd ƒ d ¡ d S )Nz/Size r   z/Root r—  z/Info )r®   r{  r>   r£   r   r   r   Ú_puttrailer]  s    zFPDF._puttrailerc                 C   s$  |   ¡  |  ¡  |  ¡  |  ¡  |  d¡ |  ¡  |  d¡ |  d¡ |  ¡  |  d¡ |  ¡  |  d¡ |  d¡ t| jƒ}|  d¡ |  dt	| j
d ƒ ¡ |  d¡ td| j
d ƒD ]}|  td| j| ƒ¡ qº|  d	¡ |  d¡ |  ¡  |  d¡ |  d
¡ |  |¡ |  d¡ d| _d S )Nr‡  r‰  r†  Zxrefz0 r   z0000000000 65535 f z%010d 00000 n ÚtrailerZ	startxrefz%%EOFr¥   )rÐ  r�  rÉ  rŠ  r®   rÍ  rÏ  rÆ   r?   r{  r>   rÉ   r
   r<   rÑ  rB   )rk   ÚorÍ   r   r   r   r©   b  s6    














zFPDF._enddocc                 C   sÐ   |  j d7  _ d| j| j < d| _| j| _| j| _d| _|sB| j}n"|d  	¡ }|| jkrdd| j
| j < || jkrÌ|dkr˜| j| _| j| _| j| _| j| _n | j| _| j| _| j| _| j| _| j| j | _|| _d S )Nr   r#   r"   r   r   )r=   r@   rB   rz   r€   r{   rá   rK   r^   r  rA   ra   rZ   r_   r[   r`   r\   rb   r]   rc   r†   r‡   )rk   rl   r   r   r   r­   ƒ  s.    


zFPDF._beginpagec                 C   s
   d| _ d S ©Nr   r¢   r£   r   r   r   r¨      s    zFPDF._endpagec                 C   s8   |  j d7  _ t| jƒ| j| j < |  t| j ƒd ¡ d S )Nr   z 0 obj)r>   rÆ   r?   r<   r®   r{  r£   r   r   r   rŠ  ¤  s    zFPDF._newobjc                 C   sp   | j d }| j d }|  |¡| j| d¡  }td|| j | j||d | j   | j || j | d | j ƒS )Nrü   rý   rì   z%.2f %.2f %.2f %.2f re frÃ   )	rÅ   rÎ   rS   Úcountr
   rV   rc   rÊ   rM   )rk   r€   rá   r<  rü   rý   rb   r   r   r   r;  ª  s    

zFPDF._dounderlinec              	   C   s€  �z"t |dƒ}t d| d¡¡\}}|dks4|dk r>tdƒ‚q|dkrPtdƒ‚q|d	ksx|d
krh|dksx|dkrz|dkrzqt d| d¡¡\}|dkr¤| |d ¡nd}|dkr¸|dksè|dkrÈ|dksè|dkrØ|dksè|dkr|dkrt d|¡\}}}	}
|
dk�r
dn|
dk�rdnd}�q"qW n. tk
�rR   |  d|tt	ƒ ƒf ¡ Y nX | 
d¡ | ¡ }| ¡  |	|||d|d œS )!Nrð   ÚBBr"   r   éÀ   zNo JPEG marker foundéÚ   zNo JPEG SOF marker foundéÈ   éÐ   éÙ   éð   éý   z>Hr#   éÃ   éÅ   éÇ   éÉ   éË   éÍ   éÏ   z>BHHBr¥   Ú	DeviceRGBr„  rÀ  rÄ  ú.Missing or incorrect image file: %s. error: %sr   Z	DCTDecode)rb   rc   r½  rÁ  rÜ   r¹  )r¤   ÚstructÚunpackr1  ÚSyntaxErrorÚunpack_fromÚ	ExceptionrW   r{  r   Úseekrª   )rk   r  rÜ   Z
markerHighZ	markerLowZdataSizer¹  rÁ  ÚheightrÏ   ZlayersÚcolspacer   r   r   re  ±  sR    


ÿÿþþÿÿþþýý 

zFPDF._parsejpgc              	   C   s¬   t d kr|  d¡ zt  |¡}W n, tk
rL   |  d|ttƒ ƒf ¡ Y n\X tjddd�}|j}| 	¡  d|j
krŠ|j||j
d d� n
| |¡ |  |¡}t |¡ |S )NzPIL is required for GIF supportræ  Fz.png)ÚdeleteÚsuffixÚtransparency)rñ  )r   rW   r¤   rë  r{  r   ÚtempfileÚNamedTemporaryFilerú   rª   rj  Úsaverf  r  Úunlink)rk   r  ZimrÜ   Útmprj  r   r   r   rg  Ò  s    




zFPDF._parsegifc              	   C   s  |  d¡s|  d¡rt|ƒ}n
t|dƒ}|s:|  d| ¡ | d¡ d¡}d}ts\| d¡}||krr|  d| ¡ | d	¡ | d	¡ d¡}|d
kr¢|  d| ¡ |  |¡}|  |¡}t| d¡ƒ}|dkrÚ|  d| ¡ t| d¡ƒ}	|	dksø|	d	krþd}
n8|	dk�s|	dk�rd}
n|	dk�r(d}
n|  d| ¡ t| d¡ƒdk�rX|  d| ¡ t| d¡ƒdk�rz|  d| ¡ t| d¡ƒdk�rœ|  d| ¡ | d	¡ d}|
dk�r¾|d7 }n|d7 }|dt	|ƒ d t	|ƒ d 7 }d}d}t�rút
ƒ nt	ƒ }d}|d k�r&|  |¡}| d	¡ d¡}|dk�rH| |¡}| d	¡ nÚ|d k�rà| |¡}|	dk�rztt|ddƒƒg}nZ|	dk�r´tt|ddƒƒtt|ddƒƒtt|d!dƒƒg}n | d" d¡¡}|d#k�rÔ|g}| d	¡ nB|d$k�r|| |¡7 }| d	¡ n|d%k�r�q&n| |d	 ¡ �q|
dk�rD|�sD|  d&| ¡ | ¡  |||
|d'|||d(œ}|	d	k�rt |¡}tdƒ}tdƒ}|	d	k�r:d| }t|ƒD ]–}d| | }|t|| ƒ7 }|t|| ƒ7 }t||d |ƒ}tjd) d*¡tjd+�}tjd, d*¡tjd+�}|| d-d.„ |¡7 }|| d/d.„ |¡7 }�q n¨d	| }t|ƒD ]–}d| | }|t|| ƒ7 }|t|| ƒ7 }t||d |ƒ}tjd0 d*¡tjd+�}tjd1 d*¡tjd+�}|| d2d.„ |¡7 }|| d3d.„ |¡7 }�qJ~t |¡}t |¡|d4< | jd5k �rd5| _||d6< |S )7Nzhttp://zhttps://rð   zCan't open image file: rŸ  ru  u	   Â‰PNG

zNot a PNG file: r„  ZIHDRzIncorrect PNG file: r   z16-bit depth not supported: r   rÄ  r"   r“  rå  r¥   r¾  zUnknown color type: zUnknown compression method: zUnknown filter method: zInterlacing not supported: z/Predictor 15 /Colors Ú3Ú1z /BitsPerComponent z
 /Columns r#   ZPLTEZtRNSé   rž  ry   ZIDATZIENDzMissing palette in ZFlateDecode)rb   rc   r½  rÁ  rÜ   rÂ  r¿  rÃ  z(.).Úascii)r  z.(.)c                 S   s
   |   d¡S rÔ  ©Úgroup©Úmr   r   r   Ú<lambda>H  ó    z FPDF._parsepng.<locals>.<lambda>c                 S   s
   |   d¡S rÔ  rû  rý  r   r   r   rÿ  I  r   z(...).z...(.)c                 S   s
   |   d¡S rÔ  rû  rý  r   r   r   rÿ  T  r   c                 S   s
   |   d¡S rÔ  rû  rý  r   r   r   rÿ  U  r   rº  z1.4r¹  )Ú
startswithr   r¤   rW   r1  r|  r   Ú	_freadintrÈ   r{  Úbytesr	   Úfindrw  rª   rŒ  Ú
decompressr   rÉ   r  r0  ÚDOTALLr  r‘   rj   )rk   rú   rÜ   ÚmagicÚ	signatureÚchunkrb   rc   rÁ  Úctrî  rÂ  r¿  rÃ  r¹  r>   rû   rT  ri  rj  ÚcolorÚalphaÚlengthrÍ   rÖ   Zre_cZre_ar   r   r   rf  ç  sÌ    

 







 







0






zFPDF._parsepngc                 C   s,   zt  d| d¡¡d W S    Y d S X d S )Nz>Ir„  r   )rç  rè  r1  )rk   rÜ   r   r   r   r  ^  s    zFPDF._freadintc                 C   s   d|   |¡ d S )NrL  rM  )r9  ©rk   rË   r   r   r   r‹  e  s    zFPDF._textstringc                 C   s$   |  dd¡  dd¡  dd¡  dd¡S )	Nú\z\\rM  z\)rL  z\(rW  z\r)r  r  r   r   r   r9  i  s    zFPDF._escapec                 C   s"   |   d¡ |   |¡ |   d¡ d S )NÚstreamZ	endstream)r®   r  r   r   r   r�  m  s    

zFPDF._putstreamc                 C   s€   t rt|tƒr| d¡}n,t s4t|tƒr4| d¡}nt|tƒsFt|ƒ}| jdkrj| j	| j
  |d 7  < n|  j|d 7  _d S )Nru  r"   rX  )r   rX   r  r|  r   rw  r   r{  rB   r@   r=   r?   r  r   r   r   r®   r  s    

z	FPDF._outr}  r8   c                 C   sJ  |d }|}dddddddd	d
ddddœ}|   d¡ |}	t|	ƒd dkrPd|	 }	d|	 ¡  d }	tdt|	ƒdƒD ]Ô}
|	|
 }|	|
d  }|| ¡ kr td| ƒ‚|| ¡ kr¸td| ƒ‚d}tdt|| ƒƒD ] }||| | || |  7 }qÎtdt|ƒƒD ]D}|| dk�r|}n|}|d dk�r:|  ||||d¡ ||7 }qþqpdS )z/Barcode I2of5 (numeric), adds a 0 if odd lenghtç      @ZnnwwnZwnnnwZnwnnwZwwnnnZnnwnwZwnwnnZnwwnnZnnnwwZwnnwnZnwnwnÚnnZwn)Ú0rø  rœ  r÷  Ú4Ú5Ú6Ú7Ú8Ú9ÚAÚZr   r"   r  ZAAZZAr   zChar "%s" invalid for I25: r#   r>   rÛ   N)r¾   rÆ   rY   rÉ   Úkeysr    rã   )rk   r<  r€   rá   rb   rc   ZnarrowZwideZbar_charÚcoderÍ   Zchar_barZ
char_spaceÚseqrË   Úbarrf   r   r   r   Úinterleaved2of5€  sD          þ
zFPDF.interleaved2of5ç      ø?ç      @c              -   C   sì   ||d dœ}ddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/œ,}|   d0¡ | ¡ D ]h}||kr–td1| ƒ‚t|| ƒD ]6\}	}
|	d2 d0krÌ|  ||||
 |d3¡ |||
 7 }q¢||d4 7 }q~d5S )6zBarcode 3of9r  )rb   r>   Z	nnnwwnwnnZ	wnnwnnnnwZ	nnwwnnnnwZ	wnwwnnnnnZ	nnnwwnnnwZ	wnnwwnnnnZ	nnwwwnnnnZ	nnnwnnwnwZ	wnnwnnwnnZ	nnwwnnwnnZ	wnnnnwnnwZ	nnwnnwnnwZ	wnwnnwnnnZ	nnnnwwnnwZ	wnnnwwnnnZ	nnwnwwnnnZ	nnnnnwwnwZ	wnnnnwwnnZ	nnwnnwwnnZ	nnnnwwwnnZ	wnnnnnnwwZ	nnwnnnnwwZ	wnwnnnnwnZ	nnnnwnnwwZ	wnnnwnnwnZ	nnwnwnnwnZ	nnnnnnwwwZ	wnnnnnwwnZ	nnwnnnwwnZ	nnnnwnwwnZ	wwnnnnnnwZ	nwwnnnnnwZ	wwwnnnnnnZ	nwnnwnnnwZ	wwnnwnnnnZ	nwwnwnnnnZ	nwnnnnwnwZ	wwnnnnwnnZ	nwwnnnwnnZ	nwnnwnwnnZ	nwnwnwnnnZ	nwnwnnnwnZ	nwnnnwnwnZ	nnnwnwnwn),r  rø  rœ  r÷  r  r  r  r  r  r  r  rß   rK  rt  ÚErÛ   ÚGÚHrs  rV  ÚKr7   ÚMÚNÚOr   r?  rJ  rà   rI  r«   ÚVÚWÚXÚYr  ú-rb  rì   Ú*ú$r�  ú+ú%r   zInvalid char "%s" for Code39r"   rÛ   r>   N)r¾   r  r    Ú	enumeraterã   )rk   r<  r€   rá   rb   rc   ÚdimÚcharsrD  rÍ   r)  r   r   r   Úcode39±  sn                                 ñ
zFPDF.code39)r   r    r!   )ry   )r   )r‰   )rœ   )r#   )ry   ry   )ry   ry   )ry   ry   )FF)r   r   )r#   )r#   )r#   r#   F)r#   r   )r   ry   )r#   )NN)r   r#   r   r   r#   r   r#   )r#   r   rV  r   F)r#   r#   )NNr   r   r#   r#   )r#   )r#   r#   )r}  r8   )r!  r"  )VÚ__name__Ú
__module__Ú__qualname__Ú__doc__rp   rx   rd   r‚   rƒ   r„   rg   rh   ri   r“   r•   r—   r™   r›   rŸ   rW   r¤   rª   r¦   r°   r§   r¶   r»   r¾   r¿   rÎ   rÐ   rÖ   rÙ   rÚ   rã   rë   r+  r¯   r2  r3  r5  r4  r>  rE  rF  rU  r`  ra  rm  rP  rn  ro  rp  rq  rr  ry  rÄ   r;   r‚  r�  r¯  r¦  r¼  r»  rÇ  rÈ  rÉ  rÍ  rÏ  rÐ  rÑ  r©   r­   r¨   rŠ  r;  re  rg  rf  r  r‹  r9  r�  r®   r   r6  r   r   r   r   r   )   sÂ   
c





<
	





$
y
1	
\qCB
"	I Uh.!!w0r   )-Ú
__future__r   r   Ú	functoolsr   rå   r   r  ÚsysrŒ  rç  r  rò  Zttfontsr   rC   r   Úphpr	   r
   r   r   r   Zpy3kr   r   r   r   r   r   r   r   r   rÊ  r  r  ÚdirnameÚ__file__r  r  r  r  r   Úobjectr   r   r   r   r   Ú<module>   s    8,