§
     ’jù  ã                  óˆ   — 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  ej	        e
¦  «        ZddlmZ  G d„ d¦  «        ZdS )	é    )ÚannotationsN)ÚPath)ÚAnyé   )ÚDrawingPdfStructureMdMixinc                  ó.   — e Zd Ze	 	 	 ddd„¦   «         ZdS )ÚDrawingPdfImagesMixiné�  é–   NÚ	file_pathr   Ú	max_pagesÚintÚdpiÚ
takeoff_idú
str | NoneÚreturnúlist[dict[str, Any]]c                óê	  — ddl m} g }t          t          ¦  «                             ¦   «         j        d         dz  dz  }|                     dd¬¦  «         t          | ¦  «        } |r|n| j        }t          j	        | t          |d¦  «        ¬	¦  «        }|                     d
d¦  «        }		 ddl}
|
                     t          | ¦  «        ¦  «        }t          t          |¦  «        |¦  «        }t!          |¦  «        D �]“}||         }|dz  }|
                     ||¦  «        }|                     |¬¦  «        }|› d|dz   › d�}||z  }|                     t          |¦  «        ¦  «         |dk    r*||› d�z  }|                     t          |¦  «        ¦  «         t)          j        |                     d¦  «        ¦  «                             d¦  «        }|                     d¦  «        pd}|                     |¦  «        }d|dz   › �}|                     ¦   «         }|dk    rd}n‡d|v sd|v sd|v r
d|dz   › d�}nqd|v sd|v r
d|dz   › d�}n_d|v sd |v r
d|dz   › d!�}nMd"|v sd#|v r
d|dz   › d$�}n;d%|v rd&|v r
d|dz   › d'�}n)d(|v r
d|dz   › d)�}nd*|v r
d|dz   › d+�}nd,|v r	d|dz   › d-�}d}	 |j        j        }|j        j        }|
                     |d.z  |d/z  ||¦  «        }|                     |
                     d0d0¦  «        |¬1¦  «        }t)          j        |                     d¦  «        ¦  «                             d¦  «        }n# t>          $ r Y nw xY w|                      |dz   |d2|› �||d3|dd4…         |dk    r|	ndd5œ¦  «         �Œ•| !                    ¦   «          |S # t>          $ r%}tD           #                    d6|¦  «         Y d}~nd}~ww xY w| j$                             ¦   «         d7v rý	 |› d�}||z  } tK          j&        | | ¦  «         t          | d8¦  «        5 }!t)          j        |! '                    ¦   «         ¦  «                             d¦  «        }ddd¦  «         n# 1 swxY w Y   | j$                             ¦   «         dk    rd3nd9}"|                      dd:| j        › �d2|› �||"dd;œ¦  «         n3# t>          $ r&}#tD           (                    d<| |#¦  «         Y d}#~#nd}#~#ww xY w|S )=z[Render ALL pages of a PDF drawing to high-resolution PNG images and save to static storage.r   )ÚVietnameseCadFontTranscoderé   ÚstaticÚdrawingsT)ÚparentsÚexist_oké    )r   Ústructured_markdownÚ Ng      R@)ÚmatrixÚ_pr   ú.pngz_master.pngÚpngzutf-8ÚtextzTrang u2   Trang 1: BÃ¬a Há»“ SÆ¡ / Máº·t Báº±ng Tá»•ng Thá»ƒu   Ã©p cá»«u
   cá»« thÃ©pÚlarsenu&   : Máº·t Báº±ng & Biá»‡n PhÃ¡p Ã‰p Cá»«u   mÃ³ngu   cá»™tu&   : Máº·t Báº±ng MÃ³ng & Bá»‘ TrÃ­ Cá»™tu   thÃ©pu   cá»‘t thÃ©pu-   : Chi Tiáº¿t Cá»‘t ThÃ©p & Báº£ng Thá»‘ng KÃªu   máº·t cáº¯tu   phÃ¢n Ä‘oáº¡nu'   : Máº·t Cáº¯t & Chi Tiáº¿t Cáº¥u Kiá»‡nu   máº·t báº±ngu   cá»‘ngu#   : Máº·t Báº±ng Tuyáº¿n Cá»‘ng Há»™pu   bÃ¬nh Ä‘á»“u"   : BÃ¬nh Ä�á»“ Tuyáº¿n CÃ´ng TrÃ¬nhu   kháº£o sÃ¡tu    : Pháº§n I - Kháº£o SÃ¡t Tuyáº¿nu   thiáº¿t káº¿u#   : Pháº§n II - Há»“ SÆ¡ Thiáº¿t Káº¿g      à?gÍÌÌÌÌÌä?g       @)r   Úclipz/static/drawings/z	image/pngi }  )Úpage_numberÚtitleÚ	image_urlÚimage_base64Úcrop_image_base64Ú	mime_typeÚ
text_layerÚai_structured_markdownzC[TAKEOFF] PyMuPDF rendering failed: %s. Trying Pillow / raw read...)r    z.jpgz.jpegz.webpÚrbz
image/jpegu   Báº£n váº½: )r%   r&   r'   r(   r*   r+   z*[TAKEOFF] Failed reading image file %s: %s))Ú>app.modules.takeoff.application.vietnamese_cad_font_transcoderr   r   Ú__file__Úresolver   ÚmkdirÚstemr   Ú!extract_ai_friendly_pdf_structureÚminÚgetÚfitzÚopenÚstrÚlenÚrangeÚMatrixÚ
get_pixmapÚsaveÚbase64Ú	b64encodeÚtobytesÚdecodeÚget_textÚauto_transcode_cad_textÚlowerÚrectÚwidthÚheightÚRectÚ	ExceptionÚappendÚcloseÚloggerÚwarningÚsuffixÚshutilÚcopy2ÚreadÚerror)$r   r   r   r   r   Úrendered_pagesÚstatic_drawings_dirÚfile_prefixÚai_structureÚfull_structured_mdr6   ÚdocÚtotal_pagesÚpage_idxÚpageÚzoomÚmatÚpixÚpage_png_nameÚpage_png_pathÚmaster_png_pathÚb64Úraw_textÚ
clean_textr&   Útxt_lÚcrop_b64ÚpwÚphÚtb_rectÚtb_pixÚeÚ
target_pngÚfÚmimeÚread_errs$                                       ú@C:\Projects\DSCons\app\modules\takeoff\application\pdf_images.pyÚrender_pdf_to_imagesz*DrawingPdfImagesMixin.render_pdf_to_images   sÓ  € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 02ˆå•‰NŒN×"Ò"Ñ$Ô$Ô,¨QÔ/°(Ñ:¸ZÑGð 	ð 	×!Ò!¨$¸Ð!Ñ>Ô>Ð>Ý˜‘O”Oˆ	Ø$.ÐB�j�j°I´Nˆõ 2ÔSØ¥ Y°Ñ!4Ô!4ð
ñ 
ô 
ˆð *×-Ò-Ð.CÀRÑHÔHÐðQ	ØˆKˆKˆKà—)’)�C 	™NœNÑ+Ô+ˆCÝ�c #™hœh¨	Ñ2Ô2ˆKÝ! +Ñ.Ô.ð Fñ F�Ø˜8”}�Ø˜T‘z�Ø—k’k $¨Ñ-Ô-�Ø—o’o¨S�oÑ1Ô1�ð $/Ð DÐ D°(¸Q±,Ð DÐ DÐ D�Ø 3°mÑ C�Ø—’�˜]Ñ+Ô+Ñ,Ô,Ð,à˜q’=�=Ø&9¸{Ð<WÐ<WÐ<WÑ&W�OØ—H’H�S Ñ1Ô1Ñ2Ô2Ð2õ Ô& s§{¢{°5Ñ'9Ô'9Ñ:Ô:×AÒAÀ'ÑJÔJ�àŸ=š=¨Ñ0Ô0Ð6°B�Ø8×PÒPØñô �
ð
 0 ¨A¡Ð/Ð/�Ø"×(Ò(Ñ*Ô*�Ø˜q’=�=ØP�E�EØ 5Ð(Ð(¨L¸EÐ,AÐ,AÀXÐQVÐEVÐEVØY X°¡\ÐYÐYÐY�E�EØ Ð%Ð%¨°EÐ)9Ð)9ØY X°¡\ÐYÐYÐY�E�EØ Ð%Ð%¨¸%Ð)?Ð)?Ø` X°¡\Ð`Ð`Ð`�E�EØ" eÐ+Ð+¨À%Ð/GÐ/GØZ X°¡\ÐZÐZÐZ�E�EØ# uÐ,Ð,°¸UÐ1BÐ1BØV X°¡\ÐVÐVÐV�E�EØ" eÐ+Ð+ØU X°¡\ÐUÐUÐU�E�EØ" eÐ+Ð+ØS X°¡\ÐSÐSÐS�E�EØ# uÐ,Ð,ØV X°¡\ÐVÐVÐV�Eð �ðàœœ�BØœÔ)�BØ"Ÿiši¨¨S©°"°t±)¸RÀÑDÔD�GØ!Ÿ_š_°D·K²KÀÀSÑ4IÔ4IÐPW˜_ÑXÔX�FÝ%Ô/°·²¸uÑ0EÔ0EÑFÔF×MÒMÈgÑVÔV�H�HøÝ ð ð ð Ø�Dðøøøð ×%Ò%à'/°!¡|Ø!&Ø%H¸Ð%HÐ%HØ(+Ø-5Ø%0Ø&0°°%°Ô&8à# qš=˜=ð 3EÐ2Dàðð ñô ð ñ ð �IŠI‰KŒKˆKØ!Ð!øÝð 	ð 	ð 	Ý�NŠNØUÐWXñô ð ð ð ð ð ð øøøøð	øøøð Ô×!Ò!Ñ#Ô#Ð'IÐIÐIðØ#.Ð ;Ð ;Ð ;�Ø0°=Ñ@�
Ý”˜Y¨
Ñ3Ô3Ð3Ý˜) TÑ*Ô*ð E¨aÝ Ô*¨1¯6ª6©8¬8Ñ4Ô4×;Ò;¸GÑDÔD�CðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eð $-Ô#3×#9Ò#9Ñ#;Ô#;¸vÒ#EÐ#E�K�KÈ<ð ð ×%Ò%à'(Ø!@°	´Ð!@Ð!@Ø%H¸Ð%HÐ%HØ(+Ø%)Ø&(ðð ñ	ô 	ð 	ð 	øõ ð ð ð Ý—’Ø@À)ÈXñô ð ð ð ð ð ð øøøøðøøøð
 Ðs|   Â,HN) Ê1BMÍN) Í
MÍN) ÍMÍAN) Î)
OÎ3OÏOÏ7/S  Ð&:Q,Ñ S  Ñ,Q0Ñ0S  Ñ3Q0Ñ4AS  Ó 
S0Ó
S+Ó+S0)r
   r   N)
r   r   r   r   r   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ústaticmethodrq   © ó    rp   r	   r	      sI   € € € € € Øð ØØ!%ð	Fð Fð Fð Fñ „\ðFð Fð Frw   r	   )Ú
__future__r   r>   ÚloggingrO   Úpathlibr   Útypingr   Ú	getLoggerrr   rL   Úpdf_structure_mdr   r	   rv   rw   rp   ú<module>r~      s¶   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€à 8Ð 8Ð 8Ð 8Ð 8Ð 8ðHð Hð Hð Hð Hñ Hô Hð Hð Hð Hrw   