U
    †­Th' ã                   @   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   úF/home/ubuntu/graampay/app_env/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„ ZDdd‘„ 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 gÚCourierzCourier-BoldzCourier-ObliquezCourier-BoldObliqueÚ	HelveticazHelvetica-BoldzHelvetica-ObliquezHelvetica-BoldObliquezTimes-Romanz
Times-BoldzTimes-ItaliczTimes-BoldItalicÚSymbolÚZapfDingbats)ÚcourierÚcourierBÚcourierIÚ	courierBIÚ	helveticaÚ
helveticaBÚ
helveticaIÚhelveticaBIÚtimesÚtimesBÚtimesIÚtimesBIÚsymbolÚzapfdingbatsÚptr   r    g¬ÕjµZ­@Úcmg‹Åb±X<@Úing      R@zIncorrect unit: Úa3)ç…ëQ¸OŠ@g33333š’@Úa4)ç
×£p=š‚@r=   Úa5)g×£p=
Oz@r?   Úletter)éd  i  Úlegal)rB   ið  zUnknown page format: ÚpÚportraitr   ÚlÚ	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_footerÚ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)rN   Úgetri   )r}   ÚargsÚkwargs©Úfnr   r   Úwrapper‘   s    z FPDF.check_page.<locals>.wrapperr   )rˆ   r‰   r   r‡   r   Ú
check_page   s    zFPDF.check_pageéÿÿÿÿc                 C   s"   || _ || _|dkr|}|| _dS )zSet left, top and right marginsr‹   N)Úl_marginÚt_marginÚr_margin)r}   ÚleftÚtopÚrightr   r   r   rv   ™   s
    zFPDF.set_marginsc                 C   s$   || _ | jdkr | j|k r || _dS )zSet left marginr   N)rŒ   rN   Úx©r}   r   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_marginru   Úpage_break_trigger)r}   Úautor   r   r   r   ry   ¯   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.ÚfullpagerJ   ÚrealÚdefaultzIncorrect zoom display mode: Úsingler›   ÚtwozIncorrect layout display mode: N)rj   r   Ú	zoom_moderi   Úlayout_mode)r}   ÚzoomÚlayoutr   r   r   rz   µ   s    * zFPDF.set_display_modec                 C   s
   || _ dS )zSet page compressionN)Úcompress)r}   r¥   r   r   r   r{   Ä   s    zFPDF.set_compressionc                 C   s
   || _ dS )zTitle of documentN)Útitle)r}   r¦   r   r   r   Ú	set_titleÈ   s    zFPDF.set_titlec                 C   s
   || _ dS )zSubject of documentN)Úsubject)r}   r¨   r   r   r   Úset_subjectÌ   s    zFPDF.set_subjectc                 C   s
   || _ dS )zAuthor of documentN)Úauthor)r}   rª   r   r   r   Ú
set_authorÐ   s    zFPDF.set_authorc                 C   s
   || _ dS )zKeywords of documentN)Úkeywords)r}   r¬   r   r   r   Úset_keywordsÔ   s    zFPDF.set_keywordsc                 C   s
   || _ dS )zCreator of documentN)Úcreator)r}   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)r}   Ú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)r}   Úmsgr   r   r   ri   á   s    z
FPDF.errorc                 C   s
   d| _ dS )zBegin documentr   N©rS   ©r}   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   )rS   rN   Úadd_pagerZ   Ú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)rS   r¸   r]   r`   r^   r_   rx   ra   rb   rc   rd   rN   rZ   r»   r¼   Ú
_beginpageÚ_outr
   rh   Úset_fontÚheader)
r}   r~   ÚfamilyÚstyleÚsizeÚlwÚdcÚfcÚ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)rN   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   r‹   z%.3f Gç     ào@z%.3f %.3f %.3f RGN)r
   ra   rN   rÂ   ©r}   Ú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   r‹   ú%.3f grÎ   ú%.3f %.3f %.3f rgN)r
   rb   rc   rd   rN   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   r‹   rÓ   rÎ   rÔ   N)r
   rc   rb   rd   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Úranger„   Ú	font_size)r}   Úsr×   rt   rF   Ú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)rx   rN   rÂ   r
   rh   )r}   Ú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
   rh   ru   )r}   Ú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
   rh   rÂ   )r}   Ú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í   )r}   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è   )r}   r’   Úyrt   ru   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
   rh   ru   )r}   r’   rø   rt   ru   rÆ   rù   ÚcxÚcyÚrxÚryÚlxÚ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)9rk   ÚreplaceÚupperrT   ÚosÚpathÚexistsÚFPDF_FONT_DIRÚjoinÚSYSTEM_TTFONTSr´   ÚFPDF_CACHE_MODEÚsplitextÚFPDF_CACHE_DIRr   r¸   r¾   r   Úloadr   Ú
getMetricsÚintÚroundÚascentÚdescentÚ	capHeightÚflagsÚbboxÚitalicAngleÚstemVÚdefaultWidthÚreÚsubÚfullNameÚunderlinePositionÚunderlineThicknessÚstatÚst_sizeÚ
charWidthsÚdumpÚIOErrorr   ÚerrnoÚEACCESÚhasattrÚlistrà   rÝ   rU   Úupdater   rV   r„   r  r  Úsize1Úsize2)r}   rÅ   rÆ   ÚfnameÚunir  Úttffilenamer  r  ro   Ú	font_dictÚttfrØ   ÚsbarrÚ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/   r7   r8   r¿   r   r   r  r  Nr3   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ä   )rk   r]   r%  r`   r$  r_   r^   rT   rg   r   r&  r'  r*  r)  rV  Úcompiler¸   Úreadri   rÝ   rh   rá   rÜ   rÞ   rN   rÂ   r
   )r}   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   rY  rä   )r_   rh   rá   rN   rÂ   r
   rÜ   )r}   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Ý   rY   )r}   rO   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 linkr‹   N)rø   rN   rY   )r}   Úlinkrø   rN   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)rN   rX   rh   rr   )r}   r’   rø   rt   ru   r^  r   r   r   r^  }  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
   rh   ru   r`   Ú_dounderlinerd   rc   rÂ   )r}   r’   rø   ÚtxtÚtxt2rM  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ø   rf   rÂ   rü   ÚpiÚcosÚsinrh   ru   r
   )r}   rf   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 rH   z%.2f %.2f m %.2f %.2f l S ÚTÚRÚCrû   ra  r  r  FzBT 0 Tw %.2F %.2F Td [g      à?g333333Ó?ú(ú)z%s iè  z%d(%s) z] TJz ETr`  rb  N)%rÛ   rh   rø   r™   rZ   rp  r’   re   rÂ   rº   rs   r
   rt   rŽ   ru   rj   r   rw   rå   rd   rc   rÞ   r   rÜ   rd  rc  r   rá   ÚsplitrÝ   rà   r_   r`   re  r^  r\   rŒ   )r}   rt   ru   rf  ÚborderÚlnÚalignÚfillr^  rh   r’   re   râ   rù   rø   ÚdxrM  ÚspaceÚtÚnumträ   ÚtxÚadjrg  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   Ú
ÚLTRBÚLRTÚLRrH   rt  rs  r‹   rq  r  r„  rr  rö   )rÛ   rÜ   rt   rŽ   r’   rw   rá   r$  rÝ   re   rÂ   rƒ  r	   rd  rÞ   rå   r„   r
   rh   rŒ   )r}   rt   ru   rf  ry  r{  r|  rƒ   Úretr×   Úwmaxrâ   rT  r   Úb2Úseprä   ÚjrF   ÚnsÚnlrn  Ú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Ú   r…  r#   r‹   r   r   r†  r  N)rÛ   rÜ   rt   rŽ   r’   rw   rá   r$  rÝ   rƒ  r	   rŒ   rÞ   rå   r„   rø   )r}   ru   rf  r^  r×   rt   r‹  râ   rT  r  rä   rŽ  rF   r  rn  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   ÚjpgÚjpegÚpngFTÚ_parsezUnsupported image type: rä   r   rt   ru   Nz&q %.2f 0 0 %.2f %.2f %.2f cm /I%d Do Q)rW   Úrfindri   r	   rk   Ú	_parsejpgÚ	_parsepngÚ	_parsegifrG  ÚgetattrrÝ   rh   rø   r™   rZ   rp  r’   rº   rs   rÂ   r
   ru   r^  )r}   r  r’   rø   rt   ru   r  r^  ÚposÚinfoÚsucceed_parsingÚ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)rŒ   r’   rj   r   rø   r\   )r}   ru   r   r   r   rz     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’   rt   )r}   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)rŒ   r’   rø   ru   )r}   rø   r   r   r   Úset_y  s    z
FPDF.set_yc                 C   s   |   |¡ |  |¡ dS )zSet x and y positionsN)r¨  r¦  )r}   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: )
rS   r¾   r%  ÚprintrP   r¸   ri   r   r“  Úencode)r}   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Úutf8r¬  )rÞ   rj   Ústrr   Údecoder   r®  )r}   rf  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   ru  )r
   ÚlocaleÚ	setlocaleÚ
LC_NUMERIC)r}   rµ  r   r   r   rL   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]>>ú]rK   z7/Group <</Type /Group /S /Transparency /CS /DeviceRGB>>z
/Contents z 0 R>>Úendobjr¬  ú<<ú/Length ú>>z1 0 objz<</Type /Pagesz/Kids [z 0 R z/Count )rN   rG  r   r±   r²  rà   rQ   r$  rp   rl   rm   r¥   Ú_newobjrÂ   rR   r
   rX   rj   r   Ú_textstringrY   rh   r|   rO   r   r®  ÚzlibrÝ   Ú
_putstreamrP   rM   )r}   rT  r²   rÐ   rO   rq   rr   ÚfilterÚannotsÚplrú   rF   ru   rD   Ú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  rO   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  rW  z<</Type /Fontz/BaseFont /z/Subtype /Type1r)   r*   z/Encoding /WinAnsiEncodingÚ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  Ú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 ú é   éÿ   r¬  Ú_putzUnsupported font type: )"rO   rV   rÁ  rÂ   rU   Úitemsr¸   r¹  ri   r[  r¾   r	   rß   r²  rÝ   rÄ  rT   Úsortrà   r„   Úchrr   Ú
makeSubsetrÃ  r¥   ÚcodeToGlyphÚ_putTTfontwidthsÚmaxUnir*  r   r®  rk   Úmethod_existsr£  )r}   Únfr   r  rŸ  r   ró   Ú
compressedrÄ   ÚflistÚidxrh   r  r×   râ   rä   r!  rP  Úfontnamer  ÚttfontstreamÚ
ttfontsizeÚ
fontstreamrá  ÚtoUniÚkdÚvÚcidtogidmapÚccÚglyphr£  r   r   r   Ú	_putfonts§  s@   


"












 


$


































zFPDF._putfontsc              	   C   s¶  |d r"t j |d ¡d d }nd }|rt j |¡rt|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rd}|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Ê  r‹   Fr   r  r×   iÿÿ  rÛ  r  ÚdwTr¹   z	 %s %s %sz %s [ %s ]
r  c                 S   s   g | ]}t t|ƒƒ‘qS r   )r²  r1  )rÎ  ru   r   r   r   rÏ  à  s     z)FPDF._putTTfontwidths.<locals>.<listcomp>z/W [%s]r#   )r&  r'  r-  r(  r¸   r¾   r   r/  rà   rC  rD  r   rE  rF  Ú
setdefaultrd  ÚpopÚsortedrÝ  rÝ   Úsetr*  rÂ   )r}   r   rã  Ú
cw127fnamero   rO  rô  Úrange_rõ  rö  r÷  rø  ÚstartcidÚcwlenÚcidræ   ÚprevkÚnextkÚprevintrh   re   Úcwsrt   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¥   rW   rÝ  rÞ  Ú	_putimage)r}   rÅ  rä   rè  rŸ  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  rO   z<</Type /XObjectz/Subtype /Imagez/Width rt   z/Height ru   Ú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Ú  )rt   ru   r  r  ró   r  r  rº  r¾  )rÁ  rO   rÂ   r²  r1  rÝ   rj   rH  rà   rÄ  r	  r¥   rÃ  )r}   rŸ  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ä   rO   r   rÍ  r   r   r   rÏ    s     z(FPDF._putxobjectdict.<locals>.<listcomp>z/Ir  rÑ  )rW   ÚvaluesrÞ  rÂ   r²  )r}   rä   rè  rO   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Â   rT   r  rÞ  r²  r  )r}   ró   rè  rO   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Ý   rP   rM   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_VERSIONrG  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]rJ   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¡   rj   r   r
   r¢   r·   r   r   r   Ú_putcatalogH  s     







zFPDF._putcatalogc                 C   s   |   d| j ¡ d S )Nz%PDF-)rÂ   r|   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²  rO   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½  Úxrefz0 r   z0000000000 65535 f z%010d 00000 n ÚtrailerÚ	startxrefz%%EOFr¹   )r  rÉ  r  rÁ  rÂ   r  r  rÝ   rP   r²  rO   rà   r
   rM   r  rS   )r}   Ú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   )rN   rQ   rS   rŒ   r’   r   rø   r]   rp   r%  rR   rs   rl   rq   rm   rr   rn   rt   ro   ru   r˜   r™   )r}   r~   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)rO   rÝ   rP   rM   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å   re   Úcountr
   rh   ru   rá   r_   )r}   r’   rø   rf  r  r  rt   r   r   r   re  ª  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   Ú	DCTDecode)rt   ru   r  r  ró   r  )r¸   ÚstructÚunpackr[  ÚSyntaxErrorÚunpack_fromÚ	Exceptionri   r²  r   Úseekr¾   )r}   r!  ró   Ú
markerHighÚ	markerLowÚdataSizer  r  Úheightræ   ÚlayersÚcolspacer   r   r   rš  ±  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 supportr6  Fz.png)ÚdeleteÚsuffixÚtransparency)rF  )r   ri   r¸   r<  r²  r   ÚtempfileÚNamedTemporaryFiler  r¾   rŸ  Úsaver›  r&  Úunlink)r}   r!  Úimró   ÚtmprŸ  r   r   r   rœ  Ò  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Ú  r¬  u	   Â‰PNG

zNot a PNG file: r»  ÚIHDRzIncorrect PNG file: r   z16-bit depth not supported: r   r  r"   rÌ  r5  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#   ÚPLTEÚtRNSé   rÙ  r‹   ÚIDATÚIENDzMissing palette in ÚFlateDecode)rt   ru   r  r  ró   r  r  r  z(.).Úascii)r6  z.(.)c                 S   s
   |   d¡S r$  ©Úgroup©Úmr   r   r   Ú<lambda>H  ó    z FPDF._parsepng.<locals>.<lambda>c                 S   s
   |   d¡S r$  rW  rY  r   r   r   r[  I  r\  z(...).z...(.)c                 S   s
   |   d¡S r$  rW  rY  r   r   r   r[  T  r\  c                 S   s
   |   d¡S r$  rW  rY  r   r   r   r[  U  r\  r  z1.4r  )Ú
startswithr   r¸   ri   r[  r³  r   Ú	_freadintrß   r²  Úbytesr	   Úfindr®  r¾   rÃ  Ú
decompressr   rà   r;  rZ  ÚDOTALLr<  r¥   r|   )r}   r  ró   ÚmagicÚ	signatureÚchunkrt   ru   r  ÚctrC  r  r  r  r  rO   r  r  rž  rŸ  ÚcolorÚalphaÚlengthrä   rí   Úre_cÚre_ar   r   r   r›  ç  sÌ    

 







 







0






zFPDF._parsepngc                 C   s,   zt  d| d¡¡d W S    Y d S X d S )Nz>Ir»  r   )r8  r9  r[  )r}   ró   r   r   r   r^  ^  s    zFPDF._freadintc                 C   s   d|   |¡ d S )Nrv  rw  )rc  ©r}   râ   r   r   r   rÂ  e  s    zFPDF._textstringc                 C   s$   |  dd¡  dd¡  dd¡  dd¡S )	Nú\z\\rw  z\)rv  z\(r…  z\r)r$  rl  r   r   r   rc  i  s    zFPDF._escapec                 C   s"   |   d¡ |   |¡ |   d¡ d S )NÚstreamÚ	endstream)rÂ   rl  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 )Nr¬  r"   r†  )r   rj   r_  r³  r   r®  r   r²  rS   rQ   rN   rP   rl  r   r   r   rÂ   r  s    

z	FPDF._outr´  rI   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ç      @ÚnnwwnÚwnnnwÚnwnnwÚwwnnnÚnnwnwÚwnwnnÚnwwnnÚnnnwwÚwnnwnÚnwnwnÚnnÚwn)Ú0rO  r×  rN  Ú4Ú5Ú6Ú7Ú8Ú9ÚAÚZr   r"   r}  ÚAAÚZAr   zChar "%s" invalid for I25: r#   rO   rò   N)rÕ   rÝ   rk   rà   Úkeysr´   rú   )r}   rf  r’   rø   rt   ru   ÚnarrowÚwideÚbar_charÚcoderä   Úchar_barÚ
char_spaceÚseqrâ   Úbarrx   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 3of9rp  )rt   rO   Ú	nnnwwnwnnÚ	wnnwnnnnwÚ	nnwwnnnnwÚ	wnwwnnnnnÚ	nnnwwnnnwÚ	wnnwwnnnnÚ	nnwwwnnnnÚ	nnnwnnwnwÚ	wnnwnnwnnÚ	nnwwnnwnnÚ	wnnnnwnnwÚ	nnwnnwnnwÚ	wnwnnwnnnÚ	nnnnwwnnwÚ	wnnnwwnnnÚ	nnwnwwnnnÚ	nnnnnwwnwÚ	wnnnnwwnnÚ	nnwnnwwnnÚ	nnnnwwwnnÚ	wnnnnnnwwÚ	nnwnnnnwwÚ	wnwnnnnwnÚ	nnnnwnnwwÚ	wnnnwnnwnÚ	nnwnwnnwnÚ	nnnnnnwwwÚ	wnnnnnwwnÚ	nnwnnnwwnÚ	nnnnwnwwnÚ	wwnnnnnnwÚ	nwwnnnnnwÚ	wwwnnnnnnÚ	nwnnwnnnwÚ	wwnnwnnnnÚ	nwwnwnnnnÚ	nwnnnnwnwÚ	wwnnnnwnnÚ	nwwnnnwnnÚ	nwnnwnwnnÚ	nwnwnwnnnÚ	nwnwnnnwnÚ	nwnnnwnwnÚ	nnnwnwnwn),r}  rO  r×  rN  r~  r  r€  r  r‚  rƒ  r„  rö   ru  r«  ÚErò   ÚGÚHrª  r„  ÚKrH   ÚMÚNÚOr   ri  rt  r÷   rs  r¿   ÚVÚWÚXÚYr…  ú-r”  r  Ú*ú$r¸  ú+ú%r   zInvalid char "%s" for Code39r"   rò   rO   N)rÕ   r%  r´   Ú	enumeraterú   )r}   rf  r’   rø   rt   ru   ÚdimÚcharsrn  rä   rS  r   r   r   Úcode39±  sn                                 ñ
zFPDF.code39)r   r    r!   )r‹   )r   )r›   )r°   )r#   )r‹   r‹   )r‹   r‹   )r‹   r‹   )FF)r   r   )r#   )r#   )r#   r#   F)r#   r   )r   r‹   )r#   )NN)r   r#   r   r   r#   r   r#   )r#   r   r„  r   F)r#   r#   )NNr   r   r#   r#   )r#   )r#   r#   )r´  rI   )r’  r“  )VÚ__name__Ú
__module__Ú__qualname__Ú__doc__r‚   rŠ   rv   r”   r•   r–   ry   rz   r{   r§   r©   r«   r­   r¯   r³   ri   r¸   r¾   rº   rÄ   r»   rÍ   rÒ   rÕ   rÖ   rå   rç   rí   rð   rñ   rú   r  rU  rÃ   r\  r]  r_  r^  rh  ro  rp  rƒ  r’  r“  r¤  rz  r¥  r¦  r§  r¨  r©  r°  rÛ   rL   r¹  rÉ  ró  râ  r
  r	  r  r  r  r  r  r  r  r½   rÁ   r¼   rÁ  re  rš  rœ  r›  r^  rÂ  rc  rÄ  rÂ   r‘  rÓ  r   r   r   r   r   )   sÂ   
c

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





$
y
1	
\qCB
"	I Uh.!!w0r   )-Ú
__future__r   r   Ú	functoolsr   rü   rE  r&  ÚsysrÃ  r8  r;  rG  Úttfontsr   rT   r   Úphpr	   r
   r   r   r   Ú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,