+
    !¨yjŸ[  ã                  óÀ  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	t	^ RI
t
^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHt ^ R
IHt ^ RIHtHt ^RI H!t!H"t"H#t#H$t$ ^RI%H&t& ]PN                  ! RRRR/4        ! R R4      t(^ RI)H*t* ^ RI+H,t, ^ RI-H.t. ]P^                  ! ]04      t1]*! 4         ! R R4      t2 ! R R4      t3 ! R R4      t4R# )é    )ÚannotationsN)ÚPath)ÚAny)ÚDocument)Ú
WD_SECTION)ÚWD_ALIGN_PARAGRAPH)ÚOxmlElement)ÚnsmapÚqn)ÚPt)ÚImageÚImageOps)ÚDocumentModelÚElementTypeÚFontSettingsÚ	TableData)ÚCoordinateMapperÚvzurn:schemas-microsoft-com:vmlÚw10z%urn:schemas-microsoft-com:office:wordc                  óˆ   € ] tR t^"tRt]R R l4       t]R R l4       t]R R l4       t]R R	 l4       t	]R
 R l4       t
RtR# )Ú
PDFServicez˜Safe, lazy PDF access service.

A new PyMuPDF document is opened for each operation. This avoids
sharing a mutable PDF document between worker threads.
c               ó    € V ^8„  d   QhRRRR/# )é   ÚpathÚstrÚreturnztuple[bool, str]© )Úformats   "ÚC/home/ahrirg/test/pdf-to-docx-semi-manual-convertor/app/services.pyÚ__annotate__ÚPDFService.__annotate__*   s   € ÷ 
#ñ 
#�sð 
#Ð/ñ 
#ó    c                	óh  €  \         P                  ! V 4      ;_uu_ 4       pVP                  '       d   RuuRRR4       # VP                  ^ 8:  d   RuuRRR4       #  RRR4       R#   + '       g   i     L; i  \         d-   p\
        P                  R4       R \        T4      3u Rp?# Rp?ii ; i)FNzPDF validation failed)FúThe PDF is password protected.)FzThe PDF contains no pages.)TÚ )ÚfitzÚopenÚ
needs_passÚ
page_countÚ	ExceptionÚloggerÚ	exceptionr   )r   ÚdocumentÚexcs   &  r   ÚvalidateÚPDFService.validate)   s�   € ð		#Ü—’˜4—” HØ×&×&Ð&ØB÷ !’ð ×&Ñ&¨!Ô+Ø>÷	 !’ð ,÷ !ð
 ˆO÷ !—ûô ô 	#Ü×ÑÐ4Ô5Øœ#˜c›(�?Õ"ûð	#úsD   ‚A:  A'´
A: ¿A'Á
A: Á	A: Á'A7	Á2A: Á:B1Â!B,Â&B1Â,B1c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   Úintr   )r   s   "r   r    r!   7   s   € ÷ 'ñ '˜ð ' ñ 'r"   c                	óÎ   € \         P                  ! V 4      ;_uu_ 4       pVP                  '       d   \        R 4      hVP                  uuRRR4       #   + '       g   i     R# ; i)r$   N)r&   r'   r(   ÚRuntimeErrorr)   )r   r-   s   & r   r)   ÚPDFService.page_count6   s>   € ä�YŠY�t�_Œ_ Ø×"×"Ð"Ü"Ð#CÓDÐDØ×&Ñ&÷ �_�_‹_ús   Ÿ)AÁA$	c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   Úpage_numberr2   r   ztuple[float, float]r   )r   s   "r   r    r!   >   s"   € ÷ 9ñ 9˜ð 9¨#ð 9Ð2Eñ 9r"   c                	ó  € \         P                  ! V 4      ;_uu_ 4       pW!^,
          ,          pVP                  p\        VP                  4      \        VP
                  4      3uuRRR4       #   + '       g   i     R# ; i)é   N)r&   r'   ÚrectÚfloatÚwidthÚheight)r   r7   r-   Úpager:   s   &&   r   Ú	page_sizeÚPDFService.page_size=   sL   € ä�YŠY�t�_Œ_ Ø¨!�OÕ,ˆDØ—9‘9ˆDÜ˜Ÿ™Ó$¤e¨D¯K©KÓ&8Ð8÷ �_�_‹_ús   ŸAA/Á/B 	c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r   r   r7   r2   Údpir   Úbytesr   )r   s   "r   r    r!   E   s0   € ÷ )ñ )Øð)àð)ð ð)ð 
ñ	)r"   c                	ó   € \         P                  ! V 4      ;_uu_ 4       pW1^,
          ,          pVP                  V\         P                  RR7      pVP	                  R4      uuRRR4       #   + '       g   i     R# ; i)r9   F)rB   Ú
colorspaceÚalphaÚpngN)r&   r'   Ú
get_pixmapÚcsRGBÚtobytes)r   r7   rB   r-   r>   Úpixmaps   &&&   r   Úrender_pageÚPDFService.render_pageD   sY   € ô �YŠY�t�_Œ_ Ø¨!�OÕ,ˆDØ—_‘_ØÜŸ:™:Øð %ó ˆFð
 —>‘> %Ó(÷ �_�_‹_ús   ŸAA,Á,A=	c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   r   r   r7   r2   Únormalized_rectz!tuple[float, float, float, float]rB   r   rC   r   )r   s   "r   r    r!   T   s:   € ÷ %)ñ %)Øð%)àð%)ð ;ð%)ð ð	%)ð
 
ñ%)r"   c           
     	óâ  € Vw  rErg\         P                  ! V 4      ;_uu_ 4       pW�^,
          ,          p	V	P                  p
\        P                  ! VVVVV
P
                  V
P                  4      w  r¼rÞ\         P                  ! VVW½,           WÎ,           4      pWú,          pV	P                  VV\         P                  RR7      pVP                  R4      uuRRR4       #   + '       g   i     R# ; i)r9   F)rB   ÚcliprE   rF   rG   N)r&   r'   r:   r   Únormalized_to_pdfr<   r=   ÚRectrH   rI   rJ   )r   r7   rO   rB   ÚxÚyr<   r=   r-   r>   r:   Úpdf_xÚpdf_yÚpdf_wÚpdf_hrQ   rK   s   &&&&             r   Úrender_regionÚPDFService.render_regionS   sË   € ð .Ñˆˆeä�YŠY�t�_Œ_ Ø¨!�OÕ,ˆDØ—9‘9ˆDô !×2Ò2ØØØØØ—J‘JØ—K‘Kóñ 'ˆE˜%ô —9’9ØØØ•Ø•ó	ˆDð �LˆDà—_‘_ØØÜŸ:™:Øð	 %ó ˆFð —>‘> %Ó(÷; �_�_‹_ús   ¤B.CÃC.	r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ústaticmethodr/   r)   r?   rL   rZ   Ú__static_attributes__r   r"   r   r   r   "   sk   † ñð ô
#ó ð
#ð ô'ó ð'ð ô9ó ð9ð ô)ó ð)ð ô%)ó ô%)r"   r   )Úload_dotenv)Úgenai)Útypesc                  óF   € ] tR t^…tRtR
R R lltRR R lltR R ltRtR	# )Ú
OCRServicez4Gemini API-based vision service for text extraction.c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Ú
executabler   ÚlanguageÚ
preprocessÚboolr   ÚNoner   )r   s   "r   r    ÚOCRService.__annotate__ˆ   s2   € ÷ !ñ !àð!ð ð!ð ð	!ð
 
ñ!r"   c                	óª   € \         P                  ! R 4      pV'       g   \        R4      h\        P                  ! VR7      V n        RV n        W n        R# )ÚGEMINI_API_KEYz=GEMINI_API_KEY was not found in the environment or .env file.)Úapi_keyzgemma-4-31b-itN)ÚosÚgetenvr4   rd   ÚClientÚclientÚ
model_namerj   )Úselfri   rj   rk   rq   s   &&&& r   Ú__init__ÚOCRService.__init__ˆ   s>   € ô —)’)Ð,Ó-ˆßÜÐ^Ó_Ð_ä—l’l¨7Ô3ˆŒØ*ˆŒØ Žr"   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úimage_bytesrC   Úpsmr2   r   r   r   )r   s   "r   r    rn   –   s-   € ÷ Dñ DàðDð ðDð 
ñ	Dr"   c                	ój  €  V P                   P                  P                  V P                  \        P
                  P                  VR R7      R.R7      pVP                  P                  RR4      P                  4       #   \         d*   p\        P                  R4       \        RT 24      ThRp?ii ; i)	ú	image/png©ÚdataÚ	mime_typez¦Extract all text, numbers, and structured content from this image precisely as they appear. Return only the extracted text without introductory or concluding remarks.©ÚmodelÚcontentsú
Ú
zGemini API OCR failedzGemini OCR error: N)ru   ÚmodelsÚgenerate_contentrv   re   ÚPartÚ
from_bytesÚtextÚreplaceÚstripr*   r+   r,   r4   )rw   r{   r|   Úresponser.   s   &&&  r   Ú	recognizeÚOCRService.recognize–   s®   € ð
	DØ—{‘{×)Ñ)×:Ñ:Ø—o‘oä—J‘J×)Ñ)Ø(Ø"-ð *ó ð
eð
ð ;ó ˆHð —=‘=×(Ñ(¨°Ó6×<Ñ<Ó>Ð>øÜô 	DÜ×ÑÐ4Ô5ÜÐ!3°C°5Ð9Ó:ÀÐCûð	Dús   ‚A;A> Á>B2Â	$B-Â-B2c               ó   € V ^8„  d   QhRR/# )r   r   z	list[str]r   )r   s   "r   r    rn   ¯   s   € ÷ ñ ˜9ñ r"   c                	ó   € V P                   .# ©N)rj   )rw   s   &r   Ú	languagesÚOCRService.languages¯   s   € Ø—‘ˆÐr"   )ru   rj   rv   N)r%   ÚengF)é   )	r\   r]   r^   r_   r`   rx   r�   r”   rb   r   r"   r   rg   rg   …   s   † Ù>÷!÷D÷2ñ r"   rg   c                  ó2   € ] tR t^²tRtR R ltR R ltRtR# )ÚTableServicez#Gemini API-driven table recognizer.c               ó    € V ^8„  d   QhRRRR/# )r   Úocr_servicerg   r   rm   r   )r   s   "r   r    ÚTableService.__annotate__µ   s   € ÷ ñ àðð 
ñr"   c                	ó   € Wn         R # r“   ©Úocr)rw   r›   s   &&r   rx   ÚTableService.__init__µ   s	   € ð Žr"   c               ó    € V ^8„  d   QhRRRR/# )r   r{   rC   r   zTableData | Noner   )r   s   "r   r    rœ   »   s"   € ÷ Eñ EàðEð 
ñEr"   c                	ó<  € \         P                  ! \        P                  ! V4      4      P	                  R 4      pVP
                  w  r4V^ 8X  g   V^ 8X  d   R# Rp V P                  P                  P                  P                  V P                  P                  \        P                  P                  VRR7      V.R7      pVP                  P                  RR4      P!                  4       pVP#                  R4      '       d‚   VP%                  4       pV^ ,          P#                  R4      '       d
   VR	,          pV'       d$   VR,          P#                  R4      '       d   VRR pRP'                  V4      P!                  4       pV'       g   R# ^ RIp	V	P+                  \        P,                  ! V4      4      p
V
 Uu. uF  q»'       g   K  VNK  	  ppV'       g   R# \/        R
 V 4       4      pV F&  p\1        V4      V8  g   K  VP3                  R4       K%  	  \5        W=,          4      .V,          p\5        V\1        V4      ,          4      .\1        V4      ,          p\7        VVVR7      # u upi   \8         d!   p\:        P=                  R4        Rp?R# Rp?ii ; i)ÚRGBNaD  Analyze this table image. Extract all rows and columns. Return the data strictly in CSV format, where each row is on a new line and columns are separated by commas. Escape or wrap cells containing commas in double quotes. Return ONLY the CSV text with no markdown block formatting, markdown code ticks, or introductory text.r~   r   r‚   r…   r†   z```:r9   NNc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir“   ©Úlen©Ú.0Úrows   & r   Ú	<genexpr>Ú)TableService.recognize.<locals>.<genexpr>ï   s   é € Ð>±I¨S¤ C§ ³Iùó   ‚r%   )ÚrowsÚcolumn_widthsÚrow_heightszGemini Table OCR failedéÿÿÿÿ)r   r'   ÚioÚBytesIOÚconvertÚsizerŸ   ru   r‡   rˆ   rv   re   r‰   rŠ   r‹   rŒ   r�   Ú
startswithÚ
splitlinesÚjoinÚcsvÚreaderÚStringIOÚmaxr¦   Úappendr;   r   r*   r+   r,   )rw   r{   Úimager<   r=   ÚpromptrŽ   Úraw_csvÚlines_cleanr¸   r¹   r©   Ú	cell_rowsÚcolumns_countr®   r¯   r.   s   &&               r   r�   ÚTableService.recognize»   s%  € ô —
’
œ2Ÿ:š: kÓ2Ó3×;Ñ;¸EÓBˆØŸ
™
‰ˆà�AŒ:˜ 1œÙð$ð 	ð1	Ø—x‘x—‘×-Ñ-×>Ñ>Ø—h‘h×)Ñ)ä—J‘J×)Ñ)Ø(Ø"-ð *ó ð ðð ?ó 	ˆHð —m‘m×+Ñ+¨F°DÓ9×?Ñ?ÓAˆGð ×!Ñ! %×(Ò(Ø%×0Ñ0Ó2�Ø˜q•>×,Ñ,¨U×3Ò3Ø"-¨b¥/�Kß ;¨r¥?×#=Ñ#=¸e×#DÒ#DØ"-¨c¨rÐ"2�KØŸ)™) KÓ0×6Ñ6Ó8�çÙãØ—Z‘Z¤§¢¨GÓ 4Ó5ˆFÙ(.Ó6© ³#Ÿ˜©ˆIÐ6çÙäÑ>±IÓ>Ó>ˆMã �Ü˜#“h Ö.Ø—J‘J˜r–Nñ !ô # 5Õ#8Ó9Ð:¸]ÕJˆMÜ  ¬#¨i«.Õ!8Ó9Ð:¼SÀ»^ÕKˆKäØØ+Ø'ôð ùò 7øô( ô 	Ü×ÑÐ6Ô7Ýûð	úsW   ÁB&I0 Ä-I0 Ä0I0 ÅA	I0 Æ-I0 Æ:	I+ÇI+Ç
I0 Ç$I0 ÈA'I0 É+I0 É0JÉ;JÊJrž   N)r\   r]   r^   r_   r`   rx   r�   rb   r   r"   r   r™   r™   ²   s   † Ù-õ÷Eñ Er"   r™   c                  óÒ   € ] tR tRtRtRt^t]R R l4       t]R R l4       t	]
R R	 l4       t]R
 R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       tRtR# )ÚDocxServicei  aB  Generate visually positioned DOCX pages from DocumentModel.

Images use DrawingML anchors relative to the page.

Text uses VML textboxes because WordprocessingML textboxes can contain
ordinary WordprocessingML paragraphs/runs while retaining absolute
shape geometry.

Tables use the OOXML tblpPr floating-table mechanism.
iœ1  c               ó    € V ^8„  d   QhRRRR/# ©r   Úpointsr;   r   r2   r   )r   s   "r   r    ÚDocxService.__annotate__  s   € ÷ 9ñ 9˜%ð 9 Cñ 9r"   c                	óL   € \        ^\        WP                  ,          4      4      # ©r9   )r»   ÚroundÚEMU_PER_POINT©ÚclsrÈ   s   &&r   Ú_emuÚDocxService._emu  s   € ä�1”e˜F×%6Ñ%6Õ6Ó7Ó8Ð8r"   c               ó    € V ^8„  d   QhRRRR/# rÇ   r   )r   s   "r   r    rÉ     s   € ÷ ;ñ ;˜Eð ; cñ ;r"   c                	óL   € \        ^\        WP                  ,          4      4      # rË   )r»   rÌ   ÚTWIPS_PER_POINTrÎ   s   &&r   Ú_twipsÚDocxService._twips  s   € ä�1”e˜F×%8Ñ%8Õ8Ó9Ó:Ð:r"   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úrunr   Úfontr   r   rm   r   )r   s   "r   r    rÉ     s!   € ÷ 6ñ 6˜3ð 6 lð 6°tñ 6r"   c                	ó\  € VP                   V P                  n        \        VP                  4      V P                  n        VP                  V P                  n        VP                  V P                  n        VP                  V P                  n        V P                  P                  4       pVP                  pVer   VP                  \        R4      VP                   4       VP                  \        R4      VP                   4       VP                  \        R4      VP                   4       R # R # )Núw:asciiúw:hAnsiú
w:eastAsia)ÚfamilyrÙ   Únamer   Úsize_ptr´   ÚboldÚitalicÚ	underlineÚ_rÚget_or_add_rPrÚrFontsÚsetr   )rØ   rÙ   ÚrprÚrfontss   &&  r   Ú_set_run_fontÚDocxService._set_run_font  s¾   € àŸ™ˆ�‰ŒÜ˜4Ÿ<™<Ó(ˆ�‰ŒØŸ	™	ˆ�‰ŒØŸ+™+ˆ�‰ŒØ!Ÿ^™^ˆ�‰Ôð �f‰f×#Ñ#Ó%ˆØ—‘ˆØÒØ�J‰J”r˜)“} d§k¡kÔ2Ø�J‰J”r˜)“} d§k¡kÔ2Ø�J‰J”r˜,Ó'¨¯©Ö5ñ r"   c               ó0   € V ^8„  d   QhRRRRRRRRRRRR	/# )
r   rØ   r   Úx_ptr;   Úy_ptÚwidth_ptÚ	height_ptr   rl   r   )r   s   "r   r    rÉ   +  sN   € ÷ Bñ BàðBð ðBð ð	Bð
 ðBð ðBð 
ñBr"   c                	ó®  € VP                   P                  R 4      pV'       g   R# V^ ,          p\        R4      pVP                  RR4       VP                  RR4       VP                  RR4       VP                  RR4       VP                  RR4       VP                  R	R
4       VP                  RR4       VP                  RR4       VP                  RR4       VP                  RR4       \        R4      p	V	P                  RR4       V	P                  RR4       VP	                  V	4       \        R4      p
V
P                  RR4       \        R4      p\        V P                  V4      4      Vn        V
P	                  V4       VP	                  V
4       \        R4      pVP                  RR4       \        R4      p\        V P                  V4      4      Vn        VP	                  V4       VP	                  V4       \        R4      pVP                  R\        V P                  V4      4      4       VP                  R\        V P                  V4      4      4       VP	                  V4       \        R4      pVP                  RR4       VP                  RR4       VP                  RR4       VP                  RR4       VP	                  V4       \        R 4      pVP	                  V4       \        V4       F7  pVP                  P                  R!4      '       d   K&  VP	                  V4       K9  	  VP                  4       P                  Wx4       R"# )#z./wp:drawing/wp:inlineFz	wp:anchorÚdistTÚ0ÚdistBÚdistLÚdistRÚ	simplePosÚrelativeHeightÚ	251658240Ú	behindDocÚlockedÚlayoutInCellÚ1ÚallowOverlapzwp:simplePosrT   rU   zwp:positionHÚrelativeFromr>   zwp:posOffsetzwp:positionVz	wp:extentÚcxÚcyzwp:effectExtentÚlÚtÚrÚbzwp:wrapNoneÚextentT)rä   Úxpathr	   rç   r¼   r   rÐ   r‹   ÚlistÚtagÚendswithÚ	getparentrŒ   )rÏ   rØ   rí   rî   rï   rð   ÚinlineÚinline_elementÚanchorÚ
simple_posÚ
position_hÚoffset_hÚ
position_vÚoffset_vr  ÚeffectÚ	wrap_noneÚchilds   &&&&&&            r   Ú_add_anchor_to_runÚDocxService._add_anchor_to_run*  s‘  € ð —‘—‘Ð6Ó7ˆßÙà �ˆä˜[Ó)ˆØ�
‰
�7˜CÔ Ø�
‰
�7˜CÔ Ø�
‰
�7˜CÔ Ø�
‰
�7˜CÔ Ø�
‰
�; Ô$Ø�
‰
Ð# [Ô1Ø�
‰
�; Ô$Ø�
‰
�8˜SÔ!Ø�
‰
�> 3Ô'Ø�
‰
�> 3Ô'ä  Ó0ˆ
Ø�‰�s˜CÔ Ø�‰�s˜CÔ Ø�‰�jÔ!ä  Ó0ˆ
Ø�‰�~ vÔ.Ü˜~Ó.ˆÜ˜CŸH™H T›NÓ+ˆŒØ×Ñ˜(Ô#Ø�‰�jÔ!ä  Ó0ˆ
Ø�‰�~ vÔ.Ü˜~Ó.ˆÜ˜CŸH™H T›NÓ+ˆŒØ×Ñ˜(Ô#Ø�‰�jÔ!ä˜[Ó)ˆØ�
‰
�4œ˜SŸX™X hÓ/Ó0Ô1Ø�
‰
�4œ˜SŸX™X iÓ0Ó1Ô2Ø�‰�fÔäÐ.Ó/ˆØ�
‰
�3˜ÔØ�
‰
�3˜ÔØ�
‰
�3˜ÔØ�
‰
�3˜ÔØ�‰�fÔä Ó.ˆ	Ø�‰�iÔ ä˜.Ö)ˆEØ�y‰y×!Ñ! (×+Ò+ÙØ�M‰M˜%Ö ñ *ð
 	× Ñ Ó"×*Ñ*¨>ÔBÙr"   c               ó4   € V ^8„  d   QhRRRRRRRRRRR	RR
R/# )r   r-   ÚDocumentObjectr{   rC   rí   r;   rî   rï   rð   r   rm   r   )r   s   "r   r    rÉ   p  sY   € ÷ $\ñ $\à ð$\ð ð$\ð ð	$\ð
 ð$\ð ð$\ð ð$\ð 
ñ$\r"   c           
     	ó  € V'       g   R # VP                  4       p\        ^ 4      VP                  n        \        ^ 4      VP                  n        VP                  4       p \        P                  ! V4      p	VP                  V	\        \        RV4      4      \        \        RV4      4      R7       T P                  TTTTT4      p
T
'       g   \        P                  R4       R # R #   \         d    \        P                  R4        R # i ; i)Ng      ð?)r<   r=   zFailed to add picture to runz=Skipped image anchoring because DrawingML inline was missing.)Úadd_paragraphr   Úparagraph_formatÚspace_beforeÚspace_afterÚadd_runr±   r²   Úadd_picturer»   r*   r+   r,   r  Úwarning)rÏ   r-   r{   rí   rî   rï   rð   Ú	paragraphrØ   ÚstreamÚsuccesss   &&&&&&&    r   Ú_add_positioned_imageÚ!DocxService._add_positioned_imageo  sê   € ÷ Ùà×*Ñ*Ó,ˆ	Ü24°Q³%ˆ	×"Ñ"Ô/Ü13°A³ˆ	×"Ñ"Ô.à×ÑÓ!ˆð		Ü—Z’Z Ó,ˆFØ�O‰OØÜœ˜S (Ó+Ó,Üœ#˜c 9Ó-Ó.ð ô ð ×(Ñ(ØØØØØó
ˆ÷ Ü�N‰NÐZÖ[ñ øô ô 	Ü×ÑÐ;Ô<Úð	ús   Á AC& Ã& D
Ä	D
c               ó8   € V ^8„  d   Qh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   rm   r   )r   s   "r   r    rÉ   —  sd   € ÷ Nñ Nà ðNð ðNð ð	Nð
 ðNð ðNð ðNð ðNð 
ñNr"   c                	ó	  € VP                  4       p\        ^ 4      VP                  n        \        ^ 4      VP                  n        VP                  4       p	\        R4      p
\        R4      pVP                  RRVR RVR RVR RVR R	2	4       VP                  R
R4       VP                  RR4       VP                  RR4       \        R4      pVP                  RR4       \        R4      p\        R4      p\        R4      p\        R4      pVP                  RR4       VP                  RR4       VP                  RR4       VP                  V4       VP                  V4       VP                  4       ;'       g    R.p\        V4       EFL  w  pp\        R4      p\        R4      p\        R4      pVP                  \        R4      VP                  4       VP                  \        R4      VP                  4       VP                  \        R 4      VP                  4       VP                  V4       \        R!4      pVP                  R"\        \        ^\        ^4      4      4      4       VP                  V4       VP                   '       d   VP                  \        R#4      4       VP"                  '       d   VP                  \        R$4      4       VP$                  '       d/   \        R%4      pVP                  R"R&4       VP                  V4       VP                  V4       \        R'4      pV'       d   TMR(Vn        VP)                  R(4      '       g   VP+                  R(4      '       d   VP                  R)R*4       VP                  V4       V\-        V4      ^,
          8  d   \        R+4      pVP                  V4       VP                  V4       EKO  	  VP                  V4       VP                  V4       VP                  V4       \        R,4      pVP                  R
R-4       VP                  R.R/4       VP                  R0R/4       VP                  V4       V
P                  V4       V	P.                  P                  V
4       R1# )2r   zw:pictzv:shapeÚstylezposition:absolute;left:z.2fzpt;top:z	pt;width:z
pt;height:z—pt;z-index:1;mso-position-horizontal:absolute;mso-position-horizontal-relative:page;mso-position-vertical:absolute;mso-position-vertical-relative:page;Útypez#_x0000_t202ÚstrokedÚfÚfilledz	v:textboxzmso-fit-shape-to-text:false;zw:txbxContentzw:pzw:pPrz	w:spacingÚbeforeró   ÚafterÚlineÚ240r%   zw:rzw:rPrzw:rFontsrÛ   rÜ   rÝ   zw:szÚvalzw:bzw:izw:uÚsinglezw:tÚ z+{http://www.w3.org/XML/1998/namespace}spaceÚpreservezw:brzw10:wrapÚnoneÚanchorxr>   ÚanchoryN)r  r   r  r  r  r   r	   rç   r¼   r¶   Ú	enumerater   rÞ   r   r»   rÌ   rá   râ   rã   r‹   rµ   r
  r¦   rä   )rÏ   r-   r‹   rí   rî   rï   rð   rÙ   r#  rØ   ÚpictÚshapeÚtextboxÚcontentÚinner_pÚpprÚspacingÚlinesÚindexr1  Úinner_rrè   ré   r´   rã   Ú	text_nodeÚbrÚwraps   &&&&&&&&                    r   Ú_add_textboxÚDocxService._add_textbox–  s¤  € ð ×*Ñ*Ó,ˆ	Ü24°Q³%ˆ	×"Ñ"Ô/Ü13°A³ˆ	×"Ñ"Ô.à×ÑÓ!ˆô ˜8Ó$ˆä˜IÓ&ˆà�	‰	ØðØ˜S�zð "Ø˜C�jð !Ø! #˜ð 'Ø# C˜ð )7ð		7ô	
ð  	�	‰	�&˜.Ô)Ø�	‰	�)˜SÔ!Ø�	‰	�(˜CÔ ô ˜kÓ*ˆà�‰ØØ*ô	
ô
 ˜oÓ.ˆÜ˜eÓ$ˆô ˜'Ó"ˆä˜kÓ*ˆØ�‰�H˜cÔ"Ø�‰�G˜SÔ!Ø�‰�F˜EÔ"à�
‰
�7ÔØ�‰�sÔð —‘Ó!×)Ð) b Tˆä$ U×+‰KˆE�4Ü! %Ó(ˆGÜ˜gÓ&ˆCä  Ó,ˆFØ�J‰J”r˜)“} d§k¡kÔ2Ø�J‰J”r˜)“} d§k¡kÔ2Ø�J‰J”r˜,Ó'¨¯©Ô5Ø�J‰J�vÔä˜vÓ&ˆDØ�H‰HØÜ”C˜œ5 ›8Ó$Ó%ôð �J‰J�tÔà�y�yˆyØ—
‘
œ; uÓ-Ô.à�{�{ˆ{Ø—
‘
œ; uÓ-Ô.à�~�~ˆ~Ü'¨Ó.�	Ø—‘˜e XÔ.Ø—
‘
˜9Ô%à�N‰N˜3Ôä# EÓ*ˆIß%)™T¨sˆIŒNà�‰˜s×#Ò# t§}¡}°S×'9Ò'9Ø—‘ØAØôð
 �N‰N˜9Ô%à”s˜5“z A•~Ô%Ü  Ó(�Ø—‘˜rÔ"à�N‰N˜7×#ñ[ ,ð^ 	�‰�wÔð 	�‰�wÔØ�‰�WÔä˜:Ó&ˆØ�‰�˜Ô Ø�‰�˜FÔ#Ø�‰�˜FÔ#à�‰�TÔà�‰�EÔØ�‰�‰�dÖr"   c               ó8   € V ^8„  d   QhRRRRRRRRRRR	RR
RRR/# )r   r-   r  Ú
table_datar   rí   r;   rî   rï   rð   rÙ   r   r   rm   r   )r   s   "r   r    rÉ   )  sd   € ÷ a!ñ a!à ða!ð ða!ð ð	a!ð
 ða!ð ða!ð ða!ð ða!ð 
ña!r"   c           	     	ó„	  € VP                   pV'       g   R # \        R V 4       4      p	V	^ 8X  d   R # VP                  \        V4      V	R7      p
RV
n        RV
n        \        VP                  4      pV^ 8:  d   WY,          .V	,          pMgVP                   Uu. uF  pW],          V,          NK  	  pp\        V4      V	8  d0   VP                  WY,          .V	\        V4      ,
          ,          4       \        VP                  4      p\        V4       EFÉ  w  pp\        V	4       FÆ  pV
P                  VV4      p\        VV,          4      Vn        VP                  ^ ,          p\         P"                  Vn        \        ^ 4      VP&                  n        \        ^ 4      VP&                  n        V\        V4      8  d
   VV,          MRpVP-                  V4      pV P/                  VV4       KÈ  	  V\        VP                  4      8  g   Kø  VP                  V,          pV^ 8”  d   VV,          V,          MV\        V4      ,          pV
P                   V,          P0                  P3                  4       p\5        R4      pVP7                  \9        R4      \;        V P=                  V4      4      4       VP7                  \9        R4      R	4       VP?                  V4       EKÌ  	  V
P@                  pVPB                  p\5        R
4      pVP7                  \9        R4      R4       VP?                  V4       \5        R4      pVP7                  \9        R4      R4       VP7                  \9        R4      R4       VP7                  \9        R4      R4       VP7                  \9        R4      R4       VP7                  \9        R4      R4       VP7                  \9        R4      R4       VP7                  \9        R4      \;        V P=                  V4      4      4       VP7                  \9        R4      \;        V P=                  V4      4      4       VP?                  V4       \5        R4      pVP7                  \9        R4      R4       VP7                  \9        R4      \;        V P=                  V4      4      4       VP?                  V4       R # u upi )Nc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir“   r¥   r§   s   & r   rª   Ú2DocxService._add_floating_table.<locals>.<genexpr>7  s   é € Ð/©$ 3”c˜#—h�h«$ùr¬   )r­   Úcolsz
Table GridFr%   z
w:trHeightzw:valzw:hRuleÚatLeastzw:tblLayoutzw:typeÚfixedzw:tblpPrzw:leftFromTextró   zw:rightFromTextzw:topFromTextzw:bottomFromTextzw:vertAnchorr>   zw:horzAnchorzw:tblpXzw:tblpYzw:tblWÚdxazw:w)"r­   r»   Ú	add_tabler¦   r*  ÚautofitÚsumr®   Úextendr¯   r:  ÚrangeÚcellr   r<   Ú
paragraphsr   ÚLEFTÚ	alignmentr  r  r  r   rê   Ú_trÚget_or_add_trPrr	   rç   r   r   rÕ   r¼   Ú_tblÚtblPr)rÏ   r-   rK  rí   rî   rï   rð   rÙ   r­   ÚcolumnsÚtableÚtotal_source_widthr®   ÚsourceÚtotal_source_heightÚ	row_indexr©   Úcolumn_indexrX  r#  ÚvaluerØ   Ú
row_heightÚrh_ptÚtr_prÚ	tr_heightÚtblÚtbl_prÚ
tbl_layoutÚtbl_positionÚ	tbl_widths   &&&&&&&&                       r   Ú_add_floating_tableÚDocxService._add_floating_table(  së  € ð �‰ˆßÙäÑ/©$Ó/Ó/ˆØ�aŒ<Ùà×"Ñ"Ü�T“Øð #ó 
ˆð #ˆŒØˆŒä  ×!9Ñ!9Ó:ÐØ Ô"Ø%Õ/Ð0°7Õ:‰Mð )×6Ò6óá6�Fð Õ!Ð$6×6Ð6Ù6ð ð ô
 �=Ó! GÔ+Ø×$Ñ$ØÕ'Ð(Ø¤ ]Ó!3Õ3õ5ôô
 " *×"8Ñ"8Ó9ÐÜ'¨Ÿo‰NˆI�sÜ % g¦�Ø—z‘z )¨\Ó:�Ü ¨lÕ ;Ó<�”
à ŸO™O¨AÕ.�	Ü&8×&=Ñ&=�	Ô#Ü:<¸Q»%�	×*Ñ*Ô7Ü9;¸A»�	×*Ñ*Ô6ð $¤c¨#£hÔ.ð ˜Ö%àð ð  ×'Ñ'¨Ó.�Ø×!Ñ! # tÖ,ñ! !/ð$ œ3˜z×5Ñ5Ó6Ö6Ø'×3Ñ3°IÕ>�
ð +¨QÔ.ð  
Õ*Ð-@Ö@à"¤S¨£YÕ.ð ð
 Ÿ
™
 9Õ-×1Ñ1×AÑAÓC�Ü'¨Ó5�	Ø—‘Ü�w“KÜ˜Ÿ
™
 5Ó)Ó*ôð —‘œb ›m¨YÔ7Ø—‘˜Y×'ñC .ðF �j‰jˆØ—‘ˆä  Ó/ˆ
Ø�‰”r˜(“| WÔ-Ø�‰�jÔ!ä" :Ó.ˆØ×ÑœÐ,Ó-¨sÔ3Ø×ÑœÐ-Ó.°Ô4Ø×Ñœ˜OÓ,¨cÔ2Ø×ÑœÐ.Ó/°Ô5Ø×Ñœ˜NÓ+¨VÔ4Ø×Ñœ˜NÓ+¨VÔ4Ø×Ñœ˜I›¬¨C¯J©J°tÓ,<Ó(=Ô>Ø×Ñœ˜I›¬¨C¯J©J°tÓ,<Ó(=Ô>Ø�‰�lÔ#ä Ó)ˆ	Ø�‰”b˜“l EÔ*Ø�‰”b˜“i¤ S§Z¡Z°Ó%9Ó!:Ô;Ø�‰�iÖ ùòIs   ÂR=c               ó$   € V ^8„  d   QhRRRRRR/# )r   rƒ   r   Úoutput_pathr   r   rm   r   )r   s   "r   r    rÉ   �  s-   € ÷ f2ñ f2àðf2ð ðf2ð 
ñ	f2r"   c                	ó  € VP                   '       g   \        R 4      h\        V4      pVP                  P	                  RRR7       \        4       pVP                  R,          pVP                  P                  VP                  n	        \        VP                  P                  4      VP                  n        \        VP                   4       EF  w  rgV^ 8X  d   VP                  ^ ,          pMVP                  \         P"                  4      p\        ^ 4      Vn        \        ^ 4      Vn        \        ^ 4      Vn        \        ^ 4      Vn        \        ^ 4      Vn        \        ^ 4      Vn        \        VP0                  4      Vn        \        VP4                  4      Vn        VP9                  4        VP:                   EF  p	V	P<                  VP0                  ,          p
V	P>                  VP4                  ,          pV	P@                  VP0                  ,          pV	PB                  VP4                  ,          pV	PD                  \F        PH                  8X  dP   V	PJ                  PM                  4       '       g   K¹  V PO                  VV	PJ                  V
VVVVP                  4       Kæ  V	PD                  \F        PP                  8X  dO   V	PR                  '       g   EK  \T        PV                  ! V	PR                  4      pV PY                  VVV
VVV4       EKS  V	PD                  \F        PZ                  8X  g   EKu  V	P\                  '       dL   V	PR                  '       d:   \T        PV                  ! V	PR                  4      pV PY                  VVV
VVV4       EKÒ  V	P^                  '       g   EKç  V Pa                  VV	P^                  V
VVVVP                  4       EK  	  EK
  	  VPc                  \e        V4      4       \f        Pi                  RV4       R# )zThere are no pages to generate.T)ÚparentsÚexist_okÚNormalzDOCX generated: %sN)5ÚpagesÚ
ValueErrorr   ÚparentÚmkdirr   ÚstylesrÙ   rÞ   rß   r   rà   r´   r:  ÚsectionsÚadd_sectionr   ÚNEW_PAGEÚleft_marginÚright_marginÚ
top_marginÚbottom_marginÚheader_distanceÚfooter_distancerï   Ú
page_widthrð   Úpage_heightr  ÚelementsrT   rU   r<   r=   Úelement_typer   ÚTEXTr‹   r�   rH  ÚIMAGEÚimage_png_b64r   Úb64_to_imager&  ÚTABLEÚtable_fallback_imagera  rq  Úsaver   r+   Úinfo)rÏ   rƒ   rt  Úoutputr-   Únormal_stylerC  r>   ÚsectionÚelementrí   rî   rï   rð   r{   s   &&&            r   ÚgenerateÚDocxService.generateŒ  s  € ð �{�{ˆ{ÜÐ>Ó?Ð?ä�kÓ"ˆØ�‰×Ñ D°4ÐÔ8ä“:ˆà—‘ xÕ0ˆØ!&§¡×!2Ñ!2ˆ×ÑÔÜ!# E§J¡J×$6Ñ$6Ó!7ˆ×ÑÔä$ U§[¡[×1‰KˆEØ˜ŒzØ"×+Ñ+¨AÕ.‘à"×.Ñ.¬z×/BÑ/BÓC�ä"$ Q£%ˆGÔÜ#% a£5ˆGÔ Ü!# A£ˆGÔÜ$& q£EˆGÔ!Ü&(¨£eˆGÔ#Ü&(¨£eˆGÔ#ä!# D§M¡MÓ!2ˆGÔÜ"$ T§^¡^Ó"4ˆGÔð ×"Ñ"Ô$àŸ=�=�Ø—y‘y 4§=¡=Õ0�Ø—y‘y 4§>¡>Õ1�Ø"Ÿ=™=¨4¯=©=Õ8�Ø#ŸN™N¨T¯^©^Õ;�	à×'Ñ'¬;×+;Ñ+;Ô;Ø"Ÿ<™<×-Ñ-×/Ò/Ù à×$Ñ$Ø ØŸ™ØØØ Ø!ØŸ
™
öð ×)Ñ)¬[×->Ñ->Ô>Ø"×0×0Ð0Ú ä"/×"<Ò"<Ø×-Ñ-ó#�Kð ×-Ñ-Ø Ø#ØØØ Ø!÷ð ×)Ñ)¬[×->Ñ->×>à×4×4Ð4Ø#×1×1Ð1ä&3×&@Ò&@Ø#×1Ñ1ó'˜ð ×1Ñ1Ø$Ø'Ø Ø Ø$Ø%÷ð !ŸŸ›Ø×/Ñ/Ø$Ø#ŸM™MØ Ø Ø$Ø%Ø!ŸJ™J÷ôm )ñ) 2ðh 	�‰”c˜&“kÔ"Ü�‰Ð(¨&Ö1r"   r   N)r\   r]   r^   r_   r`   rÍ   rÔ   ÚclassmethodrÐ   rÕ   ra   rê   r  r&  rH  rq  r—  rb   r   r"   r   rÅ   rÅ     s¿   † ñ	ð €MØ€Oàô9ó ð9ð ô;ó ð;ð ô6ó ð6ð ôBó ðBðH ô$\ó ð$\ðL ôNó ðNðb ôa!ó ða!ðF ôf2ó ôf2r"   rÅ   )5Ú
__future__r   r±   rr   ÚloggingÚpathlibr   Útypingr   Úcv2r&   ÚnumpyÚnpÚpytesseractÚdocxr   Údocx.documentr  Údocx.enum.sectionr   Údocx.enum.textr   Ú	docx.oxmlr	   Údocx.oxml.nsr
   r   Údocx.sharedr   ÚPILr   r   r‡   r   r   r   r   Úutilsr   Úupdater   Údotenvrc   Úgooglerd   Úgoogle.genaire   Ú	getLoggerr\   r+   rg   r™   rÅ   r   r"   r   Ú<module>r°     s¯   ðÝ "ç Û Ý Ý ã 
Û Û Û Ý Ý 4å (Ý -å !ß "å ß ÷ó õ $à ‡‚�Ð4°eÐ=dÐgÔ i÷W)ñ W)õt Ý Ý à	×	Ò	˜8Ó	$€á „÷+ñ +÷ZNñ N÷bp2ó p2r"   