o
    6׾g                     @  s4  d dl m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 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ zd dlmZ W n eym   d dlmZ Y nw d dl m!Z!m"Z"m#Z# d dl$m%Z%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z? erd dl@mAZA d dl:mBZB d e_CeDeEZFdZGdZHdZIdZJd0ddZKeKe!_Kd0ddZLd1d!d"ZMG d#d$ d$e9jNZOG d%d& d&e9jPZQG d'd( d(ZRG d)d* d*ZSd2d,d-ZTG d.d/ d/ZUdS )3    )annotationsN)Path)TYPE_CHECKINGCallable)rl_settings)TA_LEFT)
addMapping)A4)ParagraphStyle)
pdfmetrics)TTFont)Frame)ShowBoundaryValue)ParaFragps2tttt2ps)defaultparser)getFilepisaFileObject)	TableData)arabic_format
copy_attrsfrag_text_language_checkget_default_asian_fontgetColor	getCoordsgetFloatgetFrameDimensionsgetSizeset_asian_fonts	set_value)css)PmlPageCountPmlPageTemplatePmlParagraphPmlParagraphAndImagePmlTableOfContents)Flowable)PmlImage   g?    returnr   c                 K  s<   t di | j}|r|j}|| d|v r|d= d |_|S )NcbDefn )r   __dict__update
bulletText)selfkwargsndr.   r.   [/var/www/html/backend_erp/backend_erp_env/lib/python3.10/site-packages/xhtml2pdf/context.pycloneP   s   
r7   c                 C  s   t  }t|dd t|dd  t|dd d|_d|_t| j\|_|_|_| j|_| j|_d|_	d	|_
t|_d
|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_d|_d|_d|_|S )N)subsuperrise	underlinestrikegreekleadingleadingSpacespaceBefore
spaceAfter
leftIndentrightIndentfirstLineIndentborderPaddingpaddingLeftpaddingRight
paddingToppaddingBottombulletIndentinsideStaticFrameoutlineLevelr   )	backColorvAlignlinkborderStyleborderColorlistStyleTypelistStyleImagewordWrapheightwidthr1   )
pageNumber	pageCountoutlineoutlineOpenkeepWithNextrtlF zTimes-Romannormalz150%   	Helveticag      ?)r   r!   textfontNamer   bolditalicfontSize	textColorletterSpacingleadingSourcer   	alignmentborderWidthborderLeftWidthrQ   borderLeftColorrP   borderLeftStyleborderRightWidthborderRightColorborderRightStyleborderTopWidthborderTopColorborderTopStyleborderBottomWidthborderBottomColorborderBottomStyle
whiteSpacebulletFontNamezoom)stylefragr.   r.   r6   getParaFrag_   sR   r|   strc                 C  s&   t  | }|jr
| S tt| j S N)urlparseschemer}   r   parentresolve)pathpartsr.   r.   r6   
getDirName   s   
r   c                   @  sf   e Zd ZU ded< d#ddZddd	d
d$ddZed%d&ddZed'ddZd(dd Z	d)d!d"Z
dS )*pisaCSSBuilderpisaContextcr,   tuple[dict, dict]c                 C  s  |  | dg|}tt|d  }d|vri i fS |d }t|dd }|dv }|s>|dkr>t	| j
	d| t|d	d
 dv }t|d tr[dd |d D }n|d g}|D ]}	| j
j|	| j
jjd}
|
r|
 s| j
j||
||d qbi i fS )zEmbed fonts.*r   srczfont-familyzfont-weightr^   )rc   bolder500600700800900z)@fontface, unknown value font-weight '%s'z
font-styler]   )rd   obliquec                 S  s   g | ]	}t |tr|qS r.   )
isinstancer}   ).0partr.   r.   r6   
<listcomp>   s    z-pisaCSSBuilder.atFontFace.<locals>.<listcomp>relative)rc   rd   )rulesetselectornextitervaluesr}   getlowerlogwarningr   r   listr   	cssParserrootPathnotFoundloadFont)r2   declarationsresultdatanamesfweightrc   rd   fontsfontr   r.   r.   r6   
atFontFace   s*   
zpisaCSSBuilder.atFontFaceFN)r   r   firstbordersizenamer}   r   dictr   boolr   tuple[float, float]Dtuple[str, str | None, str | None, float, float, float, float, dict]c                C  s   | j }|sd|  }|ddr|d |d f}t||d |d \}}}	}
|r7|d |d||||	|
|fS ||dd |d||||	|
|fS )Nz-pdf-frame-%dis_landscapeFr_   r   z-pdf-frame-borderz-pdf-frame-content)r   UIDr   r   )r2   r   r   r   r   r   r   xywhr.   r.   r6   _pisaAddFrame   s"   	

zpisaCSSBuilder._pisaAddFramefuncCallable | Nonec                 C  s^   |sdd }t |ttfr#|D ]}|| v r|| |   S |  S d S || v r-|| | S |S )Nc                 S  s   | S r~   r.   )r   r.   r.   r6   r     s   z)pisaCSSBuilder._getFromData.<locals>.func)r   r   tuple)r   attrr   r   ar.   r.   r6   _getFromData   s    zpisaCSSBuilder._getFromDatac                 C  s   |  d}|  d}|  d}|  d}dt|  ddi}|r.t|d t|d g|d	< |r6t||d
< |r>t||d< |rFt||d< |S )Nzbackground-object-positionzbackground-heightzbackground-widthzbackground-opacitystepzbackground-page-stepr_   r   object_positionrU   rV   opacity)r   r   r   )r   r   rU   rV   r   devr.   r.   r6   get_background_context  s    





z%pisaCSSBuilder.get_background_context
pseudopage
str | NoneisLandscapec          #      C  sj  | j }|pd}||jv rt| j d| | |ddt}| |ddt}| |ddt}	| |ddt}
| |dd t}| |d	dt}d
D ]}||v r_|j| j	||d||j
d  nqHg }g }|jD ]\}}}}}}}}| |d|t}| |d|t}| |d|	t}| |d|
t}| |d|t}| |d	|t}|s|rtt|d}nt||d}|rt||j
d |j
d \}}}}t|||||j
\}}}}|dks|dkrt| j d t||||||||||d
}|r
g |_|g|j|g |j|< || qg|| qg|dd } | |}!| r)| j j| | j jjd} |st|d | j	||d||j
d\}}}}}}}}t|||||j
\}}}}|dks^|dkrft|d |sl|rpt }nt||d}|t|||||||	|
||d
 t|||j
d}"||"_| |"_|j|"_|!|"_|r|"j|"_|"|j|< d |_g |_g |_i i fS )Nbodyz&template '%s' has already been definedzpadding-topr   zpadding-leftzpadding-rightzpadding-bottom)zborder-top-colorzborder-bottom-colorzborder-left-colorzborder-right-color)zborder-top-widthzborder-bottom-widthzborder-left-widthzborder-right-width)

margin-topmargin-leftmargin-rightmargin-bottomtopleftrightbottomrV   rU   Tr   )rV   )colorrV   r_   z<Negative width or height of frame. Check @frame definitions.)idleftPaddingrightPaddingbottomPadding
topPaddingshowBoundaryzbackground-imager   zCmissing explicit frame definition for content or just static framesz;Negative width or height of frame. Check @page definitions.)r   framespagesize) r   templateListr   r   r   r   r   	frameListappendr   pageSizer   intr   r   r   pisaStaticStoryframeStaticr   r   r   r   r   r$   pisaStaticListpisaBackgroundpisaBackgroundListbackgroundContext	LANDSCAPEpageorientationtemplateframeStaticList)#r2   r   r   r   r   
pageBorderr   padding_toppadding_leftpadding_rightpadding_bottomborder_colorborder_widthpropr   
staticListfnamestaticr   r   r   r   r   fdatafpadding_topfpadding_leftfpadding_rightfpadding_bottomfborder_colorfborder_widthframe_borderframe
backgroundbackground_contextptr.   r.   r6   atPage!  s  	
	 

zpisaCSSBuilder.atPagec                 C  sz   |r9|  | dg|}|d }|r9z| d }W n ty)   | d }Y nw | jj| j||| jj	d i i fS )Nr   r   r_   )r   )
r   r   r   	Exceptionpopitemr   r   r   r   r   )r2   r   r   r   r   r.   r.   r6   atFrame  s   zpisaCSSBuilder.atFrame)r,   r   )
r   r}   r   r   r   r   r   r   r,   r   )NN)r   r   )r   r   r,   r   )
r   r}   r   r   r   r   r   r   r,   r   )r   r}   r,   r   )__name__
__module____qualname____annotations__r   r   staticmethodr   r   r  r  r.   r.   r.   r6   r      s   
 
& 
 Ir   c                   @  s   e Zd Zdd ZdS )pisaCSSParserc                 C  s   d }| j }| jj|| j d}|sd S | j r%t| j jr%t| j || _ nt|j| _ z| |	 }|| _ W |S  t
yG   td Y |S w )Nr   zError while parsing CSS file)r   r   r   r   r   urljoinr   uriparsegetDatar  r   	exception)r2   cssResourceNamer   oldRootPathcssFiler.   r.   r6   parseExternal  s    zpisaCSSParser.parseExternalN)r	  r
  r  r  r.   r.   r.   r6   r    s    r  c                   @  sH   e Zd ZdddZdddZdddZdddZdddZdddZdS )PageNumberTextr,   Nonec                 O  
   d| _ d S Nr]   r   r2   argsr3   r.   r.   r6   __init__     
zPageNumberText.__init__r   c                 C     | j jd urt| j j| _dS NF)flowablepager}   r   r2   keyr.   r.   r6   __contains__     zPageNumberText.__contains__ra   r}   	list[str]c                 C     | j gS r~   r  r2   ra   r.   r.   r6   split     zPageNumberText.splitindexr   c                 C  s   | j r| j | S | j S r~   r  r2   r.  r.   r.   r6   __getitem__     zPageNumberText.__getitem__r#  r(   c                 C  
   || _ d S r~   r#  r2   r#  r.   r.   r6   setFlowable  r   zPageNumberText.setFlowablec                 C     | j S r~   r  r2   r.   r.   r6   __str__      zPageNumberText.__str__Nr,   r  r,   r   ra   r}   r,   r)  r.  r   r,   r}   r#  r(   r,   r  r,   r}   )	r	  r
  r  r  r'  r,  r0  r5  r8  r.   r.   r.   r6   r    s    




r  c                   @  sH   e Zd ZdddZdddZdd	d
ZdddZdddZdddZdS )PageCountTextr,   r  c                 O  r  r  r  r  r.   r.   r6   r  %  r   zPageCountText.__init__r}   c                 C  r6  r~   r  r7  r.   r.   r6   r8  (  r9  zPageCountText.__str__r   c                 C  r!  r"  )r#  	pagecountr}   r   r%  r.   r.   r6   r'  +  r(  zPageCountText.__contains__ra   r)  c                 C  r*  r~   r  r+  r.   r.   r6   r,  0  r-  zPageCountText.splitr.  r   c                 C  s   | j s| j S | j | S r~   r  r/  r.   r.   r6   r0  3  r1  zPageCountText.__getitem__r#  r(   c                 C  r2  r~   r3  r4  r.   r.   r6   r5  6  r   zPageCountText.setFlowableNr:  r?  r;  r<  r=  r>  )	r	  r
  r  r  r8  r'  r,  r0  r5  r.   r.   r.   r6   r@  $  s    




r@  sentencec                 C  s&   |  d}dt|}|d d d S )N )r,  joinreversed)rB  wordsreverse_sentencer.   r.   r6   rH  :  s   
rH  c                   @  sH  e Zd ZdZdXdYddZdd Zdd Zdd Zdd Zdd Z	dd Z
dZddZd[ddZd\d d!Zd\d"d#Zed]d'd(Zed)d* Zed+d, Zd-d.d^d1d2Zd\d3d4Zd5d6 Zd7d8 Zd\d9d:Zd_d;d<Zd\d=d>Zd\d?d@Zd`dBdCZedadDdEZdbdGdHZdIdJ ZdKdL ZdZdcdNdOZ dddQdRZ!dZdSdTZ"dedVdWZ#dS )fr   zZ
    Helper class for creation of reportlab story and container for
    various data.
    r]   r   rD  r   r}   debugr   capacityr,   r  c                 C  s  t  tj| _t  t | _g | _g | _g | _g | _	g | _
g | _g | _g | _g | _g | _g | _g | _g | _d | _d | _d | _d | _d | _t | _d| _d| _d| _d| _d| _d| _d| _ d| _!d| _"i | _#i | _$i | _%|| _&t' | _(d| _)t*| _+t,d| _-t.t/d| 0  | _1| j1| _2d| _3d| _4d| _5d | _6|pd	| _7t88| j7}|j9st:t;| j7< = | _7t>| j7| _?ddddt*d
| _@d S )Nr   g        r]   F12ptr   Tltr	__dummy__)authortitlesubjectkeywordsr   )Acopyr   DEFAULT_FONTfontListr   asianFontList
anchorFrag
anchorName
fragAnchorfragList	fragStackr   r   frameStatioundListr   r   r   select_optionsstoryimageindexing_storykeepInFrameIndexnoder   r   	tableDataerrre   listCounteruidctrwarncssDefaultTextcssTextlanguagera   r   	imageDatar   rJ  r'   toc
multiBuildr	   r   r   baseFontSizer|   r
   r   r{   	fragBlock	fragStripforcedirpathCallbackpathDocumentr   r   r}   r   absoluter   r   pathDirectorymeta)r2   r   rI  rJ  r   r.   r.   r6   r  F  sn   

zpisaContext.__init__c                 C  s   |dkrd| j _|| _d S )Nr\   T)r{   r\   rq  )r2   	directionr.   r.   r6   setDir  s   
zpisaContext.setDirc                 C  s   |  j d7  _ | j S )Nr_   )re  r7  r.   r.   r6   r     s   zpisaContext.UIDc                 C  N   |  }|dr|dd }|dr|dd }|  j|  d 7  _d S Nz	<![CDATA[	   z<!--   
)strip
startswithrh  r2   valuer.   r.   r6   addCSS     

zpisaContext.addCSSc                 C  ry  rz  )r  r  rg  r  r.   r.   r6   addDefaultCSS  r  zpisaContext.addDefaultCSSc                 C  s   dd l }tg dd| _|| | j_tdd t_t| j| _| j	| j_
|| | j_tdd t_| j| j| _| j| j| _tj| j| jd| _| j| j_d S )Nr   )allprintpdf)	mediumSetc                 S     |   S r~   _cr7  r.   r.   r6   <lambda>      z&pisaContext.parseCSS.<locals>.<lambda>c                 S  r  r~   r  r7  r.   r.   r6   r    r  )	userAgentuser)weakrefr   
cssBuilderrefr  propertyr   r  r   ru  r   r  rh  r"   rg  
cssDefaultCSSCascadeStrategy
cssCascader   )r2   r  r.   r.   r6   parseCSS  s   
zpisaContext.parseCSSc                 C  s   | j | d S r~   )r]  r   )r2   r   r.   r.   r6   addStory     zpisaContext.addStoryNc                 C  s.   |d ur|ng }t  |t  | j| _}|S r~   )rR  r]  )r2   r]  r.   r.   r6   	swapStory  s   zpisaContext.swapStoryr
   c                 C  s   t d|   |jd}t||d t|j|j |jd |_|jp#|j	|_|j|_
|jd u r5|jr5|j|_|jd u rA|jrA|j|_|jd u rM|jrM|j|_|jd u rY|jrY|j|_t|j	|j|j|_	|S )Nz	default%d)r[   )rb   re   rg   rM   r@   rA   rB   rC   rD   rf   ri   rJ   rT   rs   rq   rr   rv   rt   ru   rm   rk   rl   rp   rn   ro   rH   rI   rF   rG   rE   g      ?)r
   r   r[   r   maxr>   r?   re   rx   rb   bulletFontSizerr   rq   rf   ru   rt   rl   rk   ro   rn   r   rc   rd   )r2   r   rz   r.   r.   r6   toParagraphStyle  s*   %	zpisaContext.toParagraphStylec                 C  s   | j sd S g }tdD ]*}d| | j jd< t| j | | _tj| ddddddd | | j}|	| q|| j
_| | j
 d | _d S )N   zpdftoclevel%dclassr   )r   r   r   r   T)isBlock)ra  range
attributesr   
CSSCollectcssAttrCSS2Fragr  r{   r   rk  levelStylesr  r_  )r2   stylesipstyler.   r.   r6   addTOC  s(   

zpisaContext.addTOCc                 C  s   | j st | _d| _ d S d S )NT)rl  r#   r_  r7  r.   r.   r6   addPageCount  s   
zpisaContext.addPageCountflowr(   r@  c                 C     t  }||  |S r~   )r@  r5  )r  pcr.   r.   r6   getPageCount"     
zpisaContext.getPageCountc                 C  r  r~   )r  r5  )r  pgnumberr.   r.   r6   addPageNumber(  r  zpisaContext.addPageNumberc                 C  s   d S r~   r.   )_frags_styler.   r.   r6   dumpPara.     zpisaContext.dumpParaF)rp  rp  r   c                C  s  |p| j }d| _ t| j d}| jD ]}t|j|j|j }t||j|j |}||_q|s6| j	
 r| jr| j}| |}|jrE||_nt|j|j|j |_t|j}d |_|set| j| j dkr| jrx| j| jd jdddd n| j }d|_d|_	| j| | | j| j | t| dr| d}	t| j	|	}
|
d ur|
| _	t| j	|| j| j || jd}|j|_|j|_|j|_|j|_d	|_| j rt!|| j | j"#d
dd}| $| g | _d |_d | _ i | _"| %  d S )NFr   rD  r]   )ra   rW   rX   r`   ri  )fragsr1   rq  r  alignr   )side)&rp  rF  rY  r   rh   re   r?   r  r>   ra   r  rn  r  rR  r1   lenrX  r   r7   r{   rb   r  hasattr__getattribute__r   r%   rq  rY   rL   rZ   r[   autoLeadingr^  r&   rj  r   r  	clearFrag)r2   rp  
maxLeadingr{   r>   r   rz   r1   blankri  detect_language_resultparar.   r.   r6   addPara2  sp   









zpisaContext.addParac                 C  s   g | _ d| _d| _d S )NTr]   )rY  ro  ra   r7  r.   r.   r6   r    s   
zpisaContext.clearFragc                 K  s   | j jdi |S Nr.   r{   r7   r2   kwr.   r.   r6   copyFrag  s   zpisaContext.copyFragc                 K  s   | j jdi || _ | j S r  r  r  r.   r.   r6   newFrag  s   zpisaContext.newFragc                 C  s<   |j r|j dr| j||j dd  f | j| d S )N#r_   )rO   r  rV  r   rY  )r2   r{   r.   r.   r6   _appendFrag  s   zpisaContext._appendFragc                 C  s8  | j   }}|jdkr|jdkrd|_d|_|jr+|j t |_t|jt d|_n|jr=|jt	 |_t|jt d|_t
|j|j|j |_|_t|ttfr[||_| | d S |dddtdt}|jdkrtd	|D ]B}|  j|7  _d
|v sd|v r| }d|_d|_| | qt|dd}td|D ]}| }|dkrt}||_| | qqtd S tdt d |D ]V}| }|tkrd| _t|_|  j|7  _| | qdd| d  dd |_t| |j}|r||_| jr|j |_|jrd| _|  j|j7  _| | qd S )Nr_   r         ­r]   u   Â r+   prez(\r\n|\n|\r)r~  	z        z(\ )rC  ()Tr   rD  F)r{   r7   r8   r9   re   subFractionr:   r  	sizeDeltasuperFractionr   rb   rc   rd   rx   r   r  r@  ra   r  replaceNBSPrw   rer,  	lineBreakrp  rE  r   ro  lstrip)r2   ra   r{   baseFraglanguage_checkr.   r.   r6   addFrag  sj   

 zpisaContext.addFragc                 C  s   | j | j |   d S r~   )rZ  r   r{   r  r7  r.   r.   r6   pushFrag  s   zpisaContext.pushFragc                 C  s   | j  | _d S r~   )rZ  popr{   r7  r.   r.   r6   pullFrag  r  zpisaContext.pullFragr  c                 C  s8   zt d| j  d | W S  ty   Y dS w )NrC  r]   )reprrE  ra  toxmlr,  r  )r2   liner.   r.   r6   _getFragment  s
   "zpisaContext._getFragmentc                   C  s   dS )Nr   r.   r.   r.   r.   r6   _getLineNumber  r  zpisaContext._getLineNumbermsgc                 C  s   |d|  d S )Nr~  2   )r  )r2   r  r.   r.   r6   context  s   zpisaContext.contextc                 G  `   |  j d7  _ | jtj|  t|| df z| || W S  t	y/   | | Y S w Nr_   r  )
rf  r   r   r   PML_WARNINGr  r}   r  r  r  r2   r  r  r.   r.   r6   r     s   zpisaContext.warningc                 G  r  r  )
rc  r   r   r   	PML_ERRORr  r}   r  r  r  r  r.   r.   r6   error  s   zpisaContext.errorpisaFileObject | Nonec                 C  s"   |du rdS t ||p| j| jdS )zReturns a file name or None.N)callback)r   ru  rr  )r2   r   r   r.   r.   r6   r     s   zpisaContext.getFile	helveticac                 C  s   t |tst|}| d}|D ],}t|}|  }|| jv r/| j|d}t| n| j	|d}|dur>|  S q| j	|dS )zName of a font.,N)
r   r   r}   r  r,  r   rU  r   r    rT  )r2   r   r   r   r   r.   r.   r6   getFontName  s   


zpisaContext.getFontNamec                 C  sF   |d ur|ng }t || jt | < |D ]}t || jt |< qd S r~   )r}   rT  r   )r2   fontnamealiasr   r.   r.   r6   registerFont(  s
   zpisaContext.registerFontWinAnsiEncodingc                 C  sv  |r7|r9|}|j }td| t|tr |dr |d}t|tr(|}n
dd |dD }dd |D }|d }|d	}	d		|	d d
 |	d
 }
}|
 }|dv rd|||f }|| jv rot| d| d S | }t||}t| dD ]}dD ]}d|||f | jvrt|||| qq| |g || d S |dv r-|dkr| }t|
d |jd}| }n| }t|
d |jd}| }d|||f }|| jv rt| d| d S t||}|j}t| t|||}t| dD ]}dD ]}d|||f | jvrt|||| qq| |g ||| d S t| d d S d S d S )NzLoad font %rr  c                 s  s     | ]}|r|   V  qd S r~   )r   r  r   r   r.   r.   r6   	<genexpr>;  s    z'pisaContext.loadFont.<locals>.<genexpr>r  c                 S  s   g | ]}t |qS r.   )r}   r  r.   r.   r6   r   >  s    z(pisaContext.loadFont.<locals>.<listcomp>r   .rD  )ttcttfz%s_%d%dz+Repeated font embed for %s, skip new embed )r   r_   )afmpfbr  z.pfb)basepathz.afmz*Repeated font embed for %s, skip new embedzwrong attributes for <pdf:font>)r  r   rI  r   r}   r  r  r   r,  rE  r   rT  r   getNamedFiler   r   r  r   r   r   EmbeddedType1Facer   registerTypeFaceFont)r2   r   r   encodingrc   rd   file	fontAliasrb   r   baseNamesuffixfullFontNamefilenamer  tfiler  facefontNameOriginaljustFontr.   r.   r6   r   /  s   










zpisaContext.loadFont)r]   r   rD  )r   r}   rI  r   rJ  r   r,   r  r~   )r,   r
   r:  )r  r(   r,   r@  )rp  r   r,   r  )r]   N)r  )r,   r   )r  r}   r,   r}   )r,   r  )r  )r  r   r   )$r	  r
  r  __doc__r  rx  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r   r  r  r   r.   r.   r.   r6   r   @  sJ    ?	


B



V


H





r   )r,   r   r?  )rB  r}   r,   r}   )V
__future__r   rR  loggingr  urllib.parser  r   pathlibr   typingr   r   	reportlabr   reportlab.lib.enumsr   reportlab.lib.fontsr   reportlab.lib.pagesizesr	   reportlab.lib.stylesr
   reportlab.pdfbaser   reportlab.pdfbase.ttfontsr   reportlab.platypus.framesr   reportlab.pdfgen.canvasr   ImportErrorreportlab.platypus.paraparserr   r   r   	xhtml2pdfr   r   xhtml2pdf.filesr   r   xhtml2pdf.tablesr   xhtml2pdf.utilr   r   r   r   r   r   r   r   r   r    r!   xhtml2pdf.w3cr"   xhtml2pdf.xhtml2pdf_reportlabr#   r$   r%   r&   r'   reportlab.platypus.flowablesr(   r)   warnOnMissingFontGlyphs	getLoggerr	  r   r  r  r  r  r7   r|   r   
CSSBuilderr   	CSSParserr  r  r@  rH  r   r.   r.   r.   r6   <module>   s`   4



V  A
